kafka broker 클러스터는 master / slave 개념이 없다. 그냥 다 동등한 broker. 다만 partition에는 Leader와 Follower가 있으며 이 Leader 파티션을 각 broker에 균등하게 분배 해주는것이 kafka 부하분산의 핵심
그리고 quorum 개념으로 꼭 홀수의 노드구성이 필요하다는 것은 잘 알것이다.
kafka 서버 설치는 이전 포스팅을 참고해서 진행바란다.
https://armyost.tistory.com/254?category=1028239
kafka 서버 설치하기
CentOS7을 기준으로 작성한 가이드 입니다. JDK 설치 # sudo yum install java-1.8.0-openjdk-devel # java -version kafka 서버 Install # wget --no-check-certificate https://archive.apache.org/dist/kafka/3..
armyost.tistory.com
아래는 kafka 클러스터를 위한 환경설정 방법이다.
※ kafka 클러스터 인스턴스간에 firewall을 내리고 하던지 포트를 open 하던지하고 시작하길 바란다. 괜한 삽질이 발생할 수 있다.
1. zookeeper 클러스터링
1) broker 1번 서버에 zookeeper.properties 수정
broker1# vi $KAFKA_HOME/config/zookeeper.properties
---------------아래 내용 추가----------------------
initLimit=5
syncLimit=2
server.1=0.0.0.0:2888:3888
server.2=192.168.122.13:2888:3888
...
server.n=192.168.122.XX:2888:3888
다른 broker도 동일한 파일을 수정하고 해당 broker localhost는 0.0.0.0 처리한다.
2) broker n번 서버에 zookeeper.properties 수정
brokerN# vi $KAFKA_HOME/config/zookeeper.properties
---------------아래 내용 추가----------------------
initLimit=5
syncLimit=2
server.1=192.168.122.12:2888:3888
server.2=192.168.122.13:2888:3888
...
server.n=0.0.0.0:2888:3888
※ kafka의 broker가 될 각 인스턴스들의 $KAFKA_HOME/config/zookeeper.properties 파일은 하나의 Zookeeper를 실행하는데 쓰이는 설정 파일이다. 이 말은 zookeeper1.properties, zookeeper2.properties, zookeeper3.properties 이런식으로 여러개의 설정파일을 만들고 하나의 장비에서 다중으로 실행할 수 있다는 의미이다. 필자는 물리적 서버에 1개의 kafka broker를 적용할 예정이므로 1개의 properties만 사용하겠다.
3) zookeeper Start Up 및 정상작동 확인
# $KAFKA_HOME/bin/zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
# $KAFKA_HOME/bin/zookeeper-shell.sh localhost:2181
4) 모든 broker 서버에 다른 Server ID 할당
zookeeper.properties에 선언되어 있는 "dataDir" 경로에 myid 파일을 생성
※ 이 서버 ID는 zookeeper.properites에서 server.1 ... server.n 과 매칭하여 적용해야함
broker 1번 서버에서
# echo 1 > /tmp/zookeeper/myid
. . .
broker n번 서버에서
# echo n > /tmp/zookeeper/myid
2. kafka 클러스터링
1) broker 1번 서버에 myid 생성 및 server.properties 수정
broker1# vi $KAFKA_HOME/config/server.properties
---------------아래 내용을 수정--------------
broker.id=0 // ServerID와 무관. 그냥 0부터 시작해서 Unique하게 할당
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.122.12:9092
zookeeper.connect=192.168.122.12:2181, 192.168.122.13:2181, 192.168.122.14:2181 ... // zookeeper서버
- broker.id - 필수 - 브로커 (카프카 서버)를 구분하기 위한 ID로 유니크해야합니다.
- listeners - PLAINTEXT://:9092 (한 인스턴스에서 클러스터를 구성하시는 분들은 각 설정의 포트번호가 달라야합니다)
- advertiesed.listeners - PLAINTEXT://x.x.x.x:9092 (PLAINTEXT://각 인스턴스 ip: lisetners에서 설정한 포트)
- zookeeper.connect - 필수 - x.x.x.x:9092, x.x.x.x:9092, x.x.x.x:9092(각 서버 별 IP와 설정한 listeners의 포트)
2) broker n번 서버에 myid 생성 및 server.properties 수정
brokerN# vi $KAFKA_HOME/config/server.properties
---------------아래 내용을 수정--------------
broker.id=X // ServerID와 무관. 그냥 0부터 시작해서 Unique하게 할당
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.122.XX:9092
zookeeper.connect=192.168.122.12:2181, 192.168.122.13:2181, 192.168.122.14:2181 ... // zookeeper서버
3. 서비스 체크
각 서버에서 topic 생성 조회 명령을 통해
# $KAFKA_HOME/kafka-topics.sh --list --bootstrap-server localhost:9092
※ 만약 클러스터 설정후 kafka 서버실행시 server id가 중복된다는 로그가 발생하면 /tmp/kafka-logs/ 에 있는 metadata 파일을 지우기 바란다.
'PaaS > MQ' 카테고리의 다른 글
kafka 서버에 SSL 혹은 SASL 을 적용하면 성능 저하가 있을까? (0) | 2022.07.14 |
---|---|
kafka SASL 인증 구축하기 (0) | 2022.07.14 |
엔터프라이즈용 kafka의 환경구성 (0) | 2022.07.08 |
kafka 커넥트 (0) | 2022.07.08 |
kafka 스키마 레지스트리 (0) | 2022.07.08 |