![](/img/trans.png)
[英]Java: How to read from current offset when I start reading from a kafka topic
[英]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.