我使用spring-integration-kafka
使用自定义确认机制实现Kafka使用者。
使用了来自this example的代码。
我想要实现的是当抛出异常时,不应该将确认发送回Kafka(即不应该执行偏移提交),因此下一个fromKafka.receive(10000)
方法调用将返回与前一条相同的信息。
但我遇到了一个问题:即使确认没有发送给Kafka,消费者也知道下一条消息的偏移,并继续读取新消息,尽管偏移主题中的偏移值保持不变。
如果出现故障,如何制作消费者重读消息?
答案 0 :(得分:2)
目前不支持重新获取失败的消息
您可以做的一件事是在消息驱动的适配器下游添加重试(例如,使用请求处理程序重试建议)。
通过不执行,消息将在重新启动后传递,但不会在当前实例化期间传递。
由于消息已预取到适配器中,您可以做的一件事就是检测故障,停止适配器,排空预取消息并重新启动。
您可以注入一个自定义ErrorHandler
来停止适配器并向下游流发出信号,告知它应该忽略引出的消息。
修改强>