Apache Kafka กับ Apache Storm


102

Apache Kafka: ระบบส่งข้อความแบบกระจาย
Apache Storm: การประมวลผลข้อความตามเวลาจริง

เราจะใช้เทคโนโลยีทั้งสองในท่อส่งข้อมูลแบบเรียลไทม์เพื่อประมวลผลข้อมูลเหตุการณ์ได้อย่างไร

ในแง่ของไปป์ไลน์ข้อมูลแบบเรียลไทม์ดูเหมือนว่าฉันจะทำงานเหมือนกัน เราจะใช้เทคโนโลยีทั้งสองบนท่อส่งข้อมูลได้อย่างไร?

คำตอบ:


158

คุณใช้ Apache Kafka เป็นคิวแบบกระจายและมีประสิทธิภาพซึ่งสามารถจัดการข้อมูลปริมาณมากและช่วยให้คุณสามารถส่งผ่านข้อความจากปลายทางหนึ่งไปยังอีกจุดหนึ่งได้

สตอร์มไม่ใช่คิว เป็นระบบที่กระจายความสามารถในการประมวลผลแบบเรียลไทม์ซึ่งหมายความว่าคุณสามารถดำเนินการปรับแต่งทุกรูปแบบกับข้อมูลเรียลไทม์ควบคู่กันได้

ขั้นตอนทั่วไปของเครื่องมือเหล่านี้ (อย่างที่ฉันรู้) มีดังนี้:

ระบบเรียลไทม์ -> Kafka -> Storm -> NoSql -> BI (ไม่บังคับ)

ดังนั้นคุณจึงมีแอปเรียลไทม์ที่จัดการข้อมูลปริมาณมากส่งไปยังคิวคาฟคา Storm ดึงข้อมูลจากคาฟคาและใช้การจัดการที่จำเป็นบางอย่าง ณ จุดนี้คุณมักต้องการได้รับประโยชน์บางอย่างจากข้อมูลนี้ดังนั้นคุณจึงส่งไปยังฐานข้อมูล Nosql บางส่วนเพื่อการคำนวณ BI เพิ่มเติมหรือคุณสามารถค้นหา NoSql นี้จากระบบอื่นก็ได้


ขอบคุณ Forhas สิ่งนี้มีประโยชน์มาก คำถามหนึ่งที่เราสามารถใช้ Apache Kafka เพื่อรวมไฟล์บันทึก Apache ได้หรือเรายังต้องการ Flume เพื่อทำสิ่งนั้น
Ananth Duari

ฉันเดาว่าคุณทำได้แม้ว่าฉันจะไม่คุ้นเคยกับกระแสดังกล่าว บางทีคุณสามารถตรวจสอบ Splunk สำหรับความต้องการของคุณได้ (แค่เดา ​​.. )
forhas

ฉันแนะนำให้ใช้ GrayLog และเชื่อมต่อกับ apache kafka GrayLog มีปลั๊กอินอินพุต kakfa อยู่แล้ว
saeid rastak

36

Kafka และ Storm มีจุดประสงค์ที่แตกต่างกันเล็กน้อย:

Kafkaเป็นโบรกเกอร์ข้อความแบบกระจายซึ่งสามารถรองรับข้อความจำนวนมากต่อวินาที ใช้กระบวนทัศน์การเผยแพร่ - สมัครสมาชิกและอาศัยหัวข้อและพาร์ติชัน คาฟคาใช้ Zookeeper เพื่อแบ่งปันและบันทึกสถานะระหว่างโบรกเกอร์ ดังนั้น Kafka จึงมีหน้าที่ในการถ่ายโอนข้อความจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง

Stormเป็นระบบวิเคราะห์แบบเรียลไทม์ที่ปรับขนาดได้และทนต่อความผิดพลาด (คิดเหมือน Hadoop แบบเรียลไทม์) ใช้ข้อมูลจากแหล่ง (Spouts) และส่งต่อไปยังท่อ (Bolts) คุณสามารถรวมไว้ในโทโพโลยี ดังนั้น Storm จึงเป็นหน่วยคำนวณ (การรวมการเรียนรู้ของเครื่อง)


แต่คุณสามารถใช้ร่วมกันได้: ตัวอย่างเช่นแอปพลิเคชันของคุณใช้ kafka เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์อื่นซึ่งใช้ storm ในการคำนวณบางอย่าง


32

