【问题标题】:Best way to configure retries in Kaka Producer在 Kafka Producer 中配置重试的最佳方式
【发布时间】:2021-04-21 17:17:08
【问题描述】:

将 In-Sync 副本配置为 Acks=all 和 min.insync.replicas = N,

想了解如何为未处理的生产者记录的消息/记录配置重试

示例: 当 Kafka 处理记录失败时,处理过程中在线 ISR 为 N-1,并且最小配置的 ISR 为 N 个副本。

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    什么是acks?

    acks 参数控制生产者必须接收多少个分区副本才能认为写入成功。

    acks参数有3个值:

    acks=0,生产者在假定消息发送成功之前不会等待代理的回复。

    acks=1,生产者将在领导副本收到消息的那一刻收到来自代理的成功响应。如果消息无法写入leader,producer会收到错误响应,可以重试。

    acks=all,一旦所有同步副本都收到消息,生产者将收到来自代理的成功响应。

    在您的情况下,acks=all,这是最安全的方式,因为您可以确保另一个代理拥有该消息。

    重试:

    如果生产者收到错误消息,那么 retries 属性的值就会出现。您可以使用 retry.backoff.ms 属性来配置重试之间的时间。建议测试从崩溃的代理中恢复需要多长时间,并设置重试次数和它们之间的延迟,以使重试所花费的总时间比 Kafka 集群从头开始恢复所花费的时间更长。

    另外,请查看以下链接,

    https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/

    【讨论】:

      【解决方案2】:

      对于上述情况,您将收到 NotEnoughReplicasException。在这个阶段,卡夫卡重提消息 对于 kafka =2.1,此值设置为非常高的值 此外,还有另一个名为“retry.backof.ms”的设置。此设置的默认值为 100 毫秒。 Kafka 生产者将每 100 毫秒重试一次以生成此消息,直到成功。 为避免它无限次重试,或者您可以设置“delivery.timout.ms”以确保生产者重试以毫秒为单位发送消息。它的默认值为 120000 毫秒。这不过是 2 分钟。意味着 Producer 不会在 2 分钟后重试,并认为消息失败。 此外,您可能需要考虑“max.in.flight.requests”设置,以确保当您的 Kafka 消息中有 Key 时,重试消息按顺序处理

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-26
        • 2021-07-15
        • 2013-03-28
        • 1970-01-01
        • 2021-10-16
        • 2021-03-06
        • 2020-11-03
        • 1970-01-01
        相关资源
        最近更新 更多