Hayvan Bekçisi Kafka için bir zorunluluk mu?


136

Kafka'da tek bir üretici ve birden çok tüketiciye sahip tek bir aracı, tek bir konu ve tek bir bölüm kullanmak istiyorum (her tüketici komisyoncudan kendi veri kopyasını alıyor). Bu göz önüne alındığında, Zookeeper'ı kullanmanın ek yükünü istemiyorum; Sadece komisyoncuyu kullanamaz mıyım? Bir hayvan bakıcısı neden zorunludur?


12
Kafka'nın en büyük tasarım hedeflerinden biri küme dağıtımlarıdır. Çözdükleri sorun budur ve bağımsız bir sunucu için zk'siz bir sürüm yapmak aptalca olur.
Kafka'nın

5
Neyi sonlandırdığınızı gerçekten bilmek isterim? Cevaplardan hiçbirini seçmediğiniz için, bunun için kendi çözümünüz olduğunu varsayıyorum. Teşekkürler !
Karthikeyan

Jocko , hayvan bakıcısı bağımlılığı ve tek ikili kurulum olmadan Kafka'nın bir golang uygulamasıdır
Arun Gopalpuri,

1
Zookeeper kaldırıldı, aşağıdaki cevaba bakın - stackoverflow.com/a/57328140/1699956
Mangat Rai Modi

1
sadece eklemek için, zookeeper'ın ne yaptığını okursanız, fikri alacaksınız -Zookeeper is network coordinator in a distributed system. Use ZooKeeper extensively for discovery, resource allocation, leader election, and high priority notifications.
roottraveller

Yanıtlar:


128

Evet, Kafka'yı çalıştırmak için hayvan bakıcısı gereklidir. Kafka Başlarken belgelerinden:

Adım 2: Sunucuyu başlatın

Kafka hayvanat bahçesi görevlisi kullanır, bu nedenle eğer zaten yoksa bir hayvan bakıcısı sunucusu başlatmanız gerekir. Hızlı ve kirli tek düğümlü zookeeper örneği elde etmek için kafka ile paketlenmiş kullanışlı komut dosyasını kullanabilirsiniz.

Nedenine gelince, insanlar uzun zaman önce dağıtılmış bir sistemde görevleri, durum yönetimini, yapılandırmayı vb. Koordine etmenin bir yoluna ihtiyacınız olduğunu keşfettiler. Bazı projeler kendi mekanizmalarını oluşturmuştur (MongoDB parçalanmış kümedeki yapılandırma sunucusunu veya Elasticsearch kümesindeki bir Ana düğümü düşünün). Diğerleri, Zookeeper'dan genel amaçlı dağıtılmış bir süreç koordinasyon sistemi olarak yararlanmayı seçti. Yani Kafka, Storm, HBase, SolrCloud sadece birkaçını isimlendirmek için Zookeeper'ı yönetmeye ve koordine etmeye yardımcı olmak için kullanıyor.

Kafka dağıtılmış bir sistemdir ve Zookeeper'ı kullanmak için oluşturulmuştur. Kafka'nın dağıtılmış özelliklerinden hiçbirini kullanmamanız, nasıl inşa edildiğini değiştirmez. Her halükarda, Zookeeper'ı kullanmanın fazla ek yükü olmamalıdır. Daha büyük bir soru, neden bu özel tasarım modelini kullanacağınızdır - Kafka'nın tek bir aracı uygulaması, ölçeklendirme yeteneği ile birlikte çok aracılı bir kümenin tüm güvenilirlik özelliklerini gözden kaçırır.


9
Aslında, kafka, tek broker ile gittiğinizde bile hala dağıtılmış modda olacak şekilde tasarlandı , ancak çoğaltma faktörü 1 ile - hiçbir kısayol mekanizması veya özel mod olmayacak (ve bu aslında iyi).
om-nom-nom

2
Kafka 0.8.1, zk gerektirir. Ve merak ediyorum, Kafka'da bir koordinasyon sistemiyle çalışacak soyut bir katman yoksa, Kafka'ya başka bir koordinasyon sistemi nasıl etkinleştirilebilir?
stanleyxu2005


64

