Di Kafka, saya hanya ingin menggunakan satu broker, satu topik, dan satu partisi yang memiliki satu produsen dan banyak konsumen (masing-masing konsumen mendapatkan salinan data sendiri dari broker). Mengingat ini, saya tidak ingin overhead menggunakan Zookeeper; Bisakah saya tidak hanya menggunakan broker saja? Mengapa seorang penjaga kebun binatang harus?
134
Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
Jawaban:
Ya, Zookeeper diperlukan untuk menjalankan Kafka. Dari dokumentasi Memulai Kafka:
Mengenai alasannya, orang-orang yang sudah lama mengetahui bahwa Anda perlu memiliki beberapa cara untuk mengoordinasikan tugas, manajemen negara, konfigurasi, dll di seluruh sistem terdistribusi. Beberapa proyek telah membangun mekanisme mereka sendiri (bayangkan server konfigurasi di dalam cluster shoeded MongoDB, atau sebuah master node dalam sebuah cluster Elasticsearch). Yang lain telah memilih untuk memanfaatkan Zookeeper sebagai sistem koordinasi proses distribusi terdistribusi umum. Jadi Kafka, Storm, HBase, SolrCloud hanya menyebutkan beberapa saja menggunakan Zookeeper untuk membantu mengelola dan berkoordinasi.
Kafka adalah sistem terdistribusi dan dibangun untuk menggunakan Zookeeper. Fakta bahwa Anda tidak menggunakan salah satu fitur terdistribusi dari Kafka tidak mengubah bagaimana itu dibangun. Dalam hal apa pun seharusnya tidak ada banyak overhead dari menggunakan Zookeeper. Pertanyaan yang lebih besar adalah mengapa Anda akan menggunakan pola desain khusus ini - implementasi broker tunggal Kafka melewatkan semua fitur keandalan cluster multi-broker bersama dengan kemampuannya untuk mengukur.
sumber
Seperti yang dijelaskan oleh yang lain, Kafka (bahkan dalam versi terbaru) tidak akan berfungsi tanpa Zookeeper.
Kafka menggunakan Zookeeper untuk yang berikut:
Memilih pengontrol . Pengontrol adalah salah satu pialang dan bertanggung jawab untuk menjaga hubungan pemimpin / pengikut untuk semua partisi. Ketika sebuah simpul dimatikan, itu adalah pengontrol yang memberitahu replika lain untuk menjadi pemimpin partisi untuk menggantikan pemimpin partisi pada simpul yang akan pergi. Zookeeper digunakan untuk memilih controller, pastikan hanya ada satu dan pilih yang baru jika crash.
Keanggotaan cluster - broker mana yang masih hidup dan bagian dari cluster? ini juga dikelola melalui ZooKeeper.
Konfigurasi topik - topik apa yang ada, berapa banyak partisi yang dimiliki, di mana replika, siapa pemimpin yang disukai, konfigurasi apa yang ditimpa ditetapkan untuk setiap topik
(0.9.0) - Kuota - berapa banyak data yang dapat dibaca dan ditulis oleh setiap klien
(0.9.0) - ACL - yang diizinkan membaca dan menulis ke topik mana (konsumen tingkat tinggi lama) - Kelompok konsumen mana yang ada, siapa anggota mereka dan berapa offset terbaru yang didapat setiap kelompok dari setiap partisi.
[dari https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira ]
Mengenai skenario Anda, hanya satu instance broker dan satu produsen dengan banyak konsumen, Anda dapat menggunakan pendorong untuk membuat saluran, dan mendorong acara ke saluran yang dapat dilanggankan oleh konsumen dan menyerahkan acara tersebut. https://pusher.com/
sumber
Pembaruan penting - Agustus 2019:
Ketergantungan ZooKeeper akan dihapus dari Apache Kafka . Lihat diskusi tingkat tinggi di KIP-500 : Ganti ZooKeeper dengan Kuorum Metadata yang Dikelola Sendiri .
Upaya ini akan mengambil beberapa rilis Kafka dan KIP tambahan. Pengendali Kafka akan mengambil alih tugas tugas ZooKeeper saat ini. Pengendali akan memanfaatkan manfaat Log Kejadian yang merupakan konsep inti Kafka.
Beberapa manfaat dari arsitektur Kafka baru adalah arsitektur yang lebih sederhana, kemudahan operasi dan skalabilitas yang lebih baik (misalnya memungkinkan "partisi tak terbatas".
sumber
Diperbarui pada Jul 2020
Untuk versi terbaru (2.5.0) ZooKeeper masih diperlukan untuk menjalankan Kafka, tetapi dalam waktu dekat ZooKeeper akan diganti dengan Kuorum Metadata yang Dikelola Sendiri .
Lihat detail di KIP-500 yang diterima .
sumber
Kafka dibangun untuk menggunakan Zookeeper. Tidak ada jalan keluar dari itu.
Kafka adalah sistem terdistribusi dan menggunakan Zookeeper untuk melacak status node cluster kafka. Ini juga melacak topik Kafka, partisi dll.
Melihat pertanyaan Anda, sepertinya Anda tidak perlu Kafka. Anda dapat menggunakan aplikasi apa pun yang mendukung pub-sub seperti Redis , Rabbit MQ atau solusi yang di-host seperti Pub-nub .
sumber
IMHO Zookeeper bukan overhead tetapi membuat hidup Anda jauh lebih mudah.
Ini pada dasarnya digunakan untuk memelihara koordinasi antara node yang berbeda dalam sebuah cluster. Salah satu hal paling penting bagi Kafka adalah menggunakan zookeeper untuk melakukan offset secara berkala sehingga jika terjadi kegagalan simpul dapat dilanjutkan dari offset yang dilakukan sebelumnya (bayangkan diri Anda mengurus semua ini sendiri).
Zookeeper juga memainkan peran penting untuk melayani banyak tujuan lain, seperti deteksi pemimpin, manajemen konfigurasi, sinkronisasi, mendeteksi kapan sebuah node baru bergabung atau meninggalkan cluster, dll.
Rilis Kafka di masa depan berencana untuk menghapus ketergantungan zookeeper tetapi sampai sekarang ini merupakan bagian integral dari itu.
Berikut adalah beberapa baris yang diambil dari halaman FAQ mereka:
Untuk lebih jelasnya cek di sini
sumber
IMHO zookeeper is not an overhead but makes your life a lot easier.
-> bukan dari pandangan sysop. Zk adalah bagian dari Java cruft yang terbelakang. Misalnya ia memiliki bug yang luar biasa panjang karena tidak mematuhi ttl entri dns sehingga tidak akan menyelesaikan kembali entri. Keluar dari jendela pergi kemungkinan swap server Anda. Saya akan menukarnya dengan bahagia untuk etcd.Zookeeper adalah sistem sentralisasi dan manajemen untuk semua jenis sistem terdistribusi. Sistem terdistribusi adalah modul perangkat lunak yang berbeda yang berjalan pada node / cluster yang berbeda (mungkin berada di lokasi yang jauh secara geografis) tetapi berjalan sebagai satu sistem. Zookeeper memfasilitasi komunikasi antara node, berbagi konfigurasi di antara node, itu melacak node mana yang menjadi pemimpin, yang mana node bergabung / pergi, dll. Zookeeper adalah orang yang menjaga sistem terdistribusi tetap waras dan mempertahankan konsistensi. Zookeeper pada dasarnya adalah platform orkestrasi.
Kafka adalah sistem terdistribusi . Dan karenanya diperlukan semacam orkestrasi untuk node-node yang mungkin secara geografis jauh (atau tidak).
sumber
Ya, Zookeeper harus dirancang untuk Kafka. Karena Zookeeper memiliki tanggung jawab mengelola semacam cluster Kafka. Ia memiliki daftar semua broker Kafka. Ini memberi tahu Kafka, jika ada broker turun, atau partisi turun atau broker baru naik atau partisi naik. Singkatnya ZK membuat setiap broker Kafka diperbarui tentang keadaan saat ini dari cluster Kafka.
Maka setiap klien Kafka (produsen / konsumen) yang perlu dilakukan hanyalah terhubung dengan broker tunggal dan broker tersebut memiliki semua metadata yang diperbarui oleh Zookeeper, sehingga klien tidak perlu repot-repot dengan sakit kepala penemuan broker.
sumber
Selain transfer pesan payload biasa, ada banyak komunikasi lain yang terjadi di kafka, seperti
Zookeeper sendiri adalah sistem terdistribusi yang terdiri dari beberapa node dalam sebuah ensemble. Zookeeper adalah layanan terpusat untuk mempertahankan metadata tersebut.
sumber
Artikel ini menjelaskan peran Zookeeper dalam Kafka. Ini menjelaskan bagaimana kafka tidak memiliki kewarganegaraan dan bagaimana zookeper memainkan peran penting dalam sifat didistribusikan kafka (dan banyak lagi sistem yang didistribusikan).
sumber
Permintaan untuk menjalankan Kafka tanpa Zookeeper tampaknya cukup umum. Perpustakaan Charlatan membahas ini.
Menurut uraiannya adalah Charlatan kurang lebih merupakan tiruan bagi Zookeeper, menyediakan layanan Zookeeper baik didukung oleh alat lain atau oleh database.
Saya menemukan perpustakaan itu ketika berhadapan dengan produk utama penulis untuk perpustakaan Charlatan; itu dia bekerja dengan baik ...
sumber
Apache ZooKeeper adalah toko terdistribusi yang digunakan untuk menyediakan layanan konfigurasi dan sinkronisasi dengan cara yang tersedia. Dalam versi Kafka yang lebih baru, pekerjaan dilakukan agar konsumen klien tidak menyimpan informasi tentang seberapa jauh pesan itu dikonsumsi (disebut offset) ke dalam ZooKeeper.
.This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.
Sementara Kafka memberikan toleransi kesalahan dan ketahanan , diperlukan sesuatu untuk menyediakan koordinasi diperlukan dan ZooKeeper memungkinkan bagian dari keseluruhan sistem.Menyetujui siapa pemimpin partisi , adalah salah satu contoh penerapan praktis ZooKeeper dalam ekosistem Kafka.
Ini dari buku Kafka In Action . Gambar dari kursus ini
sumber