簡體   English   中英

Apache Flink:如何實現SourceFunction?

[英]Apache Flink: How to implement a SourceFunction?

我已經實現了一個從URL中獲取數據(String)的SourceFunction 然后我正在執行該數據的keyBy()並應用一個10分鍾的窗口。 現在SourceFunction只被調用一次,窗口對數據進行10分鍾的操作。 如何從SourceFunction連續獲取數據?

DataStream<String> = env.addSource(MySource())   // This runs only once
                        .keyBy(some keyby function)
                        .window(for 10 minutes)  // This runs for 10 minutes for the data obtained once by Source function
                        .process(some process function)

我想在一定的時間間隔內重復運行SourceFunction ,讓窗口處理連續獲取的數據。

您的SourceFunction的run()方法應該是一個循環,它執行睡眠(或任何其他調度機制)來完成工作。

一種常見的模式是使用某種原子布爾值,在第一次調用run時將其設置為true,並在調用cancel時將其設置為false。

所以你在run方法中有這樣的東西:

while (running) {
   // fetch some data, can be async
   ctx.collect(data);
   Thread.sleep(period);
}

你可以按照自己認為合適的方式執行該部分,但重要的是,在實際完成或取消之前,不要退出SourceFunctionrun方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM