在Apache Flink中,是否可以在运行时动态添加新数据流而无需重新启动作业?
据我了解,通常的Flink程序如下所示:
val env = StreamExecutionEnvironment.getExecutionEnvironment()
val text = env.socketTextStream(hostname, port, "\n")
val windowCounts = text.map...
env.execute("Socket Window WordCount")
在我的情况下,有可能,例如,启动新设备,因此必须处理另一个流。但是如何即时添加这个新流?
答案 0 :(得分:1)
无法在运行时向Flink程序添加新流。
解决此问题的方法是拥有一个包含所有传入事件的流(例如,您将摄取所有单个流的Kafka主题)。事件应该有一个密钥,用于识别它们来自哪个流。然后,可以将此密钥用于keyBy
流并应用每个密钥处理逻辑。
如果你想从多个套接字读取,那么你可以编写自己的SourceFunction
,从某些输入(例如从固定套接字)读取端口以打开套接字。然后在内部你可以保持所有这些套接字打开并以循环方式从它们中读取。