繁体   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