Kafka Consumer在重新启动时跳过消息

时间:2020-04-21 12:38:31

标签: apache-kafka kafka-consumer-api

我正在运行一个Kafka集群,并且在重新启动应用程序(消费者)时,它会跳过一些在应用程序停止运行时推送到该主题的消息。

启动应用程序后,我可以看到它读取了偏移量为100的消息,然后将偏移量101推到了__consumer_offsets。然后,当应用程序关闭时,将偏移量为101, 102 and 103的消息推送到该主题。重新启动应用程序后,它将读取101并将其偏移量设置为104,从而跳过102 and 103

这是我的配置:

config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaCluster);
config.put(ConsumerConfig.GROUP_ID_CONFIG, my-consumer);
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
config.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, deserializer);

1 个答案:

答案 0 :(得分:0)

在查看可用信息时,您的消费者似乎没有跳过任何消息。

使用具有偏移量100的消息后,内部主题__consumer_offsets存储此使用者的偏移量101。偏移量101是消费者将在该主题上阅读的下一个偏移量。

重新启动后,在主题中还有3条消息之后,使用者开始处理偏移量101,并且随后还应该处理其他消息。但是,根据您的提交策略,它会向内部主题__consumer_offsets报告,下一条要读取的消息的偏移量为104。由于会一次轮询所有消息,因此不会具体说明101、102和103。