我目前正在运行一组拓扑,我想在运行时更改拓扑属性,如
- 更改线程数
- 将源主题添加到现有主题列表
- 添加水槽
是否可以在不停止kafka流的情况下在运行时更改属性。我的一个想法是停止卡夫卡流,然后加载这些配置并重新开始。但这似乎不是一个理想的解决方案。有人能提出更好的方法吗?
这取决于情况。更改实例的线程数很容易。你只需要close()
KafkaStreams
客户端,更改配置,创建一个新的客户端并重新启动它。大多数人会通过完全重新启动相应的JVM来完成这项工作。
添加源主题和汇点主题并不容易。特别是对于源主题,您需要停止所有实例,然后逐个重新启动它们,包括新的源主题。原因是,所使用的分区分配器假设所有实例都订阅了完全相同的主题。如果违反了这一假设,即,如果一些实例订阅了一个新主题,则新主题的那些分区可能会被分配给尚未更新的"旧"实例,这将导致崩溃,因为"老"实例不知道如何处理其未订阅的已分配分区。