我有一个flink映射,一旦数据通过流,该映射就会被激活。
即使没有数据通过,我也要呼叫该地图。
我将地图移到一个函数(无限函数调用)中,但是flink作业再也没有运行。而且,如果我将其添加到地图中,则只有在数据通过时,它才会被激活。
这个想法是,在无限循环中有1个映射,检查一些共享变量,并监视另一个监视fk队列的flink流,如果有数据进入过程,它将更改一个以某种方式影响无限循环的共享变量并继续。
如何调用无限循环映射并一起运行flink映射?
我尝试用随机数据创建一个CollectionMap来激活流并映射无限循环,但是即使映射中存在while(true)条件,也几乎立即退出
在IDE中,它可以正常工作,当我将其推入Flink.local时,它几乎立即退出,不会陷入循环状态
流1
val data_stream = env.addSource(myConsumer)
.map(x => {process(x)})
流2
val elements = List[String]("Start")
var read = env.fromElements(elements).map(x => ProcessData.infinteLoop())
如何调用无限循环映射并一起运行flink映射?
答案 0 :(得分:1)
您可以创建window
和trigger
,然后每x
秒调用地图。
您可以找到这里的文档:https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/windows.html
示例:
import org.apache.flink.streaming.api.windowing.assigners.GlobalWindows
import org.apache.flink.streaming.api.windowing.triggers.{CountTrigger, PurgingTrigger}
import org.apache.flink.streaming.api.windowing.windows.GlobalWindow
val data_stream = env.addSource(myConsumer)
.map(x => {process(x)})
val window: DataStream[String] = data_stream
.windowAll(GlobalWindows.create())
.trigger(PurgingTrigger.of(CountTrigger.of[GlobalWindow](5)))
.apply((w: GlobalWindow, x: Iterable[(Integer, String)], y: Collector[String]) => {})