我已经实现了一个从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
,让窗口处理连续获取的数据。
答案 0 :(得分:3)
你的SourceFunction
run()方法应该是一个循环,它执行睡眠(或任何其他调度机制)来完成工作。
一种常见的模式是使用某种原子布尔值,在第一次调用run
时设置为true,并在调用cancel
时设置为false。
所以你在run
方法中有类似的东西:
while (running) {
// fetch some data, can be async
ctx.collect(data);
Thread.sleep(period);
}
你可以按照自己认为合适的方式执行该部分,但重要的是,在实际完成或取消之前,不要退出run
SourceFunction
方法。