卡夫卡新生产者超时

时间:2015-05-26 20:21:24

标签: 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");

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

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

2 个答案:

答案 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属性定义。