Apakah Zookeeper suatu keharusan bagi Kafka?


134

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?


12
Salah satu tujuan desain terbesar Kafka adalah penyebaran klaster. Itulah masalah yang mereka selesaikan, dan konyol untuk membuat versi tanpa zk untuk server mandiri. Saya merasa bahwa kafka bukan alat untuk pekerjaan Anda, tetapi Anda akan lebih baik hanya menggunakan file vanilla ..
RickyA

5
Saya benar-benar ingin tahu apa yang telah Anda selesaikan? Karena Anda tidak memilih jawaban apa pun, saya menganggap Anda memiliki solusi sendiri untuk ini. Terima kasih!
Karthikeyan

Jocko adalah implementasi golang dari Kafka tanpa ketergantungan zookeeper & instalasi biner tunggal
Arun Gopalpuri

1
Zookeeper telah dihapus, lihat jawaban di bawah ini - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi

1
hanya untuk menambahkan, jika Anda membaca apa yang dilakukan penjaga kebun binatang, Anda akan mendapatkan ide -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Jawaban:


128

Ya, Zookeeper diperlukan untuk menjalankan Kafka. Dari dokumentasi Memulai Kafka:

Langkah 2: Mulai server

Kafka menggunakan zookeeper sehingga Anda harus memulai server zookeeper terlebih dahulu jika Anda belum memilikinya. Anda dapat menggunakan skrip kenyamanan yang dikemas dengan kafka untuk mendapatkan instance zookeeper single-node yang cepat dan kotor.

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.


9
Faktanya, kafka dirancang sedemikian rupa sehingga walaupun Anda menggunakan broker tunggal , mode ini masih didistribusikan, tetapi dengan faktor replikasi 1 - tidak akan ada mekanisme pintas atau mode khusus (dan itu sebenarnya bagus).
om-nom-nom

2
Kafka 0.8.1 membutuhkan zk. Dan saya bertanya-tanya, jika tidak ada lapisan abstrak di Kafka untuk bekerja dengan sistem koordinasi, bagaimana sistem koordinasi lainnya dapat diaktifkan untuk Kafka.
stanleyxu2005


64

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/


3
Apakah Anda ingin mengedit "versi terbaru" ke dalam versi aktual. Menjadikan usia respons Anda lebih baik.
akauppi


Saya menambahkan referensi, paragraf terakhir berasal dari saya.
Kevin Li

47

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".


17

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 .


11

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 .


9

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:

Setelah kuorum Zookeeper turun, pialang dapat berakibat buruk dan biasanya tidak dapat melayani permintaan klien, dll. Meskipun ketika kuorum Zookeeper pulih, pialang Kafka harus dapat kembali ke keadaan normal secara otomatis, masih ada beberapa kasus sudut mereka tidak bisa dan membunuh-dan-pemulihan yang keras diperlukan untuk mengembalikannya ke normal. Oleh karena itu disarankan untuk memantau dengan cermat kluster zookeeper Anda dan menyediakannya agar performan.

Untuk lebih jelasnya cek di sini


13
Zookeeper adalah sakit kepala besar. Dalam HBase. Di Kafka. Dalam Storm. Ada bug lama yang saya ketahui di Kafka / ZK yang menyebabkan tim saya mengabaikannya demi RabbitMQ. Instalasi HBase melibatkan waktu untuk menangani masalah ZK. Namun jawaban Anda yang terkait dengan OP IS benar: ZK diperlukan.
javadba

2
Benar ada masalah kompatibilitas bug dan versi (setidaknya dengan Kafka dan ZK) tetapi tujuan utama zookeeper adalah untuk mengelola tugas-tugas kompleks yang diperlukan untuk sistem terdistribusi. Saya setuju bahwa mengelola dan menyetel kluster zk Anda memang membutuhkan usaha dan sangat bergantung di zk mungkin bukan panggilan yang bijaksana. Mungkin itulah sebabnya kafka mencoba mengurangi dependensi zk di versi yang lebih baru. Pada catatan yang berbeda saya percaya RabitMQ dan Kafka memiliki filosofi desain yang sangat berbeda dan bertujuan untuk menyelesaikan kasus penggunaan yang berbeda tetapi saya pikir itu di luar ruang lingkup diskusi ini :)
user2720864

Ya, kafka lebih unggul untuk skenario beban tinggi. Kami memutuskan untuk melakukan RabbitMQ sampai / kecuali kami jelas membutuhkan kelebihannya. Pemrograman di RabbitMQ juga lebih mudah: ada dependensi versi scala yang sulit untuk Kafka.
javadba

4
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.
RickyA

"Kami memutuskan untuk melakukan RabbitMQ sampai / kecuali kami jelas membutuhkan kelebihan itu". Semoga tim saya tercerahkan seperti ini. IMHO, kami jelas tidak memiliki beban yang cukup tinggi untuk membenarkan Kafka, tetapi kami tetap menggunakan Kafka :(
Mr Smith

4

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).


3

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.


3

Selain transfer pesan payload biasa, ada banyak komunikasi lain yang terjadi di kafka, seperti

  • Acara yang terkait dengan calo yang meminta keanggotaan cluster.
  • Acara yang terkait dengan Pialang tersedia.
  • Mendapatkan pengaturan konfigurasi bootstrap.
  • Acara yang terkait dengan pembaruan pengontrol dan pemimpin.
  • Bantuan pembaruan status seperti pembaruan Detak Jantung.

Zookeeper sendiri adalah sistem terdistribusi yang terdiri dari beberapa node dalam sebuah ensemble. Zookeeper adalah layanan terpusat untuk mempertahankan metadata tersebut.


1

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).


1

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 ...


0

pertama

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.

Kedua

Menyetujui siapa pemimpin partisi , adalah salah satu contoh penerapan praktis ZooKeeper dalam ekosistem Kafka.

Zookeeper would work if there was even a single broker. 

Ini dari buku Kafka In Action . Gambar dari kursus ini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.