【发布时间】:2020-01-27 12:41:46
【问题描述】:
需要更改 Kafka Producer 配置的哪些参数,以便生产者应该: 1)重试n次 2) n 间隔后 如果代理关闭,则为相同的消息。
我需要处理与此相关的情况: https://github.com/rsyslog/rsyslog/issues/1052
【问题讨论】:
标签: python apache-kafka kafka-producer-api rsyslog confluent-platform
需要更改 Kafka Producer 配置的哪些参数,以便生产者应该: 1)重试n次 2) n 间隔后 如果代理关闭,则为相同的消息。
我需要处理与此相关的情况: https://github.com/rsyslog/rsyslog/issues/1052
【问题讨论】:
标签: python apache-kafka kafka-producer-api rsyslog confluent-platform
您可以将“重试次数”设置为 n(次数)。但这还不够,您还需要研究其他可能因此受到影响或无法使其生效的配置。
1) 如果你有 acks = 0 作为生产者,那么它不会起作用。因为 acks = 0 → 生产者不等待任何类型的确认。在这种情况下,不能保证经纪人已收到记录。 重试配置不生效,因为无法知道是否发生任何故障。
2) 如果您正在寻找事件的有序交付,那么您需要将 max.in.flight.requests.per.connection 设置为 1。
3) retry.backoff.ms - 在尝试重试对给定主题分区的失败请求之前等待的时间量。这样可以避免在某些失败场景下,在紧密的循环中重复发送请求。
4) request.timeout.ms - 配置控制客户端等待请求响应的最长时间。如果在超时之前没有收到响应,客户端将在必要时重新发送请求,或者如果重试次数用尽则请求失败。
5) delivery.timeout.ms - 调用 send() 返回后报告成功或失败的时间上限。这限制了记录在发送之前将被延迟的总时间、等待代理确认的时间(如果预期)以及可重试发送失败所允许的时间。如果遇到不可恢复的错误、重试次数已用尽或记录被添加到达到较早交货到期期限的批次中。
参考链接:https://kafka.apache.org/documentation/#producerconfigs
【讨论】:
【讨论】:
我不确定您是否真的可以控制生产者端的重试次数。
让我把我的理解放在这里。如果在此超时时间过去之前未收到响应,则生产者将在 'request.timeout.ms' 之后触发第一次重试,并且后续重试将以 'retry.backoff 的间隔进行。 ms' 直到你到达 'delivery.timeout.ms'
您可以在这里找到更多详细信息https://kafka.apache.org/documentation/#producerconfigs
【讨论】: