簡體   English   中英

當輸入主題有數據保留期時,啟動新的 Kafka Streams 微服務

[英]Starting new Kafka Streams microservice, when there is data retention period on input topics

假設我有(有點)高速輸入主題 - 例如sensor.temperature ,它的保留期為 1 天。 多個微服務已經在使用其中的數據。 我還在歷史事件存儲中備份事件。

現在(作為一個簡化的例子)我有新的要求 - 計算每個傳感器的最大所有時間溫度。 這非常適合 Kafka Streams,因此我准備了新的微服務,該微服務創建 KTable 聚合溫度(最大值),每個傳感器分組。 如果輸入主題具有無限保留,那么簡單地部署這個微服務就足夠了,但現在最大值將不是所有時間,這是我們的要求。

我覺得這可能是常見的情況,但不知何故我無法在互聯網上找到令人滿意的解決方案。

也許我錯過了一些東西,但我的想法如何讓它發揮作用並不好:

  1. 將所有過去的事件重播到輸入主題sensor.temperature中。 這是大量的數據,它會導致所有訂閱的微服務運行過多的計算,這很可能是不可接受的。
  2. 為我的微服務創建輸入主題的副本: sensor.temperature.local ,我將始終復制所有事件,然后從該本地主題進一步處理(聚合)它們。 這樣我可以在不影響其他微服務的情況下,自由地將歷史事件回放到本地主題中。 然而,所有 Kafka Streams 微服務都需要這個本地副本,如果輸入主題是高速的,這可能是太多的重復。
  3. 也許有一些方法可以更直接地修改 KTable,因此可以查詢歷史事件存儲以獲取每個傳感器的最大值並將其放入 KTable 一次? 但是如果流拓撲更復雜怎么辦? 這需要在所有微服務的 KTable 中編排一致的 state,而不是簡單地重播事件。

如何設計解決方案?

在此先感謝您的幫助!

在這種情況下,我將創建一個定期存儲最大值的主題(這樣它就不會因為清理而脫離主題)。 然后你可以讓你的服務報告最大主題的最大值和測量主題的最大值。

暫無
暫無

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

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