Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡流延迟启动消费者关闭后的再平衡_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 卡夫卡流延迟启动消费者关闭后的再平衡

Java 卡夫卡流延迟启动消费者关闭后的再平衡,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,这是我之前提出的关于卡夫卡流中高延迟问题的后续问题;() 作为一个快速提醒,我们的无状态服务有非常严格的延迟要求,我们面临着太高的延迟问题(一些消息在生成后消耗超过10秒),特别是当消费者优雅地离开组时 经过进一步调查,我们发现,至少对于小型消费群体而言,重新平衡所需时间不到500毫秒。所以我们想,当移除一个消费者(>10秒)时,这巨大的延迟在哪里 我们意识到,这是消费者优雅退出和重新平衡之间的时间 以前的测试是使用Kafka和Kafka Streams应用程序中的所有默认配置执行的。 我们将配

这是我之前提出的关于卡夫卡流中高延迟问题的后续问题;()

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

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

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

以前的测试是使用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”不优雅地杀死消费者;结果是触发再平衡的时间完全相同

所以我们有一些问题: -我们预计,当消费者优雅地停止时,会立即触发再平衡,这是预期的行为吗?为什么在我们的测试中没有发生? -我们如何缩短消费者优雅退出和重新平衡触发之间的时间?权衡是什么?更多不必要的再平衡

关于更多上下文,我们的卡夫卡版本是1.1.0,在查看了找到的libs(例如Kafka/Kafka_2.11-1.1.0-cp1.jar)之后,我们安装了Confluent platform 4.1.0。在消费者方面,我们使用的是Kafka streams 2.1.0


谢谢大家!

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

为此,使用非公共配置。您可以通过以下方式覆盖配置:

props.put(“internal.leave.group.on.close”,true);//Streams的默认值为“false”`

谢谢你,马蒂亚斯!你知道为什么这是一个非公共配置吗?使用非公开配置是我们可以依赖的吗?有人担心它会公开。Cf.--如果您使用它,您应该在升级之前仔细检查配置是否仍然存在,如果不存在,可能会产生什么影响--因为它是非公共的,在发行说明中显然不会提到它。因此,与此和增量协作再平衡相结合,它将避免重新平衡分配的分区(包括重型状态存储备份分区)在反弹的pod上?我之所以问这个问题,是因为我看到在2.7.0 KStream应用程序中出现了一些重平衡,其中包含大量的状态存储。此外,我确实想知道这是否是因为这些是移动的备用副本…是的,我可以降低风险,但这也取决于您的配置。不过,您可能还希望签出静态组成员身份,这是因为这应该会有更大的帮助。