【问题标题】:Spring Kafka Consumer Retry春季卡夫卡消费者重试
【发布时间】:2018-03-13 21:56:39
【问题描述】:

我正在使用 Spring Kafka 消费者,它从主题中获取消息并将它们保存到数据库中。如果满足失败条件,例如数据库不可用,kafka 消费者库是否提供重试机制?如果是这样,有没有办法设置不同的重试间隔,例如第一次重试应该在 5 分钟后进行,第二次在 30 分钟后进行,第三次在 1 小时后进行等等。

【问题讨论】:

    标签: spring-boot apache-kafka kafka-consumer-api spring-kafka


    【解决方案1】:

    Spring Kafka 附带 RetryingMessageListenerAdapterRetryingAcknowledgingMessageListenerAdapter。如果您使用@KafkaListener,您可以提供AbstractKafkaListenerContainerFactoryRetryTemplate。最后一个可以注入来自 Spring Retry 项目的任何自定义 RetryPolicyBackOffPolicy

    https://docs.spring.io/spring-kafka/reference/html/#retrying-deliveries

    还请记住,从版本2.0 开始,Spring Kafka 中就有事务支持,基于 Apache Kafka 0.11.x.x 中的这样一个:

    https://docs.spring.io/spring-kafka/reference/html/#transactions

    【讨论】:

    • 感谢 Artem,当我有 10 个偏移量时,例如在一个分区中。如果偏移量 5 处的消息未能插入 DB 中,是否会根据我设置的重试配置进行尝试,而偏移量 6 到 10 继续作为正常流程的一部分执行?还是消费者会等到 5 成功完成?我假设在重试尝试用尽之前不会提交偏移量 5 的消息
    • 没错。同一分区中的记录是按顺序处理的,因此,6 不会被处理,直到5 成功或重试耗尽。
    • 谢谢,最后一个问题。我可以只对特定类型的错误启用重试吗?
    • 是的,你可以。那是RetryPolicy 的责任。查看它的 JavaDocs 和实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 2018-02-10
    • 2019-07-03
    • 2018-05-05
    • 2021-08-22
    相关资源
    最近更新 更多