【问题标题】:Kafka "retry" topic anti-patternKafka“重试”主题反模式
【发布时间】:2021-08-10 03:29:48
【问题描述】:

我看到的大多数地方都建议您创建一个“重试”主题,以防止数据丢失。如果消费者失败,它应该向“重试”主题发送一条消息,该主题将等待一段时间,然后将一条消息发送回“主”主题。

这不是一种反模式吗,因为当它返回“主”主题时,所有订阅“主”主题的服务都会重新处理失败的消息,即使只有一个服务最初未能处理它?

是否有解决此问题的传统方法,例如将 clientId 放在作为重试结果的消息的标头中?我错过了什么吗?

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    死信队列 (DLQ) 本身并不是一种反模式。循环回到主题可能是,但这是主观的。

    替代方法是“停止世界”并更新消费者代码以在主题保留删除您关心的消息之前解决错误。或者,让您的下游消费者从 DLQ 主题中读取,但处理方式与主要主题不同。

    是否有解决此问题的常规方法,例如将 clientId 放在标头中

    如果您想以某种方式跟踪谱系,但重新引入那些以前的坏消息会引入延迟和排序问题,从而干扰“好”消息。

    相关问题

    What is the best practice to retry messages from Dead letter Queue for Kafka

    【讨论】:

    • 谢谢。我不太担心消息或代码的内容不好,而不是担心消费者的数据库暂时不可用(这意味着它无法处理消息)。在这种情况下只是重新启动消费者还是在消费者内部处理重试逻辑更典型?
    • 我还没有写过写入数据库的消费者,只使用了用 Connect API 构建的消费者,它确实有重试机制以及 DLQ 选项
    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多