max.in.flight.requests.per.connection kafka 生产者配置

问题描述

我有一个关于 max.in.flight.requests.per.connection kafka 生产者配置的问题。 此配置是应用于每条消息还是批量发送给代理的所有消息?

例如,如果我的批大小为 16KB,每条消息的大小为 1 KB,那么批将有 16 条消息。

如果 max.in.flight.requests.per.connection 值为 1,那么生产者是否会从批次中发送一条消息并等待确认,然后再从批次中发送下一条消息?

producer 会发送该批次中的所有消息并等待确认后再发送下一个批次吗?

解决方法

max.in.flight.requests.per.connection (pipelining)

此属性在生产者 max.in.flight.requests.per.connection 属性上配置。 This property applies to the batch of messages not to individual messages.

max.in.flight.requests.per.connection=1 表示一次发送一批记录,等待代理没有收到响应。

客户端在阻塞前将在单个连接上发送的最大未确认请求数。如果此设置大于 1,则在生产者将分组批次发送给代理时使用流水线。

这提高了吞吐量,但如果发送失败,则存在由于重试(如果启用重试)而导致无序交付的风险。

另请注意,过多的流水线操作会降低吞吐量。