Apache flink 弗林克没有';我什么也不输出 List lss=new ArrayList(); lss.添加(2); StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment(); 环境设置流时间特征(时间特征、摄取时间); 环境源集合(lss) .keyBy(x->“1”) .时间窗口(时间秒(4),时间秒(1)) .减少((x,y)->3) .地图(x->“vcvv”) .print(); 环境执行(“xxx”);
我正在写一个flink演示来开始使用flink,我有几件事不明白:Apache flink 弗林克没有';我什么也不输出 List lss=new ArrayList(); lss.添加(2); StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment(); 环境设置流时间特征(时间特征、摄取时间); 环境源集合(lss) .keyBy(x->“1”) .时间窗口(时间秒(4),时间秒(1)) .减少((x,y)->3) .地图(x->“vcvv”) .print(); 环境执行(“xxx”);,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我正在写一个flink演示来开始使用flink,我有几件事不明白: 1、 如果我从TimeCharacteristic.IngestionTime更改为TimeCharacteristic.ProcessingTime,则flink不输出任何内容 2、 窗口长度为4秒,滑动长度为1秒,我希望输出之间的间隔为1秒。但是,我看到4个输出同时打印。这很可能是因为您使用了IngestionTime特性,这在内部类似于EventTime,区别在于时间戳和水印是由Flink自动生成的。这基本上意味着,无论何
1、 如果我从TimeCharacteristic.IngestionTime更改为TimeCharacteristic.ProcessingTime,则flink不输出任何内容
2、 窗口长度为4秒,滑动长度为1秒,我希望输出之间的间隔为1秒。但是,我看到4个输出同时打印。这很可能是因为您使用了
IngestionTime
特性,这在内部类似于EventTime
,区别在于时间戳和水印是由Flink自动生成的。这基本上意味着,无论何时处理所有元素,Flink都将生成水印Long.MAX_VALUE
,它将刷新所有结果并关闭窗口
对于ProcessingTime
,这种情况不会发生,因此您需要自行处理。我建议参考一下这本书
至于第二个问题,这不是windows的工作方式。根据所选的时间特征,windows仅按Flink接收元素的时间或其时间戳(EventTime)收集元素。窗口中的幻灯片仅显示了它们的重叠程度,请再次参考
List<Integer> lss = new ArrayList<>();
lss.add(2);
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
env.fromCollection(lss)
.keyBy(x-> "1")
.timeWindow(Time.seconds(4), Time.seconds(1))
.reduce((x,y)->3)
.map(x->"vcvv")
.print();
env.execute("xxx");