[英]Partitions processing stuck until state store is rebuilt during rebalancing in Kafka Streams
假设我有一个有状态的 Kafka Streams 应用程序,它使用来自具有 3 个分区的主题的数据。 目前我有 2 个运行上述应用程序的实例。 让我们这样说: instance1
有分区part1
和part2
分配, instance2
有part3
。
所以现在我想添加新实例以完全利用并行化。
据我了解,一旦我启动一个新实例,就会发生重新平衡:分区part1
或part2
和相应的本地状态存储将从现有实例迁移到新添加的实例。 在这个例子中,让我们假设part1
在instance3
迁移。
同时,我意识到新实例instance3
在从变更日志主题恢复本地状态存储之前不会开始处理新数据,这可能需要很多时间。
从启动应用程序到恢复状态存储期间:
instance3
完成启动之前, part1
中的数据不会被处理和卡住?instance3
构建本地状态存储需要多长时间的方法是什么?instance1 - part2
, instance2 - part3
)?添加新实例时的重新平衡是在消费者组级别。 这意味着分配给消费者组的所有消费者的所有分区将被撤销,然后重新分配。 因此,所有分区 - 第 1 部分、第 2 部分和第 3 部分将被卡住,直到重新平衡完成。
现在估计停机时间有点棘手。 您可以在重新平衡触发器和消耗开始时发出事件 - 然后计算两个事件之间的时间差以获得停机时间的估计值。 如果您有一个简单的 Java 消费者日志,您还可以得到一个粗略的估计,因为所有相关日志(撤销的分区以及分配的分区)都已经存在。
重新平衡随着最近的发布而发展:
从带有KIP-429 的2.4.0 版开始
=> part2
和part3
没有卡住,继续加工
从带有KIP-441 的2.6.0 版开始
=> part1
继续在instance1
上处理,直到instance3
重建part1
的状态存储并准备移交其处理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.