Programming/Message Queue

Kafka TimeoutException 해결 방법 org.apache.kafka.common.errors.TimeoutException: Call(callName=listTopics ...)

Jan92 2022. 12. 31. 11:42

kafka TimeoutException

kafka 서버 기동을 위해 'zookeeper 서버 기동' -> 'kafka 서버 기동' -> 'kafka 서버에 요청'을 하는 중 'TimeoutException'이 발생하여 해결한 내용입니다.

(사용된 kafka 버전은 kafka_2.13-2.7.0 버전입니다.)

 

 

Zookeeper 및 Kafka 서버 기동

//zookeeper server 기동
$KAFKA_HOME/bin/zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties

//kafka server 기동
$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties

다음 실행 명령을 통해 zookeeper 서버가 port 2181으로 구동된 것을 확인하였고, kafka 서버 역시 port 9092 번으로 started 된 것을 확인하였는데요.

 

 

Topic 목록 확인

//topic 목록 확인
$KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

해당 실행 명령을 통해 topic 목록을 요청했을 때 아래와 같이 TimeoutException이 발생하였습니다.

 

 

> ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
Error while executing topic command : Call(callName=listTopics, deadlineMs=1672451631007, tries=1, nextAllowedTryMs=1672451631108) timed out at 1672451631008 after 1 attempt(s)
[2022-12-31 10:53:51,016] ERROR org.apache.kafka.common.errors.TimeoutException: Call(callName=listTopics, deadlineMs=1672451631007, tries=1, nextAllowedTryMs=1672451631108) timed out at 1672451631008 after 1 attempt(s)
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: listTopics
 (kafka.admin.TopicCommand$)

org.apache.kafka.common.errors.TimeoutException

 

 

INFO Registered broker 0 at path /brokers/ids/0 with addresses: PLAINTEXT://218.xx.137.xx:9092, czxid (broker epoch): 98 (kafka.zk.KafkaZkClient)

원인을 파악하기 위해 kafka server가 기동 된 로그를 살펴보던 중 'PLAINTEXT://218.xx.137.xx:9092'라는 부분을 발견했는데요.

kafka 서버가 기동은 되었지만 localhost:9092로 접근할 수 있도록 허용되지 않은 것 같았습니다.

 

 

kafka timeoutException 해결 방법

//kafka_2.13-2.7.0 > config > server.properties file

listeners=PLAINTEXT://localhost:9092

해결 방법은 kafka 서버를 기동 할 때 사용되는 server.properties 파일에 위와 같은 옵션을 추가하는 것인데요.

해당 옵션을 추가한 후 kafka 서버를 다시 기동 하게 되면 로그에서 'PLAINTEXT://localhost:9092'로 변경된 것을 확인할 수 있으며, 이후 카프카 서버에 요청을 했을 때 TimeoutException이 발생하지 않는 것을 확인할 수 있었습니다.

 

 

kafka server 재기동이 안될 때

config > server.properties

추가로 kafka 서버 재기동이 안 되는 경우에는 server.properties 파일에서 'log.dirs='에 지정된 경로를 찾을 수 있는데요.

해당 경로 폴더에 존재하는 meta.properties 파일을 삭제한 후 다시 기동 하면 정상적으로 기동 할 수 있습니다.

 

 

 

< 참고 자료 >

https://stackoverflow.com/questions/71190928/error-org-apache-kafka-common-errors-timeoutexception-timed-out-waiting-for-a-n