sh kafka-topics.sh --bootstrap-server kafka01:9092,kafka02:9092,kafka03:9092 --replication-factor 3 --partitions 3 --topic 20221227_test01 --create
분명 broker 가 3개가 되어야 하는데 1개만 잡힌다.
각 kafka의 상태를 체크해보니 다음과 같다
- kafka01
- kafka02
- kafka03
3번을 제외한 1,2번은 정상적으로 서비스가 올라오지 못한것으로 보인다.
1,2번 broker에 대한 설정이 먼가 이슈가 있을 것으로 예측하고 설정파일을 확인해보니 아래와 같은 부분이 의심스러웠다.
Kafka 클러스터 내의 broker 리스트는 Zookeeper가 관리하므로 설정 파일에는 다른 broker에 대한 정보를 입력할 필요 없이 자신의 broker ID만 명시해 주면 된다.
별도의 파일에 인스턴스의 ID를 명시해야 하는 Zookeeper와는 달리 Kafka는 설정 파일의 broker.id라는 항목에 인스턴스의 ID를 아래와 같이 명시하면 된다.
우선 broker id 설정값을 확인해 보았다.
- kafka01
broker.id=1- kafka02
broker.id=2- kafka03
broker.id=3
각각 1,2,3으로 설정되있었고 id 문제는 아닌것으로 판단된다.
두번째 예상항목인 listeners 설정과 advertised.listeners 설정을 확인해보았다.
- kafka01
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka01:9092- kafka02
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka02:9092- kafka03
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://kafka03:9092
여기도 별다른 설정상의 이슈가 발견되지 않았다.
이번에는 zookeeper connect 관련 부분을 살펴봤다.
kafka01
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/kafka01_znode
kafka02
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/kafka02_znode
kafka03
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/kafka03_znode
zookeeper와 연동을 위하여 zookeeper.connect라는 항목에 Zookeeper 인스턴스들의 정보를 입력한다. 그런데 설정을 보니 전부 각각 다른 인스턴스 정보가 설정되어 있었다.
이것때문에 클러스터 안에 있는 각 kafka broker들이 연결이 안되고 있을 것으로 의심이 되었고 broker들의 zookeeper.connect설정을 아래와 같이 일괄 변경했다
kafka01, kafka02, kafka03 공통으로 설정.
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/node
설정을 변경후 1번 kafka 부터 restart를 시도후 상태를 확인 해보았다.
sudo systemctl restart kafka-server.service
sudo systemctl status kafka-server.service
zookeeper connect 경로 변경으로 인해 기존에 있던 클러스터 ID정보가 유효하지 않아 문제가 되는 것으로 보였다.
meta.properties 를 삭제후 kafka를 재실행시켜 다시 생성해서 이를 해결해보려 했다.
- kafka01
- kafka02
- kafka03
3대의 kafka 상태가 정상으로 올라온 것이 확인 되었다.
- kafka01
topic 리스트를 조회하여 생성이 정말 되었는지 확인해보자.
- kafka01
나머지 02, 03번에서도 topic list가 조회가 되는지 확인해보자.
- kafka02
- kafka03
이제 broker 3대가 정상적으로 연동되고 replication이 되고 있는 것을 확인 할 수 있었다.
다음 단계는 생성된 topic기준으로 프로듀서와 컨슈머 작동을 확인해보도록 하자.