簡體   English   中英

Kafka 在 cmd JAVA app 中閱讀了整個主題

[英]Kafka read the whole topic in cmd JAVA app

我需要將 Kafka stream 與在 cronjob 中運行的 java 應用程序一起使用,並且每次都閱讀整個主題。 不幸的是,出於某種原因,它提交了偏移量,並在下一次運行時讀取了最后一個偏移量。 我嘗試了各種方法,但不幸的是沒有成功。 我的設置如下:

streamsConfiguration.put(APPLICATION_ID_CONFIG, "app_id");
streamsConfiguration.put(AUTO_OFFSET_RESET_CONFIG, "earliest");
streamsConfiguration.put(ENABLE_AUTO_COMMIT_CONFIG, "false");

我用以下代碼閱讀了主題:

Consumed<String, String> with = Consumed.with(Serdes.String(), Serdes.String());
with.withOffsetResetPolicy(Topology.AutoOffsetReset.EARLIEST);

final var stream = builder.stream("topic", with);


stream.foreach((key, value) -> {
                      log.info("Key= {}, value= {}", key, value);
});

final var kafkaStreams = new KafkaStreams(builder.build(), kafkaStreamProperties);
kafkaStreams.cleanUp();

kafkaStreams.start();

但是,它仍然從最新的偏移量中讀取。

Kafka Streams 定期提交偏移量,因此在您第一次運行應用程序並將其關閉后,下次啟動它時,Kafka Streams 將在上次提交的偏移量處獲取。 這是標准的 Kafka 行為。 AUTO_OFFSET_RESET_CONFIG僅在消費者找不到偏移量時適用,因此它依賴於該配置從哪里開始。

因此,如果您想在下次啟動時將其重置為從頭開始讀取,您可以使用應用程序重置工具或更改application.id 如果您從外部獲取 Kafka Streams 應用程序的屬性,則可以每次自動生成一個唯一的名稱。

暫無
暫無

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

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