我正在使用新的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");
高负载某些时刻的请求平均响应时间是4秒,但我没有收到任何超时错误。
有人知道这个超时是如何计算的,它何时开始计算以及何时结束?有没有办法配置从生成器的send方法被调用的那一刻开始的超时?
答案 0 :(得分:7)
新的timeout.ms
属性与生产者的ack
配置一起使用。例如,考虑以下情况
ack = all
timeout.ms = 3000
在这种情况下,ack = all
表示领导者不会响应,直到收到完整的同步副本(ISR)确认,并且获得此确认的最长等待时间为3000 ms
。如果它在给定时间内没有收到预期的确认数,则会返回错误。
另请注意,此属性不考虑网络延迟。
从文档页面:
配置控制服务器等待来自关注者的确认以满足生产者使用acks配置指定的确认要求的最长时间。如果超时结束时未满足请求的确认数,则将返回错误。此超时是在服务器端测量的,不包括请求的网络延迟。
因此,如果领导者无法回复(在将记录写入其自己的日志而不等待完整的情况下)ack=1
(我不是100%确定这一点并且可以接受任何更正)所有粉丝的确认)在50ms内应该抛出错误。
答案 1 :(得分:1)
在新的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
属性定义。