我有一个java Kafka消费者,我在批处理中获取ConsumerRecords来处理。示例代码如下 -
NSTextField
我遇到的问题是如果生成了后一条记录,但前一条记录仍未超时,则提交方式或提交偏移量。
让我们假设我一批获得2条记录,仍在等待第一条消息的外部呼叫,并且第二条呼叫已完成。如果我等待5秒钟进行外部响应,Kafka消息的消耗可能会变得非常慢。如果我在进行另一次民意调查之前不等待第一次请求完成,那么我对卡夫卡的承诺是什么?如果我提交2,并且如果消费者崩溃,则第一条消息将在下次最新提交的偏移量为2时丢失。
答案 0 :(得分:1)
我认为您正确地分析了问题,答案可能是您怀疑的:在处理了小于和等于该偏移量的每个偏移量之前,您无法提交偏移量。这就是Kafka的工作方式:它非常注重强大的订购。
解决方案是增加分区和使用者的数量,以便获得所需的并行性。从某些角度来看这不是很好 - 你需要更多的线程和资源 - 但至少你可以编写同步代码。
答案 1 :(得分:0)
您可以做的是可以设置错误管道。对于失败的消息,您将提交该消息并将其推送到错误队列并稍后处理。