簡體   English   中英

Kafka 流應用程序重置 globalTable 和輸入主題

[英]Kafka streams application reset globalTable and input topics

我正在構建一個 kafka-streams 應用程序,目的是在業務邏輯失敗的情況下進行水平擴展和數據重新處理。

該應用程序使用來自具有相同分區數並與KStream::merge連接的兩個主題的數據。 還有第三個主題提供所有應用程序實例必須使用的數據,這造成了我面臨的困難。

到目前為止,我嘗試使用globalTable來提供來自全局主題的數據,但是當我重置應用程序以使用歷史數據時,我不確定它的行為。

據我了解,在應用程序重置后,所有merged的輸入主題都以處理器接收時間戳增加的數據的方式使用。 我擔心的是,當我通過 GlobalTable 使用數據並通過GlobalTable將其提供給處理器StateStore ,此功能不適用。 似乎當我重新處理數據時,從 StateStore 提供的StateStore只是最新使用的 state,並且與時間戳的輸入數據無關。

我的問題是:

  1. 如何向所有應用程序實例提供“全局”輸入主題,以便每個應用程序實例都擁有所有數據?
  2. GlobalTable state 商店在應用程序重置后表現如何? state 主題是否與其他輸入主題同步使用?

不確定“全局”輸入主題是什么意思。 但是,如果多個應用程序要使用相同的數據進行數據轉換/豐富,那么最好的選擇是設置與訂閱同一主題的應用程序一樣多的消費者組。 通過這種方式,同一組數據將在具有相同應用程序的多個消費者實例的不同消費者組之間進行廣播。

另外,應用程序重置是指KAFKA通過CLI提供的ART(應用程序重置工具)嗎?

如果是這樣,根據我的理解,單獨對 GlobalTable 沒有特定要求,但 ART 作為一個實體在 Stream 處理器上工作。

使用應用程序重置工具時,Kafka state 存儲會發生什么情況?

https://docs.confluent.io/4.0.0/streams/developer-guide/app-reset-tool.html

ART 做什么?

輸入主題:將偏移量重置為指定的 position(默認為主題的開頭)。c

中間主題:跳到主題的末尾,即將所有分區的應用程序提交的消費者偏移量設置為每個分區的logSize(對於消費者組application.id)。

內部主題:刪除內部主題(這會自動刪除任何已提交的偏移量)。

ART 沒有什么?

  • 重置應用程序的 output 主題。 如果下游應用程序使用任何 output(或中間)主題,則您有責任在重置上游應用程序時適當地調整這些下游應用程序。

  • 重置應用程序實例的本地環境。 您有責任在運行應用程序實例的任何機器上刪除本地 state。

要完全重置應用程序,您必須在運行應用程序實例的任何機器上刪除應用程序的本地 state 目錄。 您必須在同一台機器上重新啟動應用程序實例之前執行此操作。 您可以使用以下任一方法:

  • 應用程序代碼中的 API 方法 KafkaStreams#cleanUp()。
  • 手動刪除對應的本地 state 目錄(默認位置:/tmp/kafka-streams/<application.id>)。

暫無
暫無

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

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