Kafka Cluster 확장
kafka cluster를 확장하려면 고유한 ID를 부여한 새로운 Broker를 Zookeeper Ensemble에 연결만 하면 된다.
하지만 자동으로 partition을 새로운 broker로 옮겨주지 않는다. 그래서 아래 두개 중에 하나의 명령어를 사용해야 한다.
- kafka-reassign-partitions 도구
- Confluent Auto Data Balancer/Self-Balancing Cluster 기능
kafka-reassign-partitions 명령
리밸런싱을 직접 계산해서 topic 별로 실행해야 한다. 계산을 일일이 다 해야 하기 때문에 계산 실수로 인한 문제가 발생할 수도 있다.
$ kafka-reassign-partitions \
--bootstrap-server kafka1:9092 \
--zookeeper zk1:2181 \
--reassignment-json-file reassignment.json \
--execute
# json file
{
"partitions": [
{
"topic":"my-test-topic",
"partition": 3,
"replicas": [2,3],
"log_dirs": ["/var/lib/kafka/data1","any"]
}
],
"version": 1
}
Confluent ADB(Auto Data Balancer)
confluent 에서 제공하는 ADB는 Broker 전체에 대한 Partition 리밸런싱을 자동화해준다. 아래 명령어 하나로 Cluster내의 전체 Broker에 대한 Partition 리밸런싱을 자동 계산 및 수행해준다.
$ confluent-rebalancer execute \
--zookeeper zk1:2181 \
--metrics-bootstrap-server kafka1:9092,kafka2:9092 \
--throttle 2000000 \
--verbose \
--force
한번에 하나의 리밸런싱만 수행할 수 있고, 모든 broker에 있는 모든 partition을 다 보고 어떻게 옮길 건지를 계산하기 때문에 시스템 자원을 많이 사용한다. 또한, cluster 내의 전체 broker 가 살아있을 때만 동작한다.
Confluent Self-Balancing Cluster
사용자가 명령어를 실행할 필요도 없이 On/Off 로 간단하게 설정하며, 계산 및 실행을 모두 자동화해준다. 즉, Broker 노드 추가시, 자동으로 리밸런싱을 실행해준다. 아래 그림은 control center라고 하는 kafka 관리 도구인데 여기서 self-balancing을 on으로 해주면 된다.
Partition 이동
broker가 추가되어 리밸런싱을 할 때 실제로 partition 이 어떻게 이동할까? 새로운 broker내에 Replica를 생성 후 기존 Replica 삭제하는 방식으로 진행한다. Downtime 없이 Partition을 이동하기 위함이다.
Kafka Cluster 축소
Kafka Cluster 축소는 cluster의 사용률이 낮거나 broker 장비에 대한 유지보수를 하기 위해서 사용한다. broker를 없애기 위해서는 아래 도구들을 , 제거할 Broker의 Partition들을 다른 Broker에 재할당한다.
- kafka-reassign-partition
- Broker의 Partition들을 수작업으로 모두 옮겨야 함
- Auto Data Balancer
- –remove-broker-ids 옵션을 사용하여 제거할 Broker를 쉽게 지정하여 Partition 재할당
- Self-Balancing Cluster
- kafka-remove-brokers 명령으로 제거할 Broker를 Shutdown만 하면 자동으로 Partition 재할당
이를 실행하려면 제거할 broker를 controlled shutdown (kafka-server-stop)을 해야한다.
Broker 장비를 교체할때는, 교체 대상 Broker의 ID 만 동일하게 설정하고 새로운 Broker를 기동시키면 zookeeper emsemble에 붙어서 원래 가지고 있던 partition들을 복제해 온다.