ฉันรู้ว่านี่เป็นเธรดที่เก่ากว่าและการเปรียบเทียบของ Apache Kafka และ Storm นั้นถูกต้องและถูกต้องเมื่อเขียนขึ้น แต่เป็นที่น่าสังเกตว่า Apache Kafka มีการพัฒนาไปมากในช่วงหลายปีที่ผ่านมาและตั้งแต่เวอร์ชัน 0.10 (เมษายน 2016) Kafka รวมอยู่ด้วย Kafka Streams API ซึ่งให้ความสามารถในการประมวลผลสตรีมโดยไม่ต้องใช้ซอฟต์แวร์เพิ่มเติมใด ๆ เช่น Storm Kafka ยังมี Connect API สำหรับเชื่อมต่อกับแหล่งข้อมูลต่างๆและซิงก์ (ปลายทาง) ของข้อมูล

บล็อกประกาศ - https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

เอกสาร Apache ปัจจุบัน - https://kafka.apache.org/documentation/streams/

ใน 0.11 Kafka ฟังก์ชันการประมวลผลสตรีมได้รับการขยายเพิ่มเติมเพื่อให้มีความหมายและธุรกรรมที่แน่นอนทันที

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


1
โดยพื้นฐานแล้วตอนนี้ระบบเรียลไทม์สื่อสารโดยตรงกับ Kafkaas จุดสิ้นสุดและร้านค้า Kafka เช่นไปยัง DB?
problemofficer

2
ใช่ตอนนี้ Kafka มี Kafka Connect เพื่อพูดคุยกับฐานข้อมูลและแหล่งข้อมูลอื่น ๆ (syslog, JMS, ไฟล์บันทึก ฯลฯ ) และ Kafka Streams เพื่อทำการประมวลผลสตรีม (การรวมการแปลงตัวกรองการรวม) และกลับไปที่ Kafka Connect เพื่อเขียน ออกไปยังฐานข้อมูลหรือที่เก็บอื่น
Hans Jespersen

15

นี่คือวิธีการทำงาน

Kafka - เพื่อให้สตรีมแบบเรียลไทม์

Storm - เพื่อดำเนินการบางอย่างกับสตรีมนั้น

คุณอาจจะดูที่โครงการ GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js

(D3js เป็นไลบรารีการแสดงกราฟ)

กรณีที่เหมาะ:

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

ที่เก็บนี้ขึ้นอยู่กับ:

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

1
Abhishek ลิงก์ที่กล่าวถึงในคำตอบข้างต้นเสีย รบกวนอัพเดทลิงค์หน่อยได้ไหม
Abhijit Gaikwad

4

ตามที่ทุกคนอธิบายคุณว่า Apache Kafka: เป็นคิวการส่งข้อความต่อเนื่อง

Apache Storm: เป็นเครื่องมือประมวลผลแบบต่อเนื่อง

ในแง่นี้ Kafka จะได้รับข้อมูลจากเว็บไซต์ใด ๆ เช่น FB, Twitter โดยใช้ API และข้อมูลนั้นจะถูกประมวลผลโดยใช้ Apache Storm และคุณสามารถจัดเก็บข้อมูลที่ประมวลผลในฐานข้อมูลใดก็ได้ที่คุณต้องการ

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

เพียงทำตามคุณจะได้รับความคิดบางอย่าง


3

เมื่อฉันมีกรณีการใช้งานที่ต้องการให้ฉันเห็นภาพหรือแจ้งเตือนเกี่ยวกับรูปแบบ (นึกถึงแนวโน้มของทวิตเตอร์) ในขณะที่ดำเนินการต่อเหตุการณ์ฉันมีหลายรูปแบบ
NiFi ช่วยให้ฉันสามารถประมวลผลเหตุการณ์และอัปเดตที่เก็บข้อมูลแบบถาวรด้วยการรวมกลุ่มที่ต่ำ (er) โดยมีการเข้ารหัสแบบกำหนดเองน้อยมาก
Storm (การเข้ารหัสแบบกำหนดเองจำนวนมาก) ช่วยให้ฉันเข้าถึงเหตุการณ์ที่กำลังมาแรงได้เกือบเรียลไทม์
ถ้าฉันสามารถรอได้หลายวินาทีฉันก็สามารถจัดชุดคาฟคาเป็น hdfs (ปาร์เก้) และดำเนินการได้
ถ้าฉันต้องการรู้ในไม่กี่วินาทีฉันต้องการ NiFi และอาจเป็น Storm (ลองนึกถึงการตรวจสอบสถานีภาคพื้นดินหลายพันแห่งที่ฉันต้องดูสภาพอากาศในพื้นที่เล็ก ๆ เพื่อเตือนพายุทอร์นาโด)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.