我当前正在运行一组拓扑,我想在运行时更改拓扑属性,例如
是否可以在运行时更改属性而不停止kafka流。我的一个想法是停止kafka流,然后加载这些配置并重新开始。但这似乎并不是解决此问题的理想方法。有人可以建议一种更好的方法吗?
答案 0 :(得分:1)
这取决于。更改实例的线程数很容易。您只需要close()
KafkaStreams
客户端,更改配置,创建新客户端并重新启动它。大多数人会通过完全重新启动相应的JVM来做到这一点。
添加源主题和接收器主题不太容易。特别是对于源主题,您需要停止所有实例,然后逐个重新启动它们,包括新的源主题。原因是,使用的分区分配器假定所有实例都订阅了完全相同的主题。如果违反了此假设,即,如果某些实例订阅了新主题,则新主题的那些分区可能会分配给尚未更新的“旧”实例,这将导致崩溃,因为“旧”实例不知道如何处理未订阅的分配分区。