如何解决Flink中基于无界集合的流
是否可以在flink中创建无限制的集合流。就像在地图中一样,如果我们添加元素,则flink应该像在套接字流中一样进行处理。一旦读取了初始元素,它就不应退出。
解决方法
您可以创建一个永不终止的自定义SourceFunction
(直到调用cancel()
并在元素出现时发出元素。您希望有一个类似于以下内容的类:
class MyUnboundedSource extends RichParallelSourceFunction<MyType> {
...
private transient volatile boolean running;
...
@Override
public void run(SourceContext<MyType> ctx) throws Exception {
while (running) {
// Call some method that returns the next record,if available.
MyType record = getNextRecordOrNull();
if (record != null) {
ctx.collect(record);
} else {
Thread.sleep(NO_DATA_SLEEP_TIME());
}
}
}
@Override
public void cancel() {
running = false;
}
}
请注意,您需要担心保存状态,以便至少支持一次或恰好一次生成记录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。