Kafka Reassign Partitions
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:
- Kafka cluster ölçeklendirilmesi: Yeni brokerlar eklenirken veya mevcut brokerlar kaldırılırken, partition’lar yeniden dağıtılabilir.
- 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.
- 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