Kafka: Tüketici API ve Akışlar API'si


100

Geçenlerde Kafka'yı öğrenmeye başladım ve bu sorularla bitirdim.

  1. Tüketici ve Akış arasındaki fark nedir? Bana göre herhangi bir araç / uygulama Kafka'dan mesaj tüketirse Kafka dünyasında bir tüketicidir.

  2. Akış, Kafka'dan mesajlar tükettiği ya da ürettiği için ne kadar farklı? Tüketici API kullanarak kendi tüketici uygulamamızı yazıp gerektiği gibi işleyebildiğimiz veya tüketici uygulamasından Spark'a gönderebildiğimiz için neden buna ihtiyaç var?

Bunun üzerine Google'ı yaptım, ancak bunun için iyi bir cevap alamadım. Bu soru çok önemsizse özür dilerim.

Yanıtlar:


104

09 Nisan 2018 Güncellemesi : Günümüzde verilerinizi Kafka'da işlemek için Kafka'nın olay akışı veritabanı olan ksqlDB'yi de kullanabilirsiniz . ksqlDB, Kafka'nın Streams API'sinin üzerine inşa edilmiştir ve "akışlar" ve "tablolar" için birinci sınıf destekle birlikte gelir.

Tüketici API'si ile Akışlar API'si arasındaki fark nedir?

Kafka's Streams API ( https://kafka.apache.org/documentation/streams/ ), Kafka'nın üretici ve tüketici müşterilerinin üzerine inşa edilmiştir. Kafka tüketici istemcisinden önemli ölçüde daha güçlü ve aynı zamanda daha etkileyici. Kafka Streams API'nin bazı özellikleri şunlardır:

  • Tam olarak bir kez işleme anlamını destekler (Kafka sürümleri 0.11+)
  • Akış birleştirmeleri , toplamalar ve pencereleme dahil olmak üzere hataya dayanıklı durum bilgisi olan (ve tabii ki durum bilgisi olmayan) işlemeyi destekler . Başka bir deyişle, uygulamanızın kullanıma hazır işlem durumunun yönetimini destekler.
  • Destekler olay zamanlı işlem yanı sıra dayalı işlenirken işleme zamanında ve yenmesi zamanlı
  • Akış işlemenin veritabanları ile buluştuğu yerde hem akışlar hem de tablolar için birinci sınıf desteğe sahiptir; pratikte, çoğu akış işleme uygulaması, ilgili kullanım durumlarını uygulamak için hem akışa hem de tabloya ihtiyaç duyar, bu nedenle bir akış işleme teknolojisi iki soyutlamadan herhangi birine sahip değilse (örneğin, tablolar için destek yoksa) ya sıkışmışsınızdır ya da bu işlevi kendiniz elle uygulamalısınız (bunda iyi şanslar ...)
  • En son işlem sonuçlarını diğer uygulamalara ve hizmetlere göstermek için etkileşimli sorguları ('sorgulanabilir durum' olarak da adlandırılır) destekler
  • Daha etkileyici mi: ile bu gemi (1) bir fonksiyonel programlama tarzı DSL gibi operasyonlarla map, filter, reducehem de (2) bir zorunluluk tarzı İşlemci API örneğin karmaşık olay işleme (CEP) yapmak için ve (3) hatta birleştirebilirsiniz DSL ve İşlemci API'si.

Bkz http://docs.confluent.io/current/streams/introduction.html için daha ayrıntılı ama aynı zamanda alt düzey Kafka tüketiciye farklılıkları anlamak için yardımcı olmalıdır Kafka Akım Arayüzü, hala ileri düzeyde giriş müşteri. Bir de var Kafka Akışları API için Docker tabanlı öğretici , ben blogged hakkında bu hafta başlarında.

Öyleyse, Kafka Streams API'si, Kafka'dan mesajlar tükettiğinden veya Kafka'ya mesaj ürettiğinden nasıl farklıdır?

Evet, Kafka Streams API hem verileri okuyabilir hem de Kafka'ya veri yazabilir.

Tüketici API kullanarak kendi tüketici uygulamamızı yazıp gerektiği gibi işleyebildiğimiz veya tüketici uygulamasından Spark'a gönderebildiğimiz için neden buna ihtiyaç var?

Evet, kendi tüketici uygulamanızı yazabilirsiniz - bahsettiğim gibi, Kafka Streams API, Kafka tüketici istemcisini (artı üretici istemciyi) kullanır - ancak Streams API'nin sağladığı tüm benzersiz özellikleri manuel olarak uygulamanız gerekir. . "Ücretsiz" olarak aldığınız her şey için yukarıdaki listeye bakın. Bu nedenle, bir kullanıcının daha güçlü Kafka Streams API'sinden ziyade düşük seviyeli tüketici istemcisini seçmesi oldukça nadir görülen bir durumdur.


8
Bir uygulama hangi durumda Kafka Streams API üzerinden Kafka Consumer API'yi kullanır?
bhh1988

4
Öncelikle, Kafka Tüketici API'sinin alt düzey yöntemlerine doğrudan erişmeniz gereken durumlarda. Artık Kafka Streams mevcut olduğuna göre, bu genellikle oldukça özel, özel uygulamalar ve kullanım durumları için yapılır. İşte bir benzetme: Kafka Streams'in bir araba olduğunu hayal edin - çoğu insan sadece onu kullanmak ister ama araba tamircisi olmak istemez. Ancak bazı insanlar, herhangi bir nedenle otomobilin motorunu açıp ayarlamak isteyebilir, bu da doğrudan Tüketici API'sini kullanmak isteyebileceğiniz zamandır. (Bununla birlikte Kafka Streams, özel ihtiyaçlar için İşlemci API'sına da sahiptir.)
Michael G. Noll

