Apache flink ApacheFlink动态添加新流

Apache flink ApacheFlink动态添加新流,apache-flink,flink-streaming,Apache Flink,Flink Streaming,在ApacheFlink中,是否可以在运行时动态添加新数据流而不重新启动作业 据我所知,通常的Flink程序如下所示: val env = StreamExecutionEnvironment.getExecutionEnvironment() val text = env.socketTextStream(hostname, port, "\n") val windowCounts = text.map... env.execute("Socket Window WordCount") 在

在ApacheFlink中,是否可以在运行时动态添加新数据流而不重新启动作业

据我所知,通常的Flink程序如下所示:

val env = StreamExecutionEnvironment.getExecutionEnvironment()
val text = env.socketTextStream(hostname, port, "\n")
val windowCounts = text.map...

env.execute("Socket Window WordCount")

在我的情况下,可能会启动一个新设备,因此必须处理另一个流。但是如何动态添加新流呢?

在运行时无法将新流添加到Flink程序中

解决此问题的方法是创建一个包含所有传入事件的流,例如一个卡夫卡主题,您可以将所有单个流摄取到其中。事件应该有一个键,标识它们来自哪个流。然后,可以使用该密钥为流设置密钥,并应用每密钥处理逻辑

如果要从多个套接字读取数据,则可以编写自己的SourceFunction,从某些输入(例如,从固定套接字)读取用于打开套接字的端口。然后,您可以在内部保持所有这些套接字打开,并以循环方式读取它们