【问题标题】:How to handle errors and retries in spring-kafka如何处理 spring-kafka 中的错误和重试
【发布时间】:2018-09-18 23:51:09
【问题描述】:

这是一个与以下相关的问题: https://github.com/spring-projects/spring-kafka/issues/575

我正在使用 spring-kafka 1.3.7 和读写循环中的事务。 为此,我应该在 spring kafka 容器上使用 KTM 来启用整个侦听器进程的事务,并根据分区自动处理事务 id 用于僵尸围栏(1.3.7 更改)。

如果我从问题 #575 中理解得很好,我在使用事务管理器时不能在容器中使用 RetryTemplate。

在这种情况下我应该如何处理错误和重试? 事务的默认行为是无限重试?这看起来真的很危险。一个意外的异常可能会简单地阻塞整个生产过程。

【问题讨论】:

    标签: spring-kafka


    【解决方案1】:

    即将发布的 2.2 版本为 DefaultAfterRollbackProcessor 添加了恢复功能 - 因此您可以在尝试多次后停止重试。

    Docs Here, PR here.

    它还提供了一种可选机制,将失败的记录发送到死信主题。

    如果您无法迁移到 2.2(本周末发布的候选版本,10 月 GA 发布),您可以提供具有类似功能的自定义 AfterRollbackProcessor

    编辑

    或者,您可以将代码添加到您的侦听器(或其错误处理程序),以跟踪同一记录已传送多少次,并在您的侦听器或其侦听器级错误处理程序中处理错误。

    【讨论】:

    • 或者您可以使用侦听器错误处理程序在尝试多次后放弃。
    • 这不兼容 spring-kafka 1.x 吗?我们使用的是springboot 1,迁移到springboot2很复杂
    • 否;这是 2.2 中的一个新功能;对于早期版本,您需要侦听器中的逻辑以某种方式处理重复失败的记录。
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2021-10-26
    • 2015-05-24
    • 1970-01-01
    • 2019-11-25
    • 2020-07-17
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多