繁体   English   中英

Kafka-streams 延迟启动消费者正常关闭的重新平衡

[英]Kafka-streams delay to kick rebalancing on consumer graceful shutdown

这是对我之前发送的有关 Kafka Streams 中的高延迟问题的跟进; Kafka Streams 重新平衡了高吞吐量 kafka-streams 服务上的延迟峰值)。

快速提醒一下,我们的无状态服务有非常严格的延迟要求,我们面临着延迟过高的问题(一些消息在生成后消耗超过 10 秒),特别是当消费者优雅地离开组时。

经过进一步调查,我们发现至少对于小型消费群体而言,重新平衡所需的时间不到 500 毫秒。 所以我们想,当删除一个消费者(> 10s)时,这个巨大的延迟来自哪里?

我们意识到这是消费者优雅退出和重新平衡开始之间的时间。

之前的测试是在 Kafka 和 Kafka Streams 应用程序中使用所有默认配置执行的。 我们将配置更改为:

properties.put("max.poll.records", 50); // defaults to 1000 in kafkastreams
properties.put("auto.offset.reset", "latest"); // defaults to latest
properties.put("heartbeat.interval.ms", 1000);
properties.put("session.timeout.ms", 6000);
properties.put("group.initial.rebalance.delay.ms", 0);
properties.put("max.poll.interval.ms", 6000);

结果是重新平衡开始的时间下降到 5 秒多一点。

我们还测试了通过“kill -9”非优雅地杀死消费者; 结果是触发重新平衡的时间完全相同。

所以我们有一些问题: - 我们期望当消费者正常停止时,立即触发重新平衡,这应该是预期的行为吗? 为什么在我们的测试中没有发生? - 我们如何减少消费者正常退出和触发重新平衡之间的时间? 权衡是什么? 更多不需要的再平衡?

对于更多上下文,我们的 Kafka 版本是 1.1.0,在查看找到的 libs 之后,例如 kafka/kafka_2.11-1.1.0-cp1.jar,我们安装了 Confluent 平台 4.1.0。 在消费者方面,我们使用的是 Kafka-streams 2.1.0。

谢谢!

当实例正常关闭时,Kafka Streams 不会发送“离开组请求”——这是故意的。 目标是避免在实例被退回时进行昂贵的重新平衡(例如,如果一个应用程序升级;或者如果一个应用程序在 Kubernetes 环境中运行并且一个 POD 自动快速重启)。

为了实现这一点,使用了非公共配置。 您可以通过覆盖配置

props.put("internal.leave.group.on.close", true); // Streams' default is `false`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM