首先消耗后面的消息时,Kafka使用者偏移提交

时间:2018-01-05 03:18:33

标签: apache-kafka kafka-consumer-api

我有一个java Kafka消费者,我在批处理中获取ConsumerRecords来处理。示例代码如下 -

NSTextField

我遇到的问题是如果生成了后一条记录,但前一条记录仍未超时,则提交方式或提交偏移量。
让我们假设我一批获得2条记录,仍在等待第一条消息的外部呼叫,并且第二条呼叫已完成。如果我等待5秒钟进行外部响应,Kafka消息的消耗可能会变得非常慢。如果我在进行另一次民意调查之前不等待第一次请求完成,那么我对卡夫卡的承诺是什么?如果我提交2,并且如果消费者崩溃,则第一条消息将在下次最新提交的偏移量为2时丢失。

2 个答案:

答案 0 :(得分:1)

我认为您正确地分析了问题,答案可能是您怀疑的:在处理了小于和等于该偏移量的每个偏移量之前,您无法提交偏移量。这就是Kafka的工作方式:它非常注重强大的订购。

解决方案是增加分区和使用者的数量,以便获得所需的并行性。从某些角度来看这不是很好 - 你需要更多的线程和资源 - 但至少你可以编写同步代码。

答案 1 :(得分:0)

您可以做的是可以设置错误管道。对于失败的消息,您将提交该消息并将其推送到错误队列并稍后处理。