Kafka10.1 heartbeat.interval.ms,session.timeout.ms和max.poll.interval.ms

use*_*872 22 apache-kafka kafka-consumer-api

我正在使用kafka 0.10.1.1并与以下3个属性混淆.

heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms
Run Code Online (Sandbox Code Playgroud)

heartbeat.interval.ms - 这是在0.10.1中添加的,它将在民意调查之间发送心跳. session.timeout.ms - 这是为了在没有对kafka的请求时开始重新平衡,并在每次轮询时重置它. max.poll.interval.ms - 这是在整个民意调查中.

但是,卡夫卡何时开始重新平衡?为什么我们需要这3个?所有这些的默认值是什么?

谢谢

ame*_*tic 30

假设我们正在谈论Kafka 0.10.1.0或更高版本,其中每个消费者实例使用两个线程来运行.一个poll是调用它的用户线程; 另一个是心跳线程,专门处理心跳事物.

session.timeout.ms用于心跳线程.如果协调器在此时间间隔过去之前未能从消费者那里获得任何心跳,则会将消费者标记为失败并触发新一轮的重新平衡.

max.poll.interval.ms是用户线程.如果消息处理逻辑太重而不能花费大于此时间间隔的成本,则协调器明确让消费者离开该组并且还触发新一轮的重新平衡.

heartbeat.interval.ms用于让其他健康消费者更快地意识到再平衡.如果协调器触发重新平衡,则其他消费者只会通过接收包含REBALANCE_IN_PROGRESS异常的心跳响应来了解此情况.更快地发送心跳请求,消费者知道它需要更快地重新加入该组.

建议值::
session.timeout.ms相对较低的值,例如10秒.
max.poll.interval.ms:根据您的加工要求
heartbeat.interval.ms:相对较低的价值,更好的1/3session.timeout.ms

  • 无论如何,一旦达到session.timeout.ms,将触发重新平衡.比如,处理需要10秒,session.timeout.ms配置为8秒.由于处理需要10秒,因此将在10秒后调用下一个轮询方法,因此,当session.timeout.ms为8秒时,将启动重新平衡.即使我们将max.poll.interval.ms设置为60秒,它的用途是什么,因为重新平衡已经基于session.timeout.ms开始,它低于max.poll.interval.ms. (2认同)

Raj*_*Raj 5

session.timeout.ms 与 heartbeat.interval.ms 密切相关。

heartbeat.interval.ms控制 KafkaConsumer poll() 方法向组协调器发送心跳的频率,而session.timeout.ms控制消费者可以在不发送心跳的情况下持续多长时间。

因此,这两个属性通常一起修改。heatbeat.interval.ms 必须小于 session.timeout.ms,通常设置为超时值的三分之一。因此,如果 session.timeout.ms 为 3 秒,则 heartbeat.interval.ms 应为 1 秒。

max.poll.interval.ms - 使用消费者组管理时调用 poll() 之间的最大延迟。这对消费者在获取更多记录之前可以空闲的时间设置了上限。如果在此超时到期之前未调用 poll(),则消费者被视为失败,并且组将重新平衡,以便将分区重新分配给另一个成员