如何在kafka消费者中恢复丢失的消息

时间:2017-08-24 17:36:34

标签: apache-kafka

我在Apache camel中编写应用程序。我通过驼峰Kafka组件使用来自某些Kafka主题的消息,并在发生任何崩溃/重启时转储到数据库中进行恢复。下面是驼峰URI

  

卡夫卡:autoCommitEnable =假安培;的groupId =的R& keySerializerClass = org.apache.kafka.common.serialization.StringSerializer&安培; serializerClass = org.apache.kafka.common.serialization.StringSerializer&安培;主题=

我的用例是 - 我已经从Kafka中消耗了一些消息但是无法将其转储到数据库中以进行恢复和崩溃。现在重新启动后如何使用相同的使用者组ID获取所有丢失的消息应用程序 ? 感谢

1 个答案:

答案 0 :(得分:0)

现在如何在重新启动应用程序后获取具有相同使用者组ID的所有丢失邮件?

实际上,kafka会为您存储使用者偏移量,如果您在应用程序中提交了偏移量。因此,当您重新启动应用程序时,它将使用存储在kafka中的最后一个偏移量的消息。

您可以设置AutocommitEnable = true OR

我也发现了https://github.com/apache/camel/blob/camel-2.18.2/components/camel-kafka/src/main/java/org/apache/camel/component/kafka/KafkaConsumer.java

有一些片段代码:

 if (endpoint.getConfiguration().isAutoCommitEnable() != null
                        && !endpoint.getConfiguration().isAutoCommitEnable()) {
                        long partitionLastoffset = partitionRecords.get(partitionRecords.size() - 1).offset();
                        consumer.commitSync(Collections.singletonMap(
                            partition, new OffsetAndMetadata(partitionLastoffset + 1)));
                    }

即使您没有设置AutocommitEnable,Camel也会处理这个问题。