卡夫卡新生产者超时

Car*_*des 13 apache-kafka

我正在使用新的kafka生成器客户端并将timeout.ms属性设置为50毫秒.

以下是生产者使用的完整配置:

props.put("acks", "1");
props.put("buffer.memory", "33554432");
props.put("retries", "1");
props.put("batch.size", "16384");
props.put("client.id", "foo");
props.put("linger.ms", "0");
props.put("timeout.ms", "50");
Run Code Online (Sandbox Code Playgroud)

在高负载的某些时刻请求平均响应时间是4秒,但我没有得到任何超时错误.

有人知道这个超时是如何计算的,它何时开始计算以及何时结束?有没有办法配置从生成器的send方法被调用的那一刻开始的超时?

use*_*864 10

timeout.ms属性与ack生产者的配置一起使用.例如,考虑以下情况

ack = all
timeout.ms = 3000
Run Code Online (Sandbox Code Playgroud)

在这种情况下ack = all意味着领导者不会响应,直到它收到完整的同步副本(ISR)的确认,并且获得此确认的最长等待时间将是3000 ms.如果在给定时间内没有收到预期的确认数,则会返回错误.

另请注意,此属性不考虑网络延迟.

从doc页面:

该配置控制服务器等待来自关注者的确认以满足生产者使用acks配置指定的确认要求的最长时间.如果超时结束时未满足请求的确认数,则将返回错误.此超时是在服务器端测量的,不包括请求的网络延迟.

因此,ack=1如果领导者无法回应(在将记录写入其自己的日志而不等待所有关注者的完全确认后),那么在您的情况下(我不是100%确定这一点,并且可以接受任何更正)抛出一个错误.


Gui*_*goz 5

在新的 Kafka 2.0 Producer API 中,您可以使用以下属性之一:https : //kafka.apache.org/documentation/#producerconfigs

请参阅https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html 上的使用示例

超时现在由max.block.ms属性定义。