Selasa, 29 Oktober 2019

Mengatasi Kafka Error Group Coordinator Not Available

Saya melakukan instalasi Kafka pada 3 node. Untuk melakukan pengujian fault tolerance, saya melakukan pengujian dengan cara mematikan salah satu node untuk memastikan data tetap mengalir. Yang unik adalah, jika saya mematikan node 2 atau node 3, Consumer tetap dapat menerima data dengan baik. Dalam hal ini menunjukkan bahwa rebalance berhasil dilakukan dengan baik oleh ZooKeeper. Namun, jika node 1 dimatikan, Consumer gagal menerima pesan, dengan error GROUP COORDINATOR NOT AVAILABLE.

Setelah melalui beberapa tahap googling, akhirnya saya berhasil menemukan penyebabnya. Yaitu:
  1. Node 1 adalah GroupCoordinator, dimana itu berarti ia adalah node yang bekerja sebagai leader, mengatur node lainnya (follower) dalam menangani topic sebagai sebuah cluster, dalam hal ini adalah proses yang dilakukan oleh Producer dan Consumer.
  2. Seharusnya, pada saat sebuah GroupCoordinator mati, ZooKeeper akan melakukan reassignment tugas leader dari node tersebut ke node lainnya. Namun, hal ini tidak terjadi sehingga Consumer gagal mendapatkan data karena cluster tidak memiliki leader.
Pertanyaannya, bagaimana proses reassignment ini tidak terjadi?

Kafka memiliki sebuah topic yang di-generate secara otomatis, yaitu __consumer_offsets yang berada di GroupCoordinator dan topic ini diperlukan agar Kafka dapat bekerja dengan normal. Namun ternyata, secara default, replication factor Kafka Topic adalah 1. Termasuk dalam hal ini adalah topic __comsumer_offsets tersebut. Dengan demikian, apabila GroupCoordinator mati, maka Kafka tidak dapat bekerja karena tidak ada topic tersebut di node lainnya.

Untuk mengecek topic __consumer_offsets
kafka_dir/bin/kafka-topics.sh --describe --zookeeper ip_address:port --topic __consumer_offsets 

Oleh karena itu, untuk menangani error tersebut di atas, cukup dengan mereplikasi topic __consumer_offsets, langkahnya:
  1. Matikan semua node Kafka
    kafka_dir/bin/kafka-server-stop.sh
  2. Tambahkan konfigurasi default replication factor
    nano kafka_dir/config/server.properties
    Tambahkan baris berikut:
    offsets.topic.replication.factor=3
    default.replication.factor=3
  3. Konfigurasi ulang topic __consumer_offsetsMasuk ke server Zookeeper
    zookeeper_dir/zkCli.sh -server localhost:2181
    rmr /brokers/topics/__consumer_offsets

    Pada versi ZooKeeper terbaru
    deleteall /brokers/topics/__consumer_offsets
  4. Restart semua node Kafka
    kafka_dir/bin/kafka-server-start.sh kafka_dir/config/server.properties
Demikian.

Tidak ada komentar:

Posting Komentar