Apache Kafka vs Apache Storm


102

Apache Kafka: Hệ thống nhắn tin phân tán
Apache Storm: Xử lý tin nhắn theo thời gian thực

Làm thế nào chúng ta có thể sử dụng cả hai công nghệ trong một đường ống dữ liệu thời gian thực để xử lý dữ liệu sự kiện?

Về đường ống dẫn dữ liệu thời gian thực, cả hai dường như đối với tôi đều làm công việc giống hệt nhau. Làm thế nào chúng ta có thể sử dụng cả hai công nghệ trên một đường ống dữ liệu?

Câu trả lời:


158

Bạn sử dụng Apache Kafka như một hàng đợi phân tán và mạnh mẽ có thể xử lý dữ liệu khối lượng lớn và cho phép bạn chuyển thư từ điểm cuối này sang điểm cuối khác.

Storm không phải là một hàng đợi. Nó là một hệ thống có khả năng xử lý thời gian thực phân phối, có nghĩa là bạn có thể thực hiện song song tất cả các loại thao tác trên dữ liệu thời gian thực.

Luồng chung của các công cụ này (như tôi biết) diễn ra như sau:

hệ thống thời gian thực -> Kafka -> Storm -> NoSql -> BI (tùy chọn)

Vì vậy, bạn có ứng dụng thời gian thực của mình xử lý dữ liệu khối lượng lớn, gửi nó đến hàng đợi Kafka. Storm lấy dữ liệu từ kafka và áp dụng một số thao tác bắt buộc. Tại thời điểm này, bạn thường muốn nhận được một số lợi ích từ dữ liệu này, vì vậy bạn có thể gửi nó đến một số db Nosql để tính toán BI bổ sung hoặc bạn có thể chỉ cần truy vấn NoSql này từ bất kỳ hệ thống nào khác.


Cảm ơn Forhas. Điều này rất hữu ích. Một câu hỏi đặt ra là chúng ta có thể sử dụng Apache Kafka để tổng hợp các tệp nhật ký Apache hay chúng ta vẫn cần Flume để làm điều đó?
Ananth Duari

Tôi đoán bạn có thể mặc dù tôi không quen thuộc với dòng chảy như vậy. Có lẽ bạn có thể kiểm tra Splunk cho nhu cầu của bạn (chỉ là một phỏng đoán ..).
forhas

Tôi khuyên bạn nên sử dụng GrayLog và kết nối nó với apache kafka. GrayLog đã có một plugin đầu vào kakfa.
saeid rastak

36

Kafka và Storm có một mục đích hơi khác nhau:

Kafka là một nhà môi giới tin nhắn phân tán có thể xử lý một lượng lớn tin nhắn mỗi giây. Nó sử dụng mô hình đăng ký xuất bản và dựa trên các chủ đề và phân vùng. Kafka sử dụng Zookeeper để chia sẻ và lưu trạng thái giữa các nhà môi giới. Vì vậy về cơ bản Kafka chịu trách nhiệm chuyển tin nhắn từ máy này sang máy khác.

Storm là một hệ thống phân tích thời gian thực có thể mở rộng, chịu được lỗi (giống như Hadoop trong thời gian thực). Nó tiêu thụ dữ liệu từ các nguồn (Vòi) và chuyển nó đến đường ống (Bu lông). Bạn có thể kết hợp chúng trong cấu trúc liên kết. Vì vậy, về cơ bản Storm là một đơn vị tính toán (tập hợp, học máy).


Nhưng bạn có thể sử dụng chúng cùng nhau: ví dụ: ứng dụng của bạn sử dụng kafka để gửi dữ liệu đến các máy chủ khác sử dụng Storm để thực hiện một số tính toán trên đó.


32

Tôi biết rằng đây là một chủ đề cũ hơn và các so sánh giữa Apache Kafka và Storm là hợp lệ và chính xác khi chúng được viết nhưng điều đáng chú ý là Apache Kafka đã phát triển rất nhiều trong những năm qua và kể từ phiên bản 0.10 (tháng 4 năm 2016) Kafka đã bao gồm API Kafka Streams cung cấp khả năng xử lý luồng mà không cần bất kỳ phần mềm bổ sung nào như Storm. Kafka cũng bao gồm API Connect để kết nối vào các nguồn và phần chìm (đích) dữ liệu khác nhau.

Blog thông báo - https://www.confluent.io/blog/introductioning-kafka-streams-stream-processing-made-simple/

Tài liệu Apache hiện tại - https://kafka.apache.org/documentation/streams/

Trong 0.11 Kafka, chức năng xử lý luồng được mở rộng hơn nữa để cung cấp Ngữ nghĩa và Giao dịch Chính xác Một lần.

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


1
Vì vậy, về cơ bản bây giờ một hệ thống thời gian thực giao tiếp trực tiếp với Kafkaas điểm cuối và Kafka lưu trữ ví dụ với một DB?
problemmofficer

2
Có bây giờ Kafka bao gồm Kafka Connect để nói chuyện với cơ sở dữ liệu và các nguồn dữ liệu khác (nhật ký hệ thống, JMS, tệp nhật ký, v.v.) và Kafka Streams để thực hiện xử lý luồng (tham gia, Biến đổi, bộ lọc, tổng hợp) và quay lại Kafka Connect để ghi ra cơ sở dữ liệu hoặc kho lưu trữ khác.
Hans Jespersen

15

Đây là cách nó hoạt động

Kafka - Cung cấp luồng theo thời gian thực

Storm - Để thực hiện một số thao tác trên luồng đó

Bạn có thể xem qua dự án GitHub https://github.com/abhishekgoel137/kafka-nodejs-d3js .

(D3js là một thư viện biểu diễn đồ thị)

Trường hợp lý tưởng:

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

Kho lưu trữ này dựa trên:

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

1
Abhishek, liên kết được đề cập trong câu trả lời ở trên đã bị hỏng. Bạn có thể vui lòng cập nhật liên kết được không?
Abhijit Gaikwad

4

Như mọi người giải thích cho bạn rằng Apache Kafka: là hàng đợi nhắn tin liên tục

Apache Storm: là công cụ xử lý liên tục

ở đây về khía cạnh này Kafka sẽ lấy dữ liệu từ bất kỳ trang web nào như FB, Twitter bằng cách sử dụng API và dữ liệu đó được xử lý bằng cách sử dụng Apache Storm và bạn có thể lưu trữ dữ liệu đã xử lý trong bất kỳ cơ sở dữ liệu nào bạn muốn.

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

Chỉ cần làm theo nó bạn sẽ có một số ý tưởng


3

Khi tôi có một trường hợp sử dụng yêu cầu tôi hình dung hoặc cảnh báo về các mẫu (hãy nghĩ đến các xu hướng trên twitter), trong khi tiếp tục xử lý các sự kiện, tôi có một số mẫu.
NiFi sẽ cho phép tôi xử lý một sự kiện và cập nhật kho dữ liệu liên tục với tính năng tổng hợp hàng loạt (sai) thấp với rất, rất ít mã hóa tùy chỉnh.
Storm (nhiều mã tùy chỉnh) cho phép tôi truy cập gần như thời gian thực vào các sự kiện thịnh hành.
Nếu tôi có thể đợi trong nhiều giây, thì tôi có thể xuất hàng loạt từ kafka, vào hdfs (Parquet) và xử lý.
Nếu tôi cần biết trong vài giây, tôi cần NiFi, và có thể là cả Storm. (Hãy nghĩ đến việc theo dõi hàng nghìn trạm trên mặt đất, nơi tôi cần xem điều kiện thời tiết khu vực nhỏ để biết cảnh báo lốc xoáy).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.