簡體   English   中英

Flink 作業何時可以從 Kafka 消費?

[英]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 主題的開頭(最早的消息)開始讀取。 請注意,此方法將導致您重新處理消息。

您可以探索更多抵消策略來選擇適合您的策略。

參考 - https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/datastream/kafka/#starting-offset

暫無
暫無

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

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