Başkalarının da açıkladığı gibi Kafka (en son sürümde bile) Zookeeper olmadan çalışmayacaktır.

Kafka, Zookeeper'ı aşağıdakiler için kullanır:

Bir kontrolör seçmek . Denetleyici, aracılardan biridir ve tüm bölümler için lider / takipçi ilişkisini sürdürmekten sorumludur. Bir düğüm kapandığında, diğer kopyalara, uzaklaşan düğümdeki bölüm liderlerini değiştirmelerini bölüm liderleri haline getirmelerini söyleyen denetleyicidir. Zookeeper, bir denetleyici seçmek için kullanılır, yalnızca bir tane olduğundan emin olun ve çökerse yeni bir tane seçin.

Küme üyeliği - hangi aracılar yaşıyor ve kümenin bir parçası? bu aynı zamanda ZooKeeper aracılığıyla da yönetilir.

Konu yapılandırması - hangi konular var, her birinde kaç bölüm var, eşlemeler nerede, tercih edilen lider kim, her konu için hangi yapılandırma geçersiz kılmaları ayarlanıyor

(0.9.0) - Kotalar - her müşterinin ne kadar veri okuyup yazmasına izin verilir?

(0.9.0) - ACL'ler - kimlerin hangi konuyu okuyup yazmasına izin verilir (eski yüksek seviyeli tüketici) - Hangi tüketici grupları var, kimlerin üyeleri ve her grubun her bölümden aldığı en son ofset nedir.

