在Kafka使用者配置中将max.poll.interval.ms设置为大于request.timeout.ms有什么负面影响

时间:2019-02-22 07:53:42

标签: java apache-kafka kafka-consumer-api

根据Kafka文档;

  

新的Java Consumer现在支持从后台进行心跳   线。有一个新的配置max.poll.interval.ms   控制使用者前两次轮询调用之间的最长时间   将主动离开小组(默认为5分钟)。的价值   配置request.timeout.ms必须始终大于   max.poll.interval.ms,因为这是JoinGroup的最长时间   使用者重新平衡时,请求可能会在服务器上阻止,因此   我们将其默认值更改为刚好超过5分钟。

但是我无法理解将max.poll.interval.ms设置为大于request.timeout.ms的可能结果。

有人可以解释文档的这一部分吗?

  

因为这是JoinGroup请求可以阻止的最长时间   消费者重新平衡服务器时

现在我在我的项目中使用这些使用者参数:

kafka.consumer.session.timeout.ms=30000
kafka.consumer.heartbeat.interval.ms=10000
kafka.consumer.request.timeout.ms=31000
kafka.consumer.max.poll.interval.ms=259200000
kafka.consumer.max.partition.fetch.bytes=10242880

这些用法的负面影响是什么?

注意:我的kafka-clients版本是1.1.0

1 个答案:

答案 0 :(得分:0)

request.timeout.ms指定使用者将等待经纪人响应的时间。

max.poll.interval.ms用于几个用例。它首先指定了消费者与经纪人进行交互的频率(以确认其是否还活着),但是当消费者加入一个群组时也使用该行为。在这种情况下,它指示代理可以花多长时间来响应加入组请求。

因此,如果max.poll.interval.ms大于request.timeout.ms,您会发现经纪人的响应时间可能比消费者等待的时间长。这样消费者可以使请求超时。

在许多情况下,这两种配置的默认值都比较好。与其将它们覆盖为我在问题中看到的较大值,不如首先应该清楚地确定要更改默认行为的方式。