用于卡夫卡手动抵消管理的用例

时间:2016-09-19 01:51:27

标签: apache-kafka kafka-consumer-api

我正在尝试在Java上实现Kafka使用者。

假设使用者包含一些可能引发异常的消息处理逻辑。在这种情况下,消费者应该睡一段时间并重新处理最后一条消息。

我的想法是使用手动偏移管理:在失败时未提交偏移量,因此消费者可能会从旧偏移量中读取。

在测试期间,我发现尽管没有提交偏移,但实际上只读取了一次消息。仅在应用程序重新启动时才考虑上次提交的偏移量。

我的问题是:

  • 我是否做得对吗?
  • 手动抵消管理的用例是什么?

1 个答案:

答案 0 :(得分:1)

KafkaConsumer保留最新的偏移量内存中,因此,如果发生异常(并从中恢复)并且您想再次阅读消息,则需要在第二次轮询之前使用seek()

提交偏移量仅“存在”,以便在客户端关闭或崩溃时保留偏移量(即,可靠地与内存中存储的偏移量)。在客户端启动时,会获取最新提交的偏移量,而客户端仅使用它自己的内存中偏移量。

如果您想要将偏移提交与其他一些操作“捆绑”,则手动偏移管理很有用(例如,另一个必须与提交的Kafka偏移同步的系统中的第二个“提交”)。