【发布时间】:2020-09-24 08:31:00
【问题描述】:
我正在阅读文档,对参数“max.in.flight.requests.per.connection”有点困惑
客户端在阻塞之前将在单个连接上发送的未确认请求的最大数量。请注意,如果此设置设置为大于 1 并且发送失败,则存在由于重试(即启用重试)而导致消息重新排序的风险。
短语“未确认的请求”是指每个生产者或每个连接或每个客户端?
【问题讨论】:
标签: apache-kafka confluent-platform
我正在阅读文档,对参数“max.in.flight.requests.per.connection”有点困惑
客户端在阻塞之前将在单个连接上发送的未确认请求的最大数量。请注意,如果此设置设置为大于 1 并且发送失败,则存在由于重试(即启用重试)而导致消息重新排序的风险。
短语“未确认的请求”是指每个生产者或每个连接或每个客户端?
【问题讨论】:
标签: apache-kafka confluent-platform
每个分区。 Kafka 内部可能会多路复用连接(例如,使用单个连接为由同一代理处理的不同主题/分区发送多个请求),或者每个分区有一个单独的连接,但这些是性能问题,大部分 em> 在客户内部处理。
retries 的文档提供了更多亮点(并阐明了每个分区)
设置大于零的值将导致客户端重新发送发送失败并可能出现暂时错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许重试而不将 max.in.flight.requests.per.connection 设置为 1 可能会改变记录的顺序,因为如果将两个批次发送到 单个分区,并且第一个失败并重试,但第二个成功,那么第二批中的记录可能会首先出现。另外请注意,如果 delivery.timeout.ms 配置的超时在成功确认之前首先到期,则在重试次数用完之前生产请求将失败。用户通常应该不设置此配置,而是使用 delivery.timeout.ms 来控制重试行为。
【讨论】:
connection 在这里,真正的意思是每个 broker。并且文档使用了关于分区的示例,只是为了让读者了解在处理重试时不将max.in.flight.requests.per.connection 设置为1 的含义。您应该重新访问并重新阅读文档。 @Nag 仅供参考