Kafka10.1 heartbeat.interval.ms、session.timeout.ms 和 max.poll.interval.ms
Kafka10.1 heartbeat.interval.ms, session.timeout.ms and max.poll.interval.ms
我正在使用 kafka 0.10.1.1 并混淆了以下 3 个属性。
heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms
heartbeat.interval.ms - 这是在 0.10.1 中添加的,它将在轮询之间发送心跳。
session.timeout.ms - 这是在没有请求 kafka 时开始重新平衡,并且在每次轮询时都会重置。
max.poll.interval.ms - 这是整个投票。
但是,kafka什么时候开始重新平衡?为什么我们需要这 3 个?它们的默认值是多少?
谢谢
假设我们谈论的是 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
:一个比较低的值,最好是session.timeout.ms
的1/3
只是让它们更清楚,心跳线程(以及在同一进程中调用 Poll
函数的用户线程)将每隔 "heartbeat.interval.ms" 次向协调器发送心跳,协调器将标记如果超过 "session.timeout.ms" 或 "max.poll.interval.ms".
,则用户线程中的消费者已死
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(),则认为消费者失败并且组将重新平衡以将分区重新分配给另一个成员
我正在使用 kafka 0.10.1.1 并混淆了以下 3 个属性。
heartbeat.interval.ms
session.timeout.ms
max.poll.interval.ms
heartbeat.interval.ms - 这是在 0.10.1 中添加的,它将在轮询之间发送心跳。 session.timeout.ms - 这是在没有请求 kafka 时开始重新平衡,并且在每次轮询时都会重置。 max.poll.interval.ms - 这是整个投票。
但是,kafka什么时候开始重新平衡?为什么我们需要这 3 个?它们的默认值是多少?
谢谢
假设我们谈论的是 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
:一个比较低的值,最好是session.timeout.ms
只是让它们更清楚,心跳线程(以及在同一进程中调用 Poll
函数的用户线程)将每隔 "heartbeat.interval.ms" 次向协调器发送心跳,协调器将标记如果超过 "session.timeout.ms" 或 "max.poll.interval.ms".
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(),则认为消费者失败并且组将重新平衡以将分区重新分配给另一个成员