如何以避免从其更改日志主题重新创建状态存储的方式重新启动 KafkaStreams 消费者组
How to restart a KafkaStreams consumer group in a way that avoids recreating the state store from its changelog topic
在具有多个节点的部署中托管具有持久状态存储的 KafkaStreams (0.10.2.1) 实例,在避免重播整个状态存储更改日志主题的同时重新启动所有节点的推荐方法是什么?这必须在不更改 application.id 的情况下完成,因为我不想丢失状态存储中已有的数据。
我增加了 session.timeout.ms 以便在代理开始重新分配分区时所有节点都将启动,并且避免调用 KafkaStreams.stop 以防止在我重新启动所有节点时进行不必要的分区重新分配部署期间。
当代理开始重新分配分区时(在所有节点都启动之后),KafkaStreams 实例似乎正在重播整个状态存储更改日志主题,而不是从它们在重启前到达的偏移量中获取.
我想为了从最新的偏移量中挑选必须满足这些条件:
1) 分区将分配给包含其匹配持久存储的实例。
2) KafkaStreams 将从更新日志主题中的最新偏移量中获取,而不是重播整个更新日志。
有办法实现吗?
Kafka Streams 写入用于跟踪状态存储健康状况的本地状态和本地检查点文件。如果检查点文件丢失,则表明状态存储已损坏,因此 Kafka Streams 会清除该存储并通过重播状态存储的变更日志主题从头开始重新创建它。
那些本地检查点文件仅在 0.10.2.1
中干净关闭时写入。因此,由于您不调用 KafakStreams#close()
,您不会得到干净的关闭(这也可能会破坏您的状态,因为某些写入可能没有刷新到磁盘)。
在 Kafka 0.11.0.x
中,本地检查点文件在每次提交时写入,允许更积极地重用本地状态存储。
I would highly recommend to upgrade to 0.11.0.1 or 1.0.0 (will be released shortly) -- it contains many improvements with regard to state store handling and rebalancing. Note, you don't need to upgrade your brokers for this, as Kafka Streams is compatible with older brokers, too (cf. https://docs.confluent.io/current/streams/upgrade-guide.html#compatibility)
在具有多个节点的部署中托管具有持久状态存储的 KafkaStreams (0.10.2.1) 实例,在避免重播整个状态存储更改日志主题的同时重新启动所有节点的推荐方法是什么?这必须在不更改 application.id 的情况下完成,因为我不想丢失状态存储中已有的数据。
我增加了 session.timeout.ms 以便在代理开始重新分配分区时所有节点都将启动,并且避免调用 KafkaStreams.stop 以防止在我重新启动所有节点时进行不必要的分区重新分配部署期间。
当代理开始重新分配分区时(在所有节点都启动之后),KafkaStreams 实例似乎正在重播整个状态存储更改日志主题,而不是从它们在重启前到达的偏移量中获取.
我想为了从最新的偏移量中挑选必须满足这些条件:
1) 分区将分配给包含其匹配持久存储的实例。
2) KafkaStreams 将从更新日志主题中的最新偏移量中获取,而不是重播整个更新日志。
有办法实现吗?
Kafka Streams 写入用于跟踪状态存储健康状况的本地状态和本地检查点文件。如果检查点文件丢失,则表明状态存储已损坏,因此 Kafka Streams 会清除该存储并通过重播状态存储的变更日志主题从头开始重新创建它。
那些本地检查点文件仅在 0.10.2.1
中干净关闭时写入。因此,由于您不调用 KafakStreams#close()
,您不会得到干净的关闭(这也可能会破坏您的状态,因为某些写入可能没有刷新到磁盘)。
在 Kafka 0.11.0.x
中,本地检查点文件在每次提交时写入,允许更积极地重用本地状态存储。
I would highly recommend to upgrade to 0.11.0.1 or 1.0.0 (will be released shortly) -- it contains many improvements with regard to state store handling and rebalancing. Note, you don't need to upgrade your brokers for this, as Kafka Streams is compatible with older brokers, too (cf. https://docs.confluent.io/current/streams/upgrade-guide.html#compatibility)