簡體   English   中英

在Kafka Consumer App中像在狀態存儲中一樣使用Kafka Streams

[英]Using Kafka Streams just as a state store in a Kafka Consumer App

我目前正在使用Spring Kafka Consumer API開發Spring Boot應用程序。

我到達某個主題的每條消息都需要轉換為新的對象類型,並具有來自其他主題的其他屬性。 目前,這些其他主題尚未開發,我們正在使用內存數據的模擬版本來處理請求。

例如,一條新的“購物訂單”消息到達,但是我正在使用模擬的“客戶”對象和模擬的“項目”對象以處理訂單。 計划是使用真實的客戶主題和真實的項目主題。

另外,當前,該應用程序僅是用於獲得新訂單的Spring Kafka偵聽器。 偵聽器調用一個spring bean方法,該方法處理訂單並創建一個新對象,該對象使用與我上面提到的相同的模擬方法寫入另一個名為customer-order的輸出主題。

我們目前正在考慮改進此應用程序的體系結構。 我一直在閱讀卡夫卡流。 我在網上閱讀的關於流的文檔僅采用簡單的示例,例如字數統計,聯接等。由於對流的了解有限,因此我不打算使用諸如計算總數之類的功能。

我已經想到了該體系結構的一些選擇...

  1. 我打算保留使用者API,即使用Spring偵聽器實現來接收新的訂單消息,同時使用流依賴性只是創建狀態存儲,該狀態存儲最終將替換模擬數據。 想法是,模擬數據最終將來自其他主題。 因此,在這種方法中,Kafka的“流”部分將僅用於創建狀態存儲,而不用於處理傳入的記錄。
  2. 使用純粹的Kafka使用者API並使用API​​調用來獲取我主題外部的數據。 這是一個不太理想的選項,因為我不想為每個新訂單都進行外部API調用。
  3. 使用Kafka Streams既可以讀取新的傳入訂單,也可以收集和存儲狀態。 另外,利用聯接和合並來處理數據。

你有什么建議? 1,2還是3? 將Streams用於這種解決方案是一個好主意嗎? 將這種實現方式轉換為使用Kafka流媒體有什么好處? 還是我最好還是和2呆在一起?

1對我來說聽起來很奇怪。 您可以保留一個KafkaStreams應用程序通過Interactive Queries公開狀態存儲,但是看起來更像是2。您還必須考慮如何部署實例並確保Spring部分和KafkaStreams之間的共分區。部分。

我完全不會在Kafka Streams中完成任何操作,除非您有一些非常復雜的邏輯,無法使用當前的API來實現,但如果您無法做到這一點,我會感到很驚訝。 實際上,您所描述的內容聽起來像是它的常規應用程序(警告是不了解其他需求,例如時間,預期數量等)。

優點:

  • 它在消費和生產之上創建了一個抽象層。 例如,像訂單,消費者富集聽起來像一個好它,用你提到的加入
  • 消除了部署應用程序的復雜性-它使用與Kafka Brokers相同的分區分配和重新平衡方案。 您可以無縫添加/刪除處理實例。
  • 它比其他流處理器庫更簡單,但是在大多數情況下就足夠了(如果您需要更多DIY內容,則除了DSL之外,您還擁有Processor API。
  • 發展速度。 一旦掌握了基礎知識(並不難),您就可以很快地編寫應用程序,因為您專注於邏輯。
  • 文檔已得到充分照顧。

缺點:

  • 它是一個JVM庫,但似乎您已經在使用Java。
  • 必須學習新的范例-盡管實際上很簡單。 並且與其他流處理庫非常相似,而且絕對簡單。
  • 它與Kafka相關(實際上是其中一部分)。 如果要移開紅外線,則可能必須使用其他流處理器。
  • 根據您的用例,尤其是其復雜性,您可能會發現其他流媒體平台更有利(例如,Spark或Flink僅舉兩個例子)。
  • 它已經相當成熟,但可能不如Spark。 它正在變得越來越好,不過您需要Confluent的人員在努力。

這不是一個完整的列表,但這是我腦海中最重要的一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM