问题描述
我有一个关于 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,则在生产者将分组批次发送给代理时使用流水线。
这提高了吞吐量,但如果发送失败,则存在由于重试(如果启用重试)而导致无序交付的风险。
另请注意,过多的流水线操作会降低吞吐量。