[英]Start reading Kafka topic from specific Offset in Apache Camel
[英]Java: How to read from current offset when I start reading from a kafka topic
我正在使用Java api使用者連接器。 每當消費者開始從某個主題開始閱讀時,它都會從主題的開頭開始閱讀,並且要花很長時間才能趕上最新的事件。 我們如何確保消費者從當前偏移量中讀取數據?
最簡單的方法是在使用者配置中禁用自動提交(即auto.commit.enable=false
),並使用auto.offset.reset=latest
(對於較舊的Kafka版本,請使用=largest
)。
Kafka中的流程如下:
因此,只要您的使用者組有一個有效的提交偏移量,“ auto.offset.reset”就根本不起作用。 因此,您也不應手動提交。
如果已經存在一個已提交的偏移量,那么如果要從當前偏移量讀取而不是處理舊數據,則需要在重新啟動使用者之前手動刪除它。 (或者使用一個新的group.id
,您知道它沒有提交的偏移量。)
作為所有替代方法,您還可以“尋求結束”使用者中的每個分區。 但這會使您的代碼更復雜,並且如果您的使用者組根本沒有提交,則可以避免。
對於kafka 0.10(可能更早),您可以執行以下操作:
properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
consumer = new KafkaConsumer<>(properties);
consumer.seekToEnd(Collections.emptySet());
這將關閉在代理上存儲消費者偏移量(因為您不使用它),並尋求所有分區的最新位置。
對於kafka 9:
為了完成Natalia的回答,我想說您可能並不關心存儲偏移量,您只想始終使用最新消息。
要使用大多數使用者實現(包括0.8.x中的“舊”使用者和0.9.x及更高版本中的“新”使用者)來實現該行為,您需要做兩件事:
OffsetRequestStrategy
(或任何它被稱為在您使用客戶端)到latest
,這樣當您的客戶端請求從卡夫卡抵消它獲取日志中的最后一個(最新)消息所抵消。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.