Kafka: API người tiêu dùng so với API luồng


100

Gần đây tôi đã bắt đầu học Kafka và kết thúc với những câu hỏi này.

  1. Sự khác biệt giữa Người tiêu dùng và Luồng là gì? Đối với tôi, nếu bất kỳ công cụ / ứng dụng nào sử dụng thông điệp từ Kafka là người tiêu dùng trong thế giới Kafka.

  2. Stream khác biệt như thế nào vì điều này cũng truyền từ hoặc tạo tin nhắn đến Kafka? và tại sao nó lại cần thiết vì chúng tôi có thể viết ứng dụng tiêu dùng của riêng mình bằng API người tiêu dùng và xử lý chúng khi cần thiết hoặc gửi chúng đến Spark từ ứng dụng tiêu dùng?

Tôi đã thực hiện Google về điều này, nhưng không nhận được bất kỳ câu trả lời tốt nào cho điều này. Xin lỗi nếu câu hỏi này quá tầm thường.

Câu trả lời:


104

Cập nhật ngày 09 tháng 4 năm 2018 : Ngày nay, bạn cũng có thể sử dụng ksqlDB , cơ sở dữ liệu phát trực tuyến sự kiện cho Kafka, để xử lý dữ liệu của bạn trong Kafka. ksqlDB được xây dựng dựa trên API Luồng của Kafka và nó cũng đi kèm với hỗ trợ hạng nhất cho "luồng" và "bảng".

Sự khác biệt giữa API người tiêu dùng và API luồng là gì?

