Data PipeLine/Kafka

[Kafka] 카프카 시작 시 주키퍼 id 충돌 이슈

연습장이 2024. 2. 28. 19:33
728x90
반응형

상황

  전사 전기 장비 관련하여 점검이 있어 모든 테스트 PC가 재부팅됨. 주키퍼와 브로커는 자동 재시작처리하지 않아 수동으로 시작하려고 했더니 에러 발생

에러 내용

[2024-02-13 14:34:40,718] ERROR Error while creating ephemeral at /brokers/ids/3, node already exists and owner '144143570463227906' does not match current session '216389134594146305' (kafka.zk.KafkaZkClient$CheckedEphemeral)
[2024-02-13 14:34:40,723] ERROR [KafkaServer id=3] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode = NodeExists
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:126)
        at kafka.zk.KafkaZkClient$CheckedEphemeral.getAfterNodeExists(KafkaZkClient.scala:1904)
        at kafka.zk.KafkaZkClient$CheckedEphemeral.create(KafkaZkClient.scala:1842)
        at kafka.zk.KafkaZkClient.checkedEphemeralCreate(KafkaZkClient.scala:1809)
        at kafka.zk.KafkaZkClient.registerBroker(KafkaZkClient.scala:96)
        at kafka.server.KafkaServer.startup(KafkaServer.scala:308)
        at kafka.Kafka$.main(Kafka.scala:109)

보면 주키퍼가 관리하는 카프카 브로커 노드들 중에 3번 노드가 이미 있어서 브로커가 뜨고 있지 못한 상태임. 즉, 물고 있는 브로커 노드 정보를 삭제해줘야 함. 여기서 중요한건

  • 한 5분 내로 주키퍼가 자동으로 삭제해줌
  • 급할 경우 수동으로 삭제해줘야함. cdc는 실시간성 서비스이므로 5분도 사실상 사치임

조치 방법

# 우선 주키퍼 클라이언트가 어딨는지 찾음
find / -name "zookeeper-shell.sh"

# 클라이언트에 접속
$KAFKA_HOME/bin/zookeeper-shell.sh localhost:2181

# 삭제 대상 ids 확인
ls /brokers/ids
[3]

# 수동 삭제 진행
delete /borkers/ids/3

# 삭제 정상 여부 확인
ls /brokers/ids

# 카프카 브로커 다시 올림
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

728x90
반응형