Kafka - max.in.flight.requests.per.connection 是每个生产者或会话?

Nag*_*Nag 3 apache-kafka confluent-platform

我正在浏览文档,对参数“max.in.flight.requests.per.connection”有点困惑

客户端在阻塞之前在单个连接上发送的未确认请求的最大数量。请注意,如果此设置设置为大于 1 并且存在发送失败的情况,则存在由于重试而导致消息重新排序的风险(即,如果启用了重试)。

短语“未确认的请求”是指每个生产者或每个连接或每个客户端?

Aug*_*sto 5

编辑

请参阅下面尤金的回答。我不确定这个答案是否错误,或者卡夫卡是否在答案之间的两年内改变了行为。

原答案

这是每个分区的。Kafka 内部可能会复用连接(例如,使用单个连接为由同一代理处理的不同主题/分区发送多个请求),或者每个分区都有一个单独的连接,但这些都是性能问题,主要在客户端内处理。

,的文档retries提供了更多信息(并澄清了每个分区)

设置大于零的值将导致客户端重新发送发送失败并可能出现暂时性错误的任何记录。请注意,此重试与客户端在收到错误后重新发送记录没有什么不同。允许重试而不将max.in.flight.requests.per.connection设置为 1 可能会更改记录的顺序,因为如果将两个批次发送到单个分区,并且第一个批次失败并重试,但第二个批次成功,则记录在第二批中可能会首先出现。另外请注意,如果在成功确认之前,delivery.timeout.ms 配置的超时首先到期,则在重试次数用完之前,生产请求将失败。用户通常应该更愿意不设置此配置,而是使用 Delivery.timeout.ms 来控制重试行为。