2017-09-11 81 views
0

Apache Flink有可能在運行時動態添加新數據流而不重新啓動作業嗎?Apache Flink動態添加新流

據我瞭解,通常弗林克程序是這樣的:

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

env.execute("Socket Window WordCount") 

在我的情況是可能的,即如一個新的設備被啓動,因此必須處理另一個流。但是如何在即時添加這個新的流?

回答

1

無法在運行時將新流添加到Flink程序中。

解決這個問題的方法是創建一個包含所有傳入事件的流(例如,一個卡夫卡主題,您可以獲取所有單個流)。這些事件應該有一個關鍵字來標識他們來自哪個流。然後這個密鑰可用於流並應用每個密鑰處理邏輯。

如果你想從多個套接字讀取,那麼你可以編寫自己的SourceFunction,它從某些輸入(例如從一個固定套接字)讀取要打開套接字的端口。然後在內部,您可以將所有這些套接字打開並以循環方式從它們中讀取。