Theo trang web Kafka :
" Kakfa được sử dụng để xây dựng các đường ống dữ liệu thời gian thực và các ứng dụng phát trực tuyến. "
Tìm kiếm trên internet rất xa, tôi đã tìm thấy định nghĩa được chấp nhận chung sau đây về " dữ liệu truyền phát " là gì:
- Luồng dữ liệu là dữ liệu chảy liên tục từ nguồn đến đích qua mạng; và
- Luồng dữ liệu về bản chất không phải là nguyên tử, có nghĩa là bất kỳ phần nào của luồng dữ liệu đang chảy đều có ý nghĩa và có thể xử lý, trái ngược với tệp có byte không có nghĩa gì trừ khi bạn có tất cả chúng; và
- Dữ liệu truyền phát có thể được bắt đầu / dừng bất cứ lúc nào; và
- Người tiêu dùng có thể đính kèm và tách ra khỏi luồng dữ liệu theo ý muốn và chỉ xử lý các phần của dữ liệu mà họ muốn
Bây giờ, nếu bất cứ điều gì tôi nói ở trên là không chính xác, không đầy đủ hoặc hoàn toàn sai, hãy bắt đầu bằng cách sửa lỗi cho tôi! Giả sử tôi ít nhiều đi đúng hướng, thì ...
Bây giờ tôi đã hiểu "truyền dữ liệu" là gì, sau đó tôi hiểu Kafka và Kinesis có nghĩa là gì khi họ tự lập hóa đơn là phần mềm trung gian xử lý / môi giới cho các ứng dụng có dữ liệu truyền phát. Nhưng nó đã khơi gợi những sở thích của tôi: có thể / nên "truyền phát phần mềm trung gian" như Kafka hay Kinesis cho dữ liệu không phát trực tuyến, như các nhà môi giới tin nhắn truyền thống không? Và ngược lại: các MQ truyền thống như RabbitMQ, ActiveMQ, Apollo, v.v ... có thể được sử dụng để truyền dữ liệu không?
Chúng ta hãy lấy một ví dụ trong đó một ứng dụng sẽ gửi hàng loạt các thông điệp JSON cần được xử lý và quá trình xử lý khá phức tạp (xác thực, chuyển đổi dữ liệu, lọc, tổng hợp, v.v.):
- Trường hợp # 1: Các thông điệp là mỗi khung hình của một bộ phim; đó là một hành lý JSON trên mỗi khung hình video chứa dữ liệu khung và một số siêu dữ liệu hỗ trợ
- Trường hợp 2: Các tin nhắn là dữ liệu chuỗi thời gian, có lẽ nhịp tim của ai đó là một chức năng của thời gian. Vì vậy, Tin nhắn số 1 được gửi đại diện cho nhịp tim của tôi tại t = 1, Tin nhắn số 2 chứa nhịp tim của tôi tại t = 2, v.v.
- Trường hợp # 3: Dữ liệu hoàn toàn khác nhau và không liên quan theo thời gian hoặc là một phần của bất kỳ "luồng dữ liệu" nào. Có lẽ các sự kiện kiểm toán / bảo mật được kích hoạt khi hàng trăm người dùng điều hướng các nút bấm của ứng dụng và thực hiện các hành động
Dựa trên cách Kafka / Kinesis được lập hóa đơn và theo hiểu biết của tôi về "dữ liệu phát trực tuyến" là gì, chúng dường như là ứng cử viên rõ ràng cho Trường hợp # 1 (dữ liệu video liền kề) và # 2 (dữ liệu chuỗi thời gian liền kề). Tuy nhiên tôi không thấy bất kỳ lý do nào khiến một nhà môi giới tin nhắn truyền thống như RabbitMQ không thể xử lý hiệu quả cả hai đầu vào này.
Và với Trường hợp # 3, chúng tôi chỉ được cung cấp một sự kiện đã xảy ra và chúng tôi cần xử lý phản ứng với sự kiện đó. Vì vậy, với tôi điều này nói lên việc cần một nhà môi giới truyền thống như RabbitMQ. Nhưng cũng không có lý do tại sao bạn không thể yêu cầu Kafka hoặc Kinesis xử lý dữ liệu sự kiện.
Về cơ bản, tôi đang tìm cách thiết lập một phiếu tự đánh giá: Tôi có dữ liệu X với các đặc điểm Y. Tôi nên sử dụng bộ xử lý luồng như Kafka / Kinesis để xử lý nó. Hoặc ngược lại, một thứ giúp tôi xác định: Tôi có dữ liệu W với các đặc điểm Z. Tôi nên sử dụng một nhà môi giới tin nhắn truyền thống để xử lý nó.
Vì vậy, tôi hỏi: Những yếu tố nào về dữ liệu (hoặc nói cách khác) giúp điều khiển quyết định giữa bộ xử lý luồng hoặc nhà môi giới tin nhắn, vì cả hai đều có thể xử lý dữ liệu truyền phát và cả hai có thể xử lý dữ liệu tin nhắn (không phát trực tuyến)?