【发布时间】:2018-11-05 06:37:44
【问题描述】:
我配置了事件时间处理并有一个带有CoFlatMapFunction 的连接流。我正在编写一个测试用例,但我看到 FlatMapFunction 没有使用事件时间顺序调用其方法 flatMap1() 和 flatMap2()。
一些伪代码需要澄清
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
env.setParallelism(1)
DataStream<Integer> evenStream = env.addSource(new SourceFunction<Integer>(){
public void run(SourceContext<Integer> ctxt){
for (i=0; i < 20; i=i+2){
ctxt.collectWithTimestamp(i, i);
ctxt.emitWatermark(i);
}
}
}
)
DataStream<Integer> oddStream = env.addSource(new SourceFunction<Integer>(){
public void run(SourceContext<Integer> ctxt){
for (i=1; i < 21; i=i+2){
ctxt.collectWithTimestamp(i, i); // Using i as timestamp and watermark for this sample code, but in real code, I am using using timestamp of real event
ctxt.emitWatermark(i);
}
}
}
)
evenStream
.connect(oddStream)
.flatMap(new CoFlatMapFunction<Integer, Integer, Integer>(){
public void flatMap1(Integer evenNumber, Collector<Integer> out){
System.out.println(evenNumber);
}
public void flatMap2(Integer oddNumber, Collector<Integer> out){
System.out.println(oddNumber);
}
}
);
当我运行它时,我希望它打印出来:
0,1,2,3,4....21
这是因为我交替设置偶数和奇数的时间戳。也就是说,0 的时间戳最低,其次是 1,其次是 2,以此类推。
但它首先打印所有偶数,然后是奇数。
总之,我希望按照我在事件中设置的时间戳顺序调用 flatMap1() 和 flatMap2()。但这并没有发生。
【问题讨论】:
标签: apache-flink flink-streaming