Apache flink Flink数据流排序程序不输出

Apache flink Flink数据流排序程序不输出,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我已经用Flink编写了一个小测试用例代码来对数据流进行排序。代码如下: public enum StreamSortTest{ ; 公共静态类MyProcessWindowFunction扩展了ProcessWindowFunction{ @凌驾 公共无效进程(整数键、上下文ctx、Iterable输入、收集器输出){ List sortedList=新建ArrayList(); 用于(长i:输入){ 分类列表。添加(i); } 收集.分类(分类列表); 分拣列表。forEach(l->out

我已经用Flink编写了一个小测试用例代码来对数据流进行排序。代码如下:

public enum StreamSortTest{
;
公共静态类MyProcessWindowFunction扩展了ProcessWindowFunction{
@凌驾
公共无效进程(整数键、上下文ctx、Iterable输入、收集器输出){
List sortedList=新建ArrayList();
用于(长i:输入){
分类列表。添加(i);
}
收集.分类(分类列表);
分拣列表。forEach(l->out.collect(l));
}
}
公共静态void main(最终字符串[]args)引发异常{
最终StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
环境署署长(2);
env.getConfig().setExecutionMode(ExecutionMode.PIPELINED);
DataStream probeSource=env.fromSequence(1500).setParallelism(2);
//范围根据数据值将流划分为两部分
数据流排序输出=
问题来源
.keyBy(x->{

如果(x我能看到的主要问题是,您使用的是基于
ProcessingTime
的窗口,输入数据非常短,肯定会在不到20秒的时间内处理。而Flink能够检测到输入的结束(如果是文件流或序列流,就像您的情况一样)并生成
Long.Max
水印,它将关闭所有打开的基于事件时间的窗口并启动所有基于事件时间的计时器。它对基于
ProcessingTime
的计算不起同样的作用,因此在您的情况下,您需要声明Flink实际工作的时间足够长,以便关闭窗口或引用custom触发器/不同的时间特性


还有一件事我不太确定,因为我从来没有这么多地使用过它,那就是你是否应该使用
executeAsync
进行本地执行,因为根据文档,这基本上是针对你不想等待作业结果的情况。

你在本地运行吗?@Dominik..是的。它在intellijYou中本地运行。你是对的。我换了一个套接字源,花了20多秒的时间输入数据。我可以看到结果。