[Kafka] Connection to node -1 could not be established 오류 해결 방법

Wookoa 2025. 3. 16.

Broker may not be available
Broker may not be available

머리말

  카프카를 설치하고 메시지 송수신 테스트를 위해 토픽을 생성할 때 발생한 오류 메시지다. 네트워크 통신 중 연결이 정상적이지 않아 발생하는 오류 메시지이며, 카프카의 아키텍처를 조금만 이해하면 충분히 해결이 가능하다. 본 포스팅에서는 카프카에서 발생하는 Broker may not be available 오류 메시지를 해결하는 방법에 대해서 소개한다.

Broker may not be available error

  카프카를 설치하고 토픽이 정상적으로 생성되는지 확인하기 위해 기본으로 제공되는 kafka-topics.sh 스크립트를 사용했다. 정상적으로 수행되지 않았고 아래와 같은 오류 메시지가 출력되었다. 카프카의 bin 디렉터리에서 아래와 같은 명령어를 수행했으며, 클러스터링으로 구성된 3대의 서버 중 리더(Leader) 서버에서 수행했다. 리더 서버에서 수행하지 않아도 출력되는 에러 메시지는 동일하며, 테스트를 위한 토픽은 testTopic 이름으로 생성했다.

kafka-topics.sh --bootstrap-server kafka1.wookoa.com:9092 --create --topic testTopic --partitions 1 --replication-factor 3

    [root@kafka1 /]# /usr/local/kafka/bin/kafka-topics.sh --bootstrap-server kafka1.wookoa.com:9092 --create --topic testTopic --partitions 1 --replication-factor 3
    [2025-02-26 09:45:48,345] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:48,363] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:48,566] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:48,874] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:49,313] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:50,255] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:51,346] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
    [2025-02-26 09:45:52,207] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (kafka1.wookoa.com/192.168.219.231:9092) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

  오류 메시지에서 충분히 짐작할 수 있듯이 카프카 서버에서 9092 포트의 방화벽이 열려있지 않아서 발생한 오류 상황이다. 해당 포트는 카프카 브로커(Broker)와 클라이언트(Producer, Consumer) 사이에 메시지를 주고받기 위해 사용되는 포트이다. 따라서, 9092 포트에 대해 방화벽을 허용하면 해당 오류는 해결이 가능할 수 있으며, 카프카 브로커 리스너에 대한 포트 번호 설정은 아래의 경로에서 확인할 수 있다.

[root@kafka1 config]# vi /usr/local/kafka/config/server.properties

 

... 중략 ...
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://0.0.0.0:9092

# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092
advertised.listeners=PLAINTEXT://kafka1.wookoa.com:9092
... 중략 ...

카프카는 분산 메시지 시스템으로써 Producer, Broker, Consumer, Zookeeper로 구성된다. 각각의 역할을 간단히 정리하면 아래와 같이 설명할 수 있다.

- 프로듀서(Producer): 데이터를 카프카 Broker에게 전송

- 브로커(Broker): 데이터를 보관하며 데이터를 요청하는 Consumer에게 제공

- 컨슈머(Consumer): 브로커로부터 데이터를 전달받아 사용

- 주키퍼(Zookeeper): 카프카 브로커 등록 및 리더 선출 등 클러스터 상태 관리

  만약, 각각의 카프카 서버에서 9092 포트에 대해 방화벽을 해제했음에도 동일한 오류가 발생한다면 주키퍼와 통신이 정상적으로 이루어졌는지 확인이 필요하다. 주키퍼는 카프카의 리더, 클러스터 상태 등을 관리하기 위한 메타 데이터 관리 시스템으로 사용된다. 주키퍼에 상태를 보관하고 관리하기 위해 기본적으로 2181 포트를 사용하며, 주키퍼 서버에서 2181 포트에 대해 방화벽을 허용하면 해결할 수 있다. 주키퍼 포트 번호 설정은 아래의 경로에서 확인할 수 있다.

[root@zookeeper1 conf]# vi /usr/local/zookeeper/conf/zoo.cfg

 

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zk
clientPort=2181
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
server.1=0.0.0.0:2888:3888
server.2=zookeeper2.wookoa.com:2888:3888
server.3=zookeeper3.wookoa.com:2888:3888

꼬리말

  주로 카프카 서버를 처음 구성하고 환경을 구성하는 단계에서 만나게 되는 오류 메시지다. 특정 포트의 방화벽 해제를 통해 해결이 가능한데, 어떤 포트를 어디에서 해제해야 될지 가늠하기 어려울 수 있다. 카프카 서버의 클러스터링과 주키퍼의 역할에 대해서 이해한다면 충분히 해결이 가능한 오류 메시지다. 카프카 서버에서 발생하는 Broker may not be available 오류를 해결하는 방법에 대해서 소개한 본 포스팅은 이로써 마무리르 짓도록 한다.

인기있는 글

소중한 댓글 (0)