Apache Kafka ve Apache Storm


102

Apache Kafka: Dağıtılmış mesajlaşma sistemi
Apache Storm: Gerçek Zamanlı Mesaj İşleme

Olay verilerini işlemek için gerçek zamanlı bir veri hattında her iki teknolojiyi nasıl kullanabiliriz?

Gerçek zamanlı veri hattı açısından her ikisi de bana aynı işi yapıyor gibi görünüyor. Bir veri hattında her iki teknolojiyi nasıl kullanabiliriz?

Yanıtlar:


158

Apache Kafka'yı, yüksek hacimli verileri işleyebilen ve mesajları bir uç noktadan diğerine geçirmenizi sağlayan, dağıtılmış ve sağlam bir kuyruk olarak kullanırsınız.

Fırtına bir kuyruk değil. Gerçek zamanlı işleme yeteneklerini dağıtan bir sistemdir, yani gerçek zamanlı veriler üzerinde her türlü manipülasyonu paralel olarak yürütebilirsiniz.

Bu araçların ortak akışı (bildiğim kadarıyla) aşağıdaki gibidir:

gerçek zamanlı sistem -> Kafka -> Storm -> NoSql -> BI (isteğe bağlı)

Böylece yüksek hacimli verileri işleyen gerçek zamanlı uygulamanız, bunları Kafka kuyruğuna gönderir. Storm, verileri kafka'dan alır ve gerekli bazı işlemleri uygular. Bu noktada, genellikle bu verilerden bazı faydalar elde etmeyi seversiniz, bu nedenle onu ek BI hesaplamaları için bazı Nosql db'ye gönderirsiniz veya bu NoSql'yi başka herhangi bir sistemden kolayca sorgulayabilirsiniz.


Teşekkürler Forhas. Bu çok yardımcı. Apache günlük dosyalarını toplamak için Apache Kafka'yı kullanabilir miyiz yoksa bunu yapmak için hala Flume'a ihtiyacımız var mı?
Ananth Duari

Sanırım böyle bir akışa aşina olmasam da yapabilirsin. Belki ihtiyaçlarınız için Splunk'ı kontrol edebilirsiniz (sadece bir tahmin ..).
forhas

GrayLog'u kullanmanızı ve apache kafka'ya bağlamanızı öneririm. GrayLog'un zaten bir kakfa giriş eklentisi var.
saeid rastak

36

Kafka ve Storm'un biraz farklı bir amacı var:

Kafka , saniyede büyük miktarda mesajı işleyebilen dağıtılmış bir mesaj aracısıdır. Yayınlama-abone olma paradigmasını kullanır ve konulara ve bölümlere dayanır. Kafka, durumu aracılar arasında paylaşmak ve kaydetmek için Zookeeper'ı kullanıyor. Yani Kafka, mesajların bir makineden diğerine aktarılmasından temelde sorumludur.

Storm ölçeklenebilir, hataya dayanıklı, gerçek zamanlı bir analitik sistemdir (gerçek zamanlı olarak Hadoop gibi düşünün). Kaynaklardan (Spouts) gelen verileri tüketir ve bunları boru hattına (Cıvatalar) iletir. Bunları topolojide birleştirebilirsiniz. Yani Storm temelde bir hesaplama birimidir (toplama, makine öğrenimi).


Ancak bunları birlikte kullanabilirsiniz: örneğin, uygulamanız üzerinde biraz hesaplama yapmak için fırtına kullanan diğer sunuculara veri göndermek için kafka'yı kullanır.


32

Bunun daha eski bir konu olduğunu ve Apache Kafka ile Storm karşılaştırmalarının yazıldıklarında geçerli ve doğru olduğunu biliyorum, ancak Apache Kafka'nın yıllar içinde çok geliştiğini ve 0.10 (Nisan 2016) sürümünden bu yana Kafka'nın Storm gibi herhangi bir ek yazılıma ihtiyaç duymadan akış işleme yetenekleri sağlayan bir Kafka Streams API. Kafka ayrıca çeşitli veri kaynaklarına ve havuzlarına (hedeflerine) bağlanmak için Connect API'yi içerir.

Duyuru blogu - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

Güncel Apache belgeleri - https://kafka.apache.org/documentation/streams/

0.11 Kafka'da akış işleme işlevi, Tam Bir Kez Anlambilim ve İşlemler sağlamak için daha da genişletildi.

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/


1
Yani temelde şimdi gerçek zamanlı bir sistem, son nokta olan Kafkaas ile doğrudan iletişim kuruyor ve Kafka, örneğin bir DB'ye depoluyor mu?
problemofficer

2
Evet, şimdi Kafka, veritabanları ve diğer veri kaynakları (syslog, JMS, günlük dosyaları, vb.) İle konuşmak için Kafka Connect'i ve akış işlemeyi (birleştirmeler, Dönüşümler, filtreler, toplamalar) yapmak ve yazmak için Kafka Connect'e geri dönmek için Kafka Akışlarını içeriyor başka bir veritabanına veya depoya aktarın.
Hans Jespersen

15

Bu nasıl çalışır

Kafka - Gerçek zamanlı bir akış sağlamak için

Fırtına - O akışta bazı işlemler gerçekleştirmek için

GitHub projesine bir göz atabilirsiniz https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js bir grafik temsil kitaplığıdır)

İdeal durum:

Realtime application -> Kafka -> Storm -> NoSQL -> d3js

Bu havuz şunlara dayanmaktadır:

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

1
Abhishek, yukarıdaki cevapta belirtilen bağlantı koptu. Lütfen bağlantıyı günceller misin?
Abhijit Gaikwad

4

Her birinin size açıkladığı gibi, Apache Kafka: sürekli mesajlaşma kuyruğudur

Apache Storm: sürekli işleme aracıdır

Burada bu bağlamda Kafka, API'leri kullanarak FB, Twitter gibi herhangi bir web sitesinden verileri alacak ve bu veriler Apache Storm kullanılarak işlenecek ve işlenen verileri istediğiniz herhangi bir veritabanında saklayabileceksiniz.

https://github.com/miguno/kafka-storm-starter

Sadece takip et, bir fikir alacaksın


3

Olayları işlemeye devam ederken kalıpları görselleştirmemi veya uyarmamı gerektiren bir kullanım örneğim olduğunda (twitter trendlerini düşünün), birkaç modelim var.
NiFi, bir olayı işlememe ve kalıcı bir veri deposunu çok, çok az özel kodlama ile düşük (daha) toplu birleştirme ile güncellememe izin veriyordu.
Storm (çok sayıda özel kodlama), trend olaylara neredeyse gerçek zamanlı erişim sağlıyor.
Birkaç saniye bekleyebilirsem, kafka'dan hdfs'ye (Parquet) ve işleme koyabilirim.
Saniyeler içinde bilmem gerekirse, NiFi'ye ve hatta muhtemelen Storm'a ihtiyacım var. (Kasırga uyarıları için küçük bölge hava koşullarını görmem gereken binlerce yer istasyonunu izlemeyi düşünün).


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.