Kafka Reassign Partitions

Doguspeynirci
Arabam Labs
Published in
2 min readNov 3, 2023

Bu işlem, Kafka cluster büyütülmesi, küçültülmesi, veri yükünün dengelemesi veya sunucu arızaları gibi durumlarda gerekebilir. Kafka reassign partition işlemi, kafka brokerları arasında bölümlerin yeniden dağıtılmasını ve tüketici gruplarının bu değişikliklere uyum sağlamasını sağlar.

Kafka reassign partition şu durumlarda kullanılır:

  1. Kafka cluster ölçeklendirilmesi: Yeni brokerlar eklenirken veya mevcut brokerlar kaldırılırken, partition’lar yeniden dağıtılabilir.
  2. Veri yükü dengelemesi: Belirli partition’lar üzerinde aşırı yüklenme veya eksik yüklenme durumlarında, reassign partititon ile dengelemek mümkün olabilir.
  3. Sunucu arızaları: Bir Kafka sunucusu arızalandığında veya bir partition bozulduğunda, reassign partititon ile sağlıklı sunuculara taşınabilir.

Kafka reassign partition işlemi dikkatle yapılmalıdır, çünkü bu işlem sırasında consumer’ların ve producer’ların bu değişikliklere uyum sağlaması gerekir. Ayrıca, reassign partition işlemi sırasında veri kaybı yaşanmaması için önlemler alınmalıdır.

[root@tenant-prod-kafka-broker01 ~]# sudo kafka-topics --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --describe --topic <topic_name>

cat << EOF | tee /tmp/topics.json
{
"topics": [
{"topic": "<topic_name>"}
],
"version":1
}
EOF

Aşağıda taşımak istediğimiz topiclerin json dosyasını reassignment için generate ediyoruz. Akabinde çalıştıracağımız komut ile, şuanki ve reassign yapıldığında kafka üzerine nasıl dağılacağını json üzerinden kontrol edebilirsiniz.

[root@tenant-prod-kafka-broker01 ~]# sudo kafka-reassign-partitions --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --generate --topics-to-move-json-file /tmp/topics.json --broker-list 1,2,3,4,5
[root@tenant-prod-kafka-broker01 ~]# sudo kafka-reassign-partitions --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --generate --topics-to-move-json-file /tmp/topics.json --broker-list 1,2,3,4,5 | tee >(awk -F: '/Current partition replica assignment/ { getline; print $0 }' | jq > /tmp/topic.current.json) >(awk -F: '/Proposed partition reassignment configuration/ { getline; print $0 }' | jq > /tmp/topic.proposed.json)
[root@tenant-prod-kafka-broker01 ~]# sudo kafka-reassign-partitions --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --verify --reassignment-json-file /tmp/topic.reassign.json
[root@tenant-prod-kafka-broker01 ~]# sudo kafka-reassign-partitions --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --execute --reassignment-json-file /tmp/topic.reassign.json
[root@tenant-prod-kafka-broker01 ~]# sudo kafka-reassign-partitions --bootstrap-server <IP>:<PORT> --command-config /etc/kafka/client.properties --verify --reassignment-json-file /tmp/topic.reassign.json

--

--