是否可以在需要时调用Flink Map(在输入流上未激活)

时间:2019-05-07 10:57:22

标签: scala apache-flink flink-streaming

我有一个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映射?

1 个答案:

答案 0 :(得分:1)

您可以创建windowtrigger,然后每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]) => {})