API Luồng của Kafka ( https://kafka.apache.org/documentation/streams/ ) được xây dựng dựa trên các nhà sản xuất và khách hàng tiêu dùng của Kafka. Nó mạnh hơn đáng kể và cũng biểu cảm hơn khách hàng tiêu dùng Kafka. Dưới đây là một số tính năng của API Kafka Streams:

  • Hỗ trợ ngữ nghĩa xử lý chính xác một lần (phiên bản Kafka 0.11+)
  • Hỗ trợ xử lý ở trạng thái có khả năng chịu lỗi (tất nhiên cũng như không trạng thái) bao gồm kết nối trực tuyến , tổng hợpcửa sổ . Nói cách khác, nó hỗ trợ quản lý trạng thái xử lý ứng dụng của bạn.
  • Hỗ trợ xử lý sự kiện thời gian cũng như xử lý dựa trên xử lý thời giantiêu hóa thời gian
  • Có hỗ trợ hạng nhất cho cả luồng và bảng , đó là nơi xử lý luồng đáp ứng cơ sở dữ liệu; trong thực tế, hầu hết các ứng dụng xử lý luồng cần cả hai luồng VÀ bảng để triển khai các trường hợp sử dụng tương ứng của chúng, vì vậy nếu công nghệ xử lý luồng thiếu một trong hai nội dung trừu tượng (giả sử không hỗ trợ bảng) thì bạn sẽ bị mắc kẹt hoặc phải tự triển khai chức năng này theo cách thủ công (chúc may mắn với điều đó...)
  • Hỗ trợ các truy vấn tương tác (còn được gọi là 'trạng thái có thể truy vấn ') để hiển thị kết quả xử lý mới nhất cho các ứng dụng và dịch vụ khác
  • Là biểu cảm hơn: nó tàu với (1) một chương trình phong cách chức năng DSL với các hoạt động như map, filter, reducecũng như (2) một phong cách bắt buộc API Processor cho ví dụ làm phức tạp xử lý sự kiện (CEP), và (3), bạn thậm chí có thể kết hợp DSL và API bộ xử lý.

Xem http://docs.confluent.io/current/streams/introduction.html để có phần giới thiệu chi tiết hơn nhưng vẫn ở cấp độ cao về API Kafka Streams, cũng sẽ giúp bạn hiểu sự khác biệt đối với người tiêu dùng Kafka cấp thấp hơn khách hàng. Ngoài ra còn có một hướng dẫn dựa trên Docker cho API Kafka Streams , mà tôi đã viết blog về đầu tuần này.

Vậy API Kafka Streams khác với API này như thế nào vì nó cũng sử dụng hoặc tạo ra các thông báo tới Kafka?

Có, API Kafka Streams vừa có thể đọc dữ liệu cũng như ghi dữ liệu vào Kafka.

và tại sao nó lại cần thiết vì chúng tôi có thể viết ứng dụng tiêu dùng của riêng mình bằng API người tiêu dùng và xử lý chúng khi cần thiết hoặc gửi chúng đến Spark từ ứng dụng tiêu dùng?

Có, bạn có thể viết ứng dụng tiêu dùng của riêng mình - như tôi đã đề cập, API luồng Kafka sử dụng chính ứng dụng khách hàng tiêu dùng Kafka (cộng với ứng dụng khách nhà sản xuất) - nhưng bạn phải triển khai thủ công tất cả các tính năng độc đáo mà API luồng cung cấp . Xem danh sách ở trên để biết mọi thứ bạn nhận được "miễn phí". Do đó, đây là một trường hợp hiếm hoi mà người dùng chọn khách hàng tiêu dùng cấp thấp hơn là API Kafka Streams mạnh mẽ hơn.


8
Trong trường hợp nào thì một ứng dụng sẽ sử dụng Kafka Consumer API trên Kafka Streams API?
bhh1988,

4
Chủ yếu trong các tình huống mà bạn cần truy cập trực tiếp vào các phương pháp cấp thấp hơn của Kafka Consumer API. Giờ đây, Kafka Streams đã có sẵn, điều này thường được thực hiện cho các ứng dụng và trường hợp sử dụng khá tùy chỉnh, chuyên biệt. Đây là một phép tương tự: Hãy tưởng tượng rằng Kafka Streams là một chiếc ô tô - hầu hết mọi người chỉ muốn lái nó nhưng không muốn trở thành thợ sửa xe. Nhưng một số người có thể muốn mở và điều chỉnh động cơ của ô tô vì bất kỳ lý do gì, đó là lúc bạn có thể muốn trực tiếp sử dụng API người tiêu dùng. (Điều đó đang được nói, Kafka Streams cũng có API bộ xử lý cho các nhu cầu tùy chỉnh.)
Michael G. Noll

1
Tôi nghĩ rằng điểm khác biệt chính của họ là khả năng truy cập vào cửa hàng. Khi bạn hiểu được sức mạnh của việc sử dụng lưu trữ trong luồng, bạn sẽ hiểu được sức mạnh của luồng kafka.
Yonatan Kiron

23

Thành phần Kafka Stream được xây dựng để hỗ trợ loại ETL chuyển đổi thông điệp. Có nghĩa là để nhập dòng từ chủ đề, chuyển đổi và xuất sang các chủ đề khác. Nó hỗ trợ xử lý thời gian thực và đồng thời hỗ trợ các tính năng phân tích nâng cao như tổng hợp, cửa sổ, nối, v.v.

"Kafka Streams đơn giản hóa việc phát triển ứng dụng bằng cách xây dựng trên thư viện người tiêu dùng và nhà sản xuất Kafka, đồng thời tận dụng các khả năng bản địa của Kafka để cung cấp dữ liệu song song, điều phối phân tán, khả năng chịu lỗi và vận hành đơn giản."

Dưới đây là các đặc điểm kiến ​​trúc chính trên suối Kafka. Tham khảo thêm tại đây

  1. Phân vùng luồng và nhiệm vụ : Kafka Streams sử dụng khái niệm phân vùng và nhiệm vụ làm đơn vị logic của mô hình song song dựa trên phân vùng chủ đề Kafka.
  2. Mô hình luồng: Kafka Streams cho phép người dùng định cấu hình số luồng mà thư viện có thể sử dụng để xử lý song song trong một phiên bản ứng dụng.
  3. Cửa hàng trạng thái cục bộ : Kafka Streams cung cấp cái gọi là cửa hàng trạng thái, có thể được sử dụng bởi các ứng dụng xử lý luồng để lưu trữ và truy vấn dữ liệu, đây là một khả năng quan trọng khi thực hiện các hoạt động trạng thái
  4. Khả năng chịu lỗi: Kafka Streams được xây dựng dựa trên khả năng chịu lỗi được tích hợp nguyên bản trong Kafka. Các phân vùng Kafka có tính khả dụng và nhân rộng cao, vì vậy khi dữ liệu truyền trực tiếp được lưu vào Kafka, nó vẫn có sẵn ngay cả khi ứng dụng bị lỗi và cần xử lý lại.

Dựa trên sự hiểu biết của tôi, dưới đây là những điểm khác biệt chính mà tôi sẵn sàng cập nhật nếu thiếu hoặc sai lệch bất kỳ điểm nào

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Nơi sử dụng Người tiêu dùng - Nhà sản xuất:

  1. Nếu có những người tiêu dùng đơn lẻ, hãy sử dụng quá trình thông điệp nhưng không lan sang các chủ đề khác.
  2. Như điểm 1 nếu chỉ có nhà sản xuất sản xuất thông điệp, chúng tôi không cần Kafka Stream.
  3. Nếu thông điệp của người tiêu dùng từ một cụm Kafka nhưng xuất bản đến các chủ đề cụm Kafka khác nhau. Trong trường hợp đó, thậm chí bạn có thể sử dụng Kafka Stream nhưng bạn phải sử dụng một Producer riêng để xuất bản tin nhắn đến các cụm khác nhau. Hoặc đơn giản là sử dụng cơ chế Người tiêu dùng - Nhà sản xuất Kafka.
  4. Xử lý hàng loạt - nếu có yêu cầu thu thập thông báo hoặc loại xử lý hàng loạt tốt của nó để sử dụng cách truyền thống bình thường.

Sử dụng Kafka Stream ở đâu:

  1. Nếu bạn sử dụng tin nhắn từ một chủ đề, chuyển đổi và xuất bản sang các chủ đề khác Kafka Stream là phù hợp nhất.
  2. Xử lý thời gian thực, phân tích thời gian thực và Học máy.
  3. Chuyển đổi trạng thái như tổng hợp, cửa sổ nối, v.v.
  4. Lập kế hoạch sử dụng các cửa hàng nhà nước địa phương hoặc các cửa hàng nhà nước được gắn kết như Portworx, v.v.
  5. Đạt được chính xác một xử lý theo ngữ nghĩa và khả năng chịu lỗi tự động xác định.

1
Tuyệt vời, thực sự hữu ích, nhưng có một sai lầm lớn, Chính xác một khi ngữ nghĩa có sẵn trong cả api Người tiêu dùng và Luồng, hơn nữa EOS chỉ là một loạt các cài đặt cho người tiêu dùng / nhà sản xuất ở cấp thấp hơn, sao cho nhóm cài đặt này kết hợp với các giá trị cụ thể của chúng đảm bảo hành vi của EOS. Hiện tại, tôi đang sử dụng EOS với Consumer api mà không gặp vấn đề gì.
uptoyou

Đúng vậy, chúng ta có thể định nghĩa Chính xác một lần ngữ nghĩa trong Kafka Stream bằng cách đặt thuộc tính tuy nhiên đối với nhà sản xuất và người tiêu dùng đơn giản, chúng ta cần xác định idmpotent và giao dịch để hỗ trợ như một giao dịch đơn vị
sun007 3/12/19

có thay đổi về từ ngữ theo gợi ý không
sun007 3/12/19

@ sun007, nhanh hơn cho các ứng dụng đơn giản không cần khả năng thời gian thực? và ngoài ra, việc sử dụng tính năng phát trực tuyến có làm tăng chi phí chuyển đổi "bổ sung" như bất kỳ công cụ cấp cao nào khác ngoài chức năng gốc của kafka không?
Nag
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.