繁体   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