Java 为什么卡夫卡消费者会丢失数据?

Java 为什么卡夫卡消费者会丢失数据?,java,apache-kafka,kafka-consumer-api,Java,Apache Kafka,Kafka Consumer Api,卡夫卡消费者在工作时由于数据库问题而无法正常完成工作。之后,数据库的状态恢复正常 数据库出现问题时收到的消息丢失。为什么卡夫卡由于数据库问题无法正常处理数据,但偏移量发生了变化 例如,当接收到从偏移量10到偏移量100的消息时,数据库运行异常,数据库从101正常运行,但偏移量从101运行,从10到100的数据丢失。确认模式为手动模式每个卡夫卡消费者(更准确地说:每个消费者组)的偏移位置存储在内部卡夫卡主题\u消费者\u偏移中。在本主题中,删除策略设置为compact,这意味着它最终会保留有关上次

卡夫卡消费者在工作时由于数据库问题而无法正常完成工作。之后,数据库的状态恢复正常

数据库出现问题时收到的消息丢失。为什么卡夫卡由于数据库问题无法正常处理数据,但偏移量发生了变化


例如,当接收到从偏移量10到偏移量100的消息时,数据库运行异常,数据库从101正常运行,但偏移量从101运行,从10到100的数据丢失。确认模式为手动模式

每个卡夫卡消费者(更准确地说:每个消费者组)的偏移位置存储在内部卡夫卡主题
\u消费者\u偏移
中。在本主题中,删除策略设置为
compact
,这意味着它最终会保留有关上次提交的偏移量的信息

现在,正如在您的案例中发生的那样,如果消费者未能提交消息10到100,但随后提交了消息101,则卡夫卡消费者将继续使用偏移量为102的消息,并且不会再次尝试读取消息10到100

就卡夫卡被告知您的ConsumerGroup的偏移位置而言,如果您

A) 不要提交消息10到100,然后提交101

B) 执行提交消息10到100,然后提交101


我在另一篇

中更详细地解释了这一行为。当数据库工作异常时,是否为管理的消息发送ack?使用者不维护状态,因此不会丢失任何数据。。。你是说这个话题丢失了数据?