kafka 3.5버전
🚀 문제 상황
zookeeper 서버 실행 -> kafka 서버 실행 -> kafka 서버에 토픽이 있는지 확인 요청 -> TimeoutException
zookeeper와 kafka 서버 둘 다 서버 기동 확인하고 포트번호 확인하였고, 그 후 카프카 서버에 토픽 확인 요청이나 생성 요청을 보낼 시에 찾지못하고 TimeoutException이 발생했다.
자세한 내용을 보면 "Timed out waiting for a node assignment"로 노드 할당 대기 시간 초과라고 되어있었다.
카프카 서버에 무언가 제대로 요청이 안되었음을 직감하고 stackoverflow에 검색해보았다.
🚀 해결 방법
카프카 설정폴더 안에 server.properties를 수정한다.
위 사진처럼 주석이 되어있거나 없다면 listeners=PLAINTEXT://localhost:9092 를 넣고 카프카 서버를 재기동한다.
이 후 다시 카프카 서버에 토픽 확인 및 생성 요청을 하면 정상 수행되는 모습을 볼 수 있었다.
🚀 server.properties의 listeners 옵션은?
해당 파일에 주석으로 설명이 되어있는데 이를 읽어보자.
소켓 서버가 수신 대기하는(listen) 주소이다. 만약 구성되지 않은 경우, 호스트 이름(host_name)은 java.net.InetAddress.getCanonicalHostName()과 같고, PLAINTEXT 수신기 이름(listener_name)과 포트(port) 9092이다.
위 영어글 밑에는 FORMAT과 EXAMPLE이 있는데 포맷에 주석에 나와있는 내용을 넣어보면 EXAMPLE이 된다.
즉, 아래와 같다.
- listener_name -> PLAINTEXT
- host_name -> your.host.name
- port -> 9092
그래서 소켓 서버가 수신대기하는 주소를 저렇게 localhost:9092 로 명시함으로써 실행이 된 것이다.
🚀 advertised.listeners 옵션은?
사진 바로 아래에 advertised.listeners 옵션 설정도 있기에 놓치면 안될 것 같아서 위 사진에 나온 내용을 해석하여 아래에 적어본다.
브로커가 클라이언트에 알릴 Listener name, hostname, port 를 설정하지 않으면 "listeners" 값을 사용한다.
이건 설정안하면 위에서 설정했던 "listeners"를 그대로 사용한다.
즉, "listenres" 는 내부적으로 바인딩하는 주소이고, "advertised.listeners"는 클라이언트(컨슈머,프로듀서)같은 외부에 노출할 주소인 것이다. 내부와 외부에 오픈할 특정 IP 주소를 별도로 두기 위해 존재하는 것이다.
'프로그래밍 > Apache Kafka' 카테고리의 다른 글
아파치 카프카란 무엇일까? (0) | 2022.09.15 |
---|