Infra/Kafka, MQTT

[Kafka] broker scale out/ scale in (카프카 브로커 스케일 아웃/스케일 인)

Nellie Kim 2024. 7. 1. 11:29
728x90

 

카프카 브로커를 스케일 아웃 하는 것은 처리량을 늘리기 위한 방법은 아니다. (처리량을 늘리려면 가장 먼저 파티션을 늘려야 한다)

카프카는 리더 브로커만 실질적으로 프로듀서와 통신하고 나머지 팔로워 브로커는 복제만 담당하기 때문이다. 

 

하지만 혹시 모를 이슈 상황을 대비해 카프카 브로커를 스케일 아웃 해보았다.

현재 카프카 브로커는 3개이며 5개로 스케일 아웃을 하고,  다시 3개로 스케일 인을 해보았다. 

 

  • 카프카 버전 : 3.7.0
  • 총 소요시간 : 8시간 (인증세팅이 없으면 1시간도 안걸리는 작업이지만, 카프카 브로커 sasl 인증을 추가해 줄 때 Credential을 자꾸 추가해 주는 실수를 해서... 오래 걸렸다. 한번 주키퍼에 저장된 Credentail은 다시 지정해줄 필요가 없다. 인증 프로세스 숙지가 미흡했기에 다시 공부를 하며 작업을 진행했다.)

 

Scale out 테스트

먼저, docker ps 와 docker images 로 현재 컨테이너 및 이미지를 조회. 현재 kafka1, kafka2, kafka3 이 띄워져 있다. 

1. kafka4 컨테이너 추가

docker-compose.yml에 추가하고 docker compose up 을 하면 모든 컨테이너가 새로 생성이 되기 때문에, 명령어로 컨테이너를 추가했다.

docker run --name kafka4 \\
  --network kafka_default \\
  -p 9095:9095 \\
  --restart unless-stopped \\
  -v /docker/kafka/kafka_server_jaas.conf:/opt/bitnami/kafka/config/kafka_server_jaas.conf \\
  -v /docker/kafka/sasl_client.properties:/opt/bitnami/kafka/config/sasl_client.properties \\
  -e KAFKA_BROKER_ID=4 \\
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9095 \\
  -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.2.44:9095 \\
  -e KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.2.44:2181,192.168.2.44:2182,192.168.2.44:2183 \\
  -e KAFKA_ENABLE_KRAFT=no \\
  -e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \\
  --user root \\
  bitnami/kafka

scale out 을 하기 위해 컨테이너를 1개 생성했다.

 

docker ps 로 kafka4가 생긴 것을 확인

 

2. server.properties 에 보안 정보 추가 (인증 세팅을 한 경우에만 진행)

docker exec -it kafka4 bash

apt-get update && apt-get install vim net-tools -y
vi /opt/bitnami/kafka/config/server.properties

listeners=SASL_PLAINTEXT://:9095
advertised.listeners=SASL_PLAINTEXT://192.168.2.44:9095
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512

 

3. 환경변수 설정 (인증 세팅을 한 경우에만 진행)

vi /opt/bitnami/scripts/kafka-env.sh

export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/bitnami/kafka/config/kafka_server_jaas.conf"

 

4. kafka4 재시작

exit
docker restart kafka4

 

5. 주키퍼에 붙은 카프카 브로커 목록 확인

zookeeper-shell.sh 명령어로 확인

zookeeper-shell.sh zookeeper1 ls /brokers/ids 

 

카프카 4가 주키퍼에 잘 붙은 것을 확인.

 

6. 카프카 5도 추가

위와 같은 방법으로 추가하였다.

브로커 5개가 주키퍼에 붙은 것을 확인.

 

Scale in 테스트

해당 브로커를 중지 또는 삭제하며 스케일 인을 할 수 있다. 현 테스트는 중지(stop)시키며 테스트했다.

 

1. 카프카 5 중지

먼저 제일 마지막에 추가한 kafka5먼저 중지했다.

docker stop kafka5

 

카프카 5를 중지시키니, 주키퍼에 붙은 카프카 브로커가 4개가 된 것을 확인.

 

2. 카프카 4중지

이제 fafka4를 중지시켰다.

docker stop kafka4

카프카 브로커가 원래대로 3개가 된 것을 확인.