2017-01-19 36 views
9

Sự khác biệt cơ bản giữa xử lý luồng và xử lý tin nhắn truyền thống là gì? Như mọi người nói rằng kafka là lựa chọn tốt để xử lý luồng nhưng về cơ bản kafka là một khung nhắn tin tương tự như ActivMQ, RabbitMQ, v.v.Sự khác biệt giữa xử lý luồng và xử lý tin nhắn

Tại sao chúng ta thường không nói rằng ActiveMQ cũng tốt cho xử lý luồng.

Đó có phải là tốc độ các thông điệp được người dùng tiêu thụ xác định xem đó có phải là luồng không?

+0

Tôi nghĩ bạn có thể tìm thấy https://www.quora.com/What-are-the-differences-between-Apache-Kafka-and-RabbitMQ thú vị –

Trả lời

27

Trong xử lý tin nhắn truyền thống, bạn áp dụng tính toán đơn giản trên thư - trong hầu hết các trường hợp riêng lẻ cho mỗi thư.

Trong quá trình xử lý luồng, bạn áp dụng các thao tác phức tạp trên nhiều luồng đầu vào và nhiều bản ghi (ví dụ, thư) cùng một lúc (như tổng hợp và kết nối).

Hơn nữa, hệ thống nhắn tin truyền thống không thể "quay ngược thời gian" - tức là, tự động xóa thư sau khi chúng được gửi tới tất cả người tiêu dùng đã đăng ký. Ngược lại, Kafka giữ các thông điệp vì nó sử dụng một mô hình dựa trên kéo (ví dụ, dữ liệu kéo người tiêu dùng ra khỏi Kafka) trong một khoảng thời gian có thể cấu hình được. Điều này cho phép người tiêu dùng "tua lại" và tiêu thụ tin nhắn nhiều lần - hoặc nếu bạn thêm người tiêu dùng mới, nó có thể đọc toàn bộ lịch sử. Điều này làm cho quá trình xử lý luồng có thể, bởi vì nó cho phép các ứng dụng phức tạp hơn. Hơn nữa, xử lý luồng không nhất thiết phải xử lý theo thời gian thực - đó là về xử lý luồng đầu vào vô hạn (trái ngược với xử lý hàng loạt được áp dụng cho các đầu vào hữu hạn).

Và Kafka cung cấp Kafka Connect và Streams API - vì vậy nó là một nền tảng xử lý luồng và không chỉ là một hệ thống nhắn tin/pub-sub (ngay cả khi nó sử dụng trong lõi của nó).

+1

Ngoài ra, luồng đầu vào có thể là vô hạn, nhưng quá trình xử lý giống như cửa sổ trượt của đầu vào hữu hạn. Theo nghĩa đó, không có sự khác biệt nào giữa quá trình xử lý luồng và xử lý theo lô. Xử lý hàng loạt chỉ là trường hợp xử lý luồng đặc biệt, nơi các cửa sổ được xác định rõ ràng. – Davos

5

Về cơ bản Kafka là khung nhắn tin tương tự như ActiveMQ hoặc RabbitMQ. Có một số nỗ lực để đưa Kafka về phía luồng được tạo bởi Confluent.

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

Vậy tại sao Kafka đi vào hình ảnh khi nói về chế biến Luồng?

Khung xử lý luồng khác với dữ liệu đầu vào. Trong xử lý hàng loạt, bạn có một số tệp được lưu trữ trong hệ thống tệp và bạn muốn tiếp tục xử lý và lưu trữ trong một số cơ sở dữ liệu. Trong khi trong các khung xử lý luồng như Spark, Storm, vv sẽ nhận được đầu vào liên tục từ một số thiết bị cảm biến, nguồn cấp dữ liệu api và kafka được sử dụng ở đó để cấp nguồn cho công cụ phát trực tuyến.

+5

Apache Kafka tự mô tả mình là "nền tảng phát trực tuyến được phân phối", xem https://kafka.apache.org/. Vào năm 2012, nó bắt đầu, gần như là một hệ thống nhắn tin, nhưng ngày nay nó còn hơn thế nữa. Kafka đặc biệt được trang bị động cơ xử lý dòng của riêng mình, được gọi là API của Kafka (hoặc Kafka Streams). Bạn không còn cần phải sử dụng công nghệ xử lý luồng riêng biệt như Storm hay Spark và một số người dùng cũ của Spark/Storm/... đã bắt đầu chuyển sang API luồng của Kafka để đơn giản hóa và cải thiện kiến ​​trúc dữ liệu của họ. –

Các vấn đề liên quan