1
Sanırım onları farklı kılan en önemli şey mağazaya erişme yeteneği. Bir akış içinde mağaza kullanmanın gücünü anladıktan sonra, kafka akışlarının gücünü anlayacaksınız.
Yonatan Kiron

23

ETL tipi mesaj dönüşümünü desteklemek için oluşturulmuş Kafka Stream bileşeni. Konudan giriş akışı, dönüştürme ve diğer konulara çıkış anlamına gelir. Gerçek zamanlı işlemeyi destekler ve aynı zamanda toplama, pencereleme, birleştirme vb. Gibi gelişmiş analitik özellikleri destekler.

"Kafka Streams, veri paralelliği, dağıtılmış koordinasyon, hata toleransı ve operasyonel basitlik sunmak için Kafka üretici ve tüketici kitaplıklarını temel alarak ve Kafka'nın yerel yeteneklerinden yararlanarak uygulama geliştirmeyi basitleştirir."

Kafka Çayı'nın temel mimari özellikleri aşağıdadır. Lütfen buraya bakın

  1. Akış Bölümleri ve Görevleri : Kafka Streams, Kafka konu bölümlerini temel alan paralellik modelinin mantıksal birimleri olarak bölümler ve görevler kavramlarını kullanır.
  2. İş Parçacığı Modeli: Kafka Akışları, kullanıcının bir uygulama örneğinde işlemeyi paralelleştirmek için kitaplığın kullanabileceği iş parçacığı sayısını yapılandırmasına olanak tanır.
  3. Yerel Durum Depoları : Kafka Akışları, veri depolamak ve sorgulamak için akış işleme uygulamaları tarafından kullanılabilen sözde durum depoları sağlar; bu durum, durum bilgisi olan işlemleri uygularken önemli bir özelliktir.
  4. Hata Toleransı: Kafka Akışları, Kafka içinde yerel olarak entegre edilen hata toleransı yeteneklerini temel alır. Kafka bölümleri yüksek oranda kullanılabilir ve çoğaltılmıştır, bu nedenle akış verileri Kafka'ya kalıcı olduğunda, uygulama başarısız olsa ve yeniden işlemesi gerekse bile kullanılabilir.

Anladığım kadarıyla, eksik veya yanıltıcı bir nokta varsa güncellemeye açık olduğum temel farklılıklar aşağıda belirtilmiştir

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin

Tüketici nerede kullanılır - Üretici:

  1. Tek tüketiciler varsa, mesaj sürecini tüketin ancak diğer konulara aktarmayın.
  2. Birinci nokta olarak, eğer sadece mesaj üreten bir yapımcıysa Kafka Stream'e ihtiyacımız yok.
  3. Bir Kafka kümesinden tüketici mesajı varsa ancak farklı Kafka küme konularına yayınlayın. Bu durumda Kafka Stream'i bile kullanabilirsiniz, ancak farklı kümelere mesaj yayınlamak için ayrı bir Yapımcı kullanmanız gerekir. Veya sadece Kafka Tüketici - Üretici mekanizmasını kullanın.
  4. Toplu işleme - bir mesaj toplama veya bir tür toplu işlem yapma gerekliliği varsa, normal bir geleneksel yöntem kullanmak için.

Kafka Akışı nerede kullanılır:

  1. Bir konudaki mesajları kullanırsanız, diğer konulara dönüştürün ve yayınlayın Kafka Stream en uygunudur.
  2. Gerçek zamanlı işleme, gerçek zamanlı analitik ve Makine öğrenimi.
  3. Toplama, birleştirme penceresi vb. Gibi durum bilgili dönüşüm.
  4. Yerel eyalet mağazalarını veya Portworx vb. Gibi monte edilmiş durum mağazalarını kullanmayı planlama
  5. Tam olarak bir işlem anlamsal ve otomatik tanımlı hata toleransı elde edin.

1
Harika, gerçekten yararlı, ancak büyük bir hata var: Hem Tüketici hem de Akış API'sinde tam anlamıyla bir kez kullanılabilir, dahası EOS, tüketici / üretici için daha düşük düzeyde bir dizi ayardır, öyle ki bu ayarlar grubu kendi özel değerleriyle birlikte EOS davranışını garanti eder. Şu anda EOS'u Tüketici API'si ile sorunsuz kullanıyorum.
2019

Evet doğru, Kafka Stream'de özelliği ayarlayarak tam olarak bir kez anlamsal tanımlayabiliriz, ancak basit üretici ve tüketici için bir birim işlem olarak desteklemek için idempotent ve işlemi tanımlamamız gerekir
sun007

öneriye göre ifadelerde değişiklik yaptı
paz007

@ sun007, gerçek zamanlı yeteneklere ihtiyaç duymayan basit uygulamalar için hangisi daha hızlıdır? ve ayrıca, akış kullanmak, kafka yerel işlevselliğinin yanı sıra diğer yüksek seviyeli araçlar gibi "fazladan" dönüşüm yükü ekler mi?
Nag
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.