我使用的是Flink 1.14,对于下面的代码片段,如果我想打印结果,似乎TableResult#print和DataStream#print都可以使用,但我确实看到了它们之间的不同行为,TableResult#print每3分钟打印一次结果,这似乎与检查点间隔有关。而DataStream#print每10秒打印一次结果。我很好奇下面会发生什么?
StreamExecutionEnvironment env = ...;
env.setParallelism(1);
env.enableCheckpointing(3 * 60000);
StreamTableEnvironment tableEnv = ...;
// the mock source produces one message every 10 seconds
SingleOutputStreamOperator<Tuple3<Integer, String, Integer>> ds = ...;
Table table = tableEnv.fromDataStream(ds, schema);
// this prints every 3 minutes
tableEnv.createTemporaryView("foobar", table);
tableEnv.executeSql("select f0, f1, f2 from foobar").print();
// this prints every 10 seconds
//tableEnv.toDataStream(table).print();
//env.execute();
1条答案
按热度按时间wsxa1bj11#
而DataStream#print每10秒打印一次结果,我很想知道下面发生了什么?
这是因为
DataStream.print()
实际上将打印操作视为接收器:所以你会看到每10秒就有一个结果被写出来,因为你正在以相同的速率向流生成一个新消息,消息通过流,最终被写到接收器,接收器只是打印出标准输出。
TableResult#print每3分钟打印一次结果,这似乎与检查点间隔有关。
这一点您也是正确的,如果您看一下
TableResult.print()
,它与下面接口中定义的检查点间隔密切相关: