[英]When can a Flink job consume from Kafka?
我們有一個 Flink 作業,它具有以下拓撲:
source -> filter -> map -> sink
我們在 sink 操作員open
-override function 設置了一個 live(ready) 狀態。 獲得該狀態后,我們發送事件。 有時它不能消費提前發送的事件。
我們想知道我們可以發送不會丟失的數據的確切時間/步驟。
看起來您希望確保不會遺漏任何消息進行處理。 Kafka 會保留你的消息,所以不需要在 Flink 消費者准備好時才發送消息。 您可以通過避免狀態消息來簡化您的設計。
任何 Kafka 消費者(不僅僅是 Flink 連接器)在 Kafka 服務器中都會有一個與之關聯的偏移量,以跟蹤被消費的最后一條消息的 id。
來自卡夫卡文檔:
Kafka 為分區中的每條記錄維護一個數字偏移量。 此偏移量充當該分區內記錄的唯一標識符,並且還表示分區中使用者的 position。 例如,位於 position 5 的消費者已經消費了偏移量為 0 到 4 的記錄,接下來將接收偏移量為 5 的記錄
在您的 Flink Kafka 連接器中,將偏移量指定為已提交的偏移量。
OffsetsInitializer.committedOffsets(OffsetResetStrategy.EARLIEST)
這將確保如果您的 Flink 連接器重新啟動,它將從重新啟動之前停止的最后一個 position 開始消耗。
如果由於某種原因,偏移量丟失,這將從您的 Kafka 主題的開頭(最早的消息)開始讀取。 請注意,此方法將導致您重新處理消息。
您可以探索更多抵消策略來選擇適合您的策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.