[ https://www.quora.com/What-is-the-actual-role-of-ZooKeeper-in-Kafka/answer/Gwen-Shapira adresinden ]

Senaryonuzla ilgili olarak, yalnızca bir broker örneği ve birden fazla tüketiciye sahip bir üretici, bir kanal oluşturmak için pusher'ı kullanabilir ve olayı, tüketicinin abone olabileceği ve bu olayları aktarabileceği o kanala gönderebilirsiniz. https://pusher.com/


3
"En son sürümü" gerçek sürümle düzenlemek ister misiniz? Tepkinizi daha iyi yaşlandırır.
akauppi


Referansı ekliyorum, son paragraf aslen benden.
Kevin Li

47

Önemli güncelleme - Ağustos 2019:

ZooKeeper bağımlılığı Apache Kafka'dan kaldırılacaktır . KIP-500'deki üst düzey tartışmaya bakın : ZooKeeper'ı Kendi Kendine Yönetilen Meta Veri Çekirdeğiyle Değiştirin .

Bu çabalar birkaç Kafka yayınını ve ek KIP'leri alacaktır. Kafka Denetleyicileri, mevcut ZooKeeper görevlerinin görevlerini üstlenecektir. Denetleyiciler, Kafka'nın temel bir kavramı olan Olay Günlüğünün avantajlarından yararlanacak.

Yeni Kafka mimarisinin bazı avantajları, daha basit bir mimari, işlem kolaylığı ve daha iyi ölçeklenebilirliktir (örneğin, "sınırsız bölümlere" izin verir.


17

Temmuz 2020 tarihinde güncellendi

En son sürüm (2.5.0) için ZooKeeper, Kafka'yı çalıştırmak için hala gereklidir , ancak yakın gelecekte ZooKeeper, Kendi Kendine Yönetilen Meta Veri Çekirdeği ile değiştirilecektir .

Kabul edilen bölümdeki ayrıntıları görün KIP-500'deki .


11

Kafka, Zookeeper'ı kullanmak için tasarlanmıştır. Bundan kaçış yok.

Kafka dağıtılmış bir sistemdir ve kafka küme düğümlerinin durumunu izlemek için Zookeeper'ı kullanır. Ayrıca Kafka konularını, bölümlerini vb. Takip eder.

Sorunuza baktığınızda Kafka'ya ihtiyacınız yok gibi görünüyor. Redis , Rabbit MQ gibi pub- sub'ı destekleyen herhangi bir uygulamayı veya Pub-nub gibi barındırılan çözümleri kullanabilirsiniz .


9

IMHO Zookeeper bir ek yük değildir, ancak hayatınızı çok daha kolaylaştırır.

Temel olarak bir kümedeki farklı düğümler arasındaki koordinasyonu korumak için kullanılır. Kafka için en önemli şeylerden biri, zookeeper'ı periyodik olarak ofsetleri gerçekleştirmek için kullanmasıdır, böylece düğüm arızası durumunda, önceden kaydedilen ofsetten devam edebilir (tüm bunları kendi başınıza halledeceğinizi hayal edin).

Zookeeper ayrıca lider tespiti, konfigürasyon yönetimi, senkronizasyon, yeni bir düğümün ne zaman kümeye katılıp ne zaman kümeden ayrıldığını tespit etme gibi diğer birçok amaca hizmet etmek için hayati bir rol oynar.

Gelecekteki Kafka sürümleri, hayvan bakıcısı bağımlılığını kaldırmayı planlıyor, ancak şu an itibariyle bunun ayrılmaz bir parçası.

İşte SSS sayfalarından alınan birkaç satır:

Zookeeper yeter sayısı düştüğünde, aracılar kötü bir duruma neden olabilir ve normalde istemci isteklerine hizmet edemez, vb. Zookeeper yeter sayısı düzeldiğinde, Kafka brokerları otomatik olarak normal duruma dönebilmelidir, yine de birkaç önemli durum vardır. yapamazlar ve onu normale döndürmek için sert bir öldür ve kurtarma gerekir. Bu nedenle, hayvan bakıcısı kümenizi yakından izlemeniz ve performans göstermesi için tedarik etmeniz önerilir.

Daha fazla ayrıntı için burayı kontrol edin


13
Hayvan bekçisi büyük bir baş ağrısıdır. HBase'de. Kafka'da. Fırtına'da. Kafka / ZK'da, ekibimin onu RabbitMQ lehine terk etmesine neden olan uzun zamandır devam eden hatalar var. HBase kurulumu, ZK sorunlarıyla başa çıkmak için zaman gerektirir. Ancak OP ile ilgili cevabınız doğrudur: ZK gereklidir.
javadba

2
Doğru ve sürüm uyumluluk sorunları var (en azından Kafka ve ZK ile), ancak zookeeper'ın asıl amacı, herhangi bir dağıtılmış sistem için gerekli olan karmaşık görevleri yönetmektir. Zk kümenizi yönetmenin ve ayarlamanın biraz çaba gerektirdiğine ve büyük ölçüde on zk akıllıca bir çağrı olmayabilir. Muhtemelen bu yüzden kafka sonraki sürümlerde zk bağımlılıklarını azaltmaya çalışıyor. Farklı bir kayda göre, RabitMQ ve Kafka'nın çok farklı bir tasarım felsefesine sahip olduğuna ve farklı kullanım durumlarını çözmeyi hedeflediğine inanıyorum, ancak bu tartışmanın kapsamı dışında olduğunu düşünüyorum :)
user2720864

Evet, kafka yüksek yük senaryoları için üstündür. Bu avantajları açıkça talep etmedikçe / olmadıkça RabbitMQ yapmaya karar verdik. RabbitMQ'da programlama da daha kolaydı: Kafka için zor ölçeklendirme sürümü bağımlılıkları vardı.
javadba

4
IMHO zookeeper is not an overhead but makes your life a lot easier.-> bir sysop'un bakış açısından değil. Zk, geri kalmış eski java eziyetinin bir parçasıdır. Örneğin, bir dns girişinin ttl'sine uymaması ve bu nedenle bir girişi yeniden çözümlememesi nedeniyle uzun süredir bekleyen bir hataya sahiptir. Pencerenin dışına sunucu takas olanaklarınız gider. Bunu etcd ile mutlu bir şekilde değiştirirdim.
RickyA

"Bu avantajları açıkça talep etmedikçe / olmadıkça RabbitMQ yapmaya karar verdik". Keşke ekibim böyle aydınlansaydı. IMHO, açıkça Kafka'yı haklı çıkarmak için yeterince yüksek yükümüz yok, ancak yine de Kafka kullanıyoruz :(
Bay Smith

4

Zookeeper, her türlü dağıtılmış sistem için merkezileştirme ve yönetim sistemidir. Dağıtılmış sistem, farklı düğümler / kümeler üzerinde çalışan (coğrafi olarak uzak konumlarda olabilir) ancak tek bir sistem olarak çalışan farklı yazılım modülleridir. Zookeeper, düğümler arasındaki iletişimi kolaylaştırır, yapılandırmaları düğümler arasında paylaşır, hangi düğümün lider olduğunu, hangi düğümün katıldığını / ayrıldığını vb. İzler. Zookeeper, dağıtılmış sistemleri mantıklı tutan ve tutarlılığı koruyan kişidir. Zookeeper temelde bir düzenleme platformudur.

Kafka, dağıtılmış bir sistemdir. Ve bu nedenle, coğrafi olarak uzak (veya olmayan) düğümleri için bir tür düzenlemeye ihtiyacı vardır .


3

Evet, Zookeeper, Kafka için tasarım gereği bir zorunluluktur. Çünkü Zookeeper, bir tür Kafka kümesini yönetme sorumluluğuna sahip. İçinde tüm Kafka brokerlerinin listesi var. Herhangi bir komisyoncu kapanırsa veya bölüm kapanırsa veya yeni komisyoncu yükselirse veya bölüm yükselirse Kafka'yı bilgilendirir. Kısacası ZK, her Kafka aracısını Kafka kümesinin mevcut durumu hakkında güncel tutar.

Daha sonra, her Kafka istemcisinin (üretici / tüketici) tek yapması gereken, herhangi bir aracıya bağlanmaktır ve bu komisyoncu tüm meta verileri Zookeeper tarafından güncellendi, bu nedenle müşterinin komisyoncu keşfi baş ağrısıyla uğraşmasına gerek kalmaz.


3

Her zamanki yük mesajı aktarımının dışında kafka'da gerçekleşen başka birçok iletişim vardır, örneğin

  • Küme üyeliğini talep eden aracılarla ilgili olaylar.
  • Komisyoncularla ilgili etkinlikler kullanıma sunuluyor.
  • Bootstrap yapılandırma ayarlarını alma.
  • Denetleyici ve lider güncellemeleriyle ilgili olaylar.
  • Heartbeat güncellemeleri gibi durum güncellemelerine yardım edin.

Zookeeper, bir topluluktaki birden çok düğümden oluşan dağıtılmış bir sistemdir. Zookeeper, bu tür meta verileri korumak için merkezi bir hizmettir.


1

Bu makale Zookeeper'ın Kafka'daki rolünü açıklıyor. Kafka'nın nasıl vatansız olduğunu ve zookeper'in kafka'nın dağıtılmış doğasında (ve daha birçok dağıtılmış sistemde) nasıl önemli bir rol oynadığını açıklar.


1

Kafka'yı Zookeeper olmadan çalıştırma isteği oldukça yaygın görünüyor. Charlatan kütüphanesi bunu ele alıyor.

Açıklamaya göre Charlatan, Zookeeper için aşağı yukarı bir taklittir ve Zookeeper hizmetlerinin ya başka araçlarla ya da bir veritabanıyla yedeklenmesini sağlar.

Bu kütüphaneyle Charlatan kütüphanesi için yazarların ana ürününü ele alırken karşılaştım; orada iyi çalışıyor ...


0

birinci olarak

Apache ZooKeeper, yapılandırma ve senkronizasyon hizmetlerini yüksek erişilebilir bir şekilde sağlamak için kullanılan dağıtılmış bir depodur . Kafka daha yeni sürümlerinde, çalışma Hayvan Bekçisi içine ne kadar uzak içmişlerdir mesajları (denilen ofsetler) ilgili değil mağaza bilgileri istemci tüketiciler için sırayla yapıldığını .This reduced usage did not get rid of the need for consensus and coordination in distributed systems however.Kafka sağlarken hata toleransını ve esneklik şey sağlamak amacıyla ihtiyaç duyulan koordinasyon gereklidir ve ZooKeeper genel sistemin bu parçasını etkinleştirir.

ikinci olarak

Bir bölümün liderinin kim olduğu konusunda anlaşmak, ZooKeeper'ın Kafka ekosistemindeki pratik uygulamasına bir örnektir.

Zookeeper would work if there was even a single broker. 

Bunlar Kafka In Action kitabından. Görüntü dan bu kurs

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.