在将kafka组件用于骆驼时,从kafka消费时有两种重试方法:
org.apache.kafka.clients.consumer.internals.AbstractCoordinator | [Consumer clientId = consumer-1, groupId = 2862121d-ddc9-4111-a96a-41ba376c0143]该成员将离开 该组,因为消费者轮询超时已到期。这意味着 后续调用poll()之间的时间比配置的时间长 max.poll.interval.ms,通常表示轮询循环为 花太多时间处理邮件。您可以解决这个问题 通过增加max.poll.interval.ms或通过减小最大值 带有max.poll.records的poll()中返回的批次大小。
您知道如何为第二种方法定义退避策略吗?
答案 0 :(得分:0)
我不熟悉Apache Camel,但是如果您能够修改使用者参数和轮询循环,那么第二种方法是正确的,这是Kafka重试的方法-不要提交偏移量,因此下一种轮询循环迭代将再次消耗该消息。
进一步的策略取决于您在发生故障时的确切需求:
您希望重试最终成功吗?然后,为避免向同一封邮件发送垃圾邮件,您可以调整用户使用max.poll.interval.ms
配置参数轮询Kafka邮件的时间间隔。更多详细信息here
是否要重试一定次数然后继续下一条消息?在这种情况下,您将需要在轮询循环中手动实现重试计数器。一旦达到一定的重试次数,您就可以简单地将消费者进一步转移:
final TopicPartition topicPartition = new TopicPartition(topic, partition); consumer.seek(topicPartition, consumer.position(topicPartition) + 1);