通过拒绝确认来重读来自Kafka主题的消息

时间:2015-10-21 18:13:47

标签: spring-integration apache-kafka

我使用spring-integration-kafka使用自定义确认机制实现Kafka使用者。

使用了来自this example的代码。

我想要实现的是当抛出异常时,不应该将确认发送回Kafka(即不应该执行偏移提交),因此下一个fromKafka.receive(10000)方法调用将返回与前一条相同的信息。

但我遇到了一个问题:即使确认没有发送给Kafka,消费者也知道下一条消息的偏移,并继续读取新消息,尽管偏移主题中的偏移值保持不变。

如果出现故障,如何制作消费者重读消息?

1 个答案:

答案 0 :(得分:2)

目前不支持重新获取失败的消息

您可以做的一件事是在消息驱动的适配器下游添加重试(例如,使用请求处理程序重试建议)。

通过不执行,消息将在重新启动后传递,但不会在当前实例化期间传递。

由于消息已预取到适配器中,您可以做的一件事就是检测故障,停止适配器,排空预取消息并重新启动。

您可以注入一个自定义ErrorHandler来停止适配器并向下游流发出信号,告知它应该忽略引出的消息。

修改

现在有SeekToCurrentErrorHandler