Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink ProcessWindowFunction#未调用进程_Apache Flink - Fatal编程技术网

Apache flink ProcessWindowFunction#未调用进程

Apache flink ProcessWindowFunction#未调用进程,apache-flink,Apache Flink,我有一个简单的代码,如下所示,当我在IDE中运行它时,控制台上没有打印任何内容,有人能帮我看一下吗?谢谢 import org.apache.flink.api.java.tuple.Tuple import org.apache.flink.streaming.api.scala._ import org.apache.flink.streaming.api.TimeCharacteristic import org.apache.flink.streaming.api.scala.Strea

我有一个简单的代码,如下所示,当我在IDE中运行它时,控制台上没有打印任何内容,有人能帮我看一下吗?谢谢

import org.apache.flink.api.java.tuple.Tuple
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.api.scala.function.ProcessWindowFunction
import org.apache.flink.streaming.api.windowing.time.Time
import org.apache.flink.streaming.api.windowing.windows.TimeWindow
import org.apache.flink.util.Collector

object WindowTest {

  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)
    val ds = env.fromElements(
      (1, "a"), (2, "b"), (3, "c"), (4, "e"), (5, "f"), (6, "g"), (7, "h"), (8, "g"), (1, "1a"), (2, "2b"), (3, "3c"), (4, "4e"), (5, "5f"), (6, "g"), (7, "h"), (8, "g")
    )
    val ds2 = ds.keyBy(0).timeWindow(Time.seconds(10))
      .process(new ProcessWindowFunction[(Int, String), String, Tuple, TimeWindow] {
        override def process(key: Tuple, context: Context, elements: Iterable[(Int, String)], out: Collector[String]): Unit = {
          val k = key.getField[Int](0)
          val w = context.window
          val start = w.getStart
          val end = w.getEnd
          val hc = context.window.hashCode()
          //NOT CALLED
          println(s"k=$k,start=$start, end=$end,hc=$hc")
        }
      })
    ds2.print() 
    env.execute()

    Thread.sleep(30 * 1000)


  }

}

ProcessWindowFunction从未被调用,因为窗口从未被触发。它从未被触发,因为它会在几毫秒(粗略地说)内运行到完成,所以它不太可能在系统时钟时间正好处于10秒边界的时刻运行,这是触发此处理时间窗口所必须发生的情况。

嗨,David,感谢您的解释,你能详细说明一下吗?我想不清楚的是,睡眠发生在Flink客户端(作业提交后),但不是在workers中执行的一部分。他们很快就完成了。