时间属性
Flink中有三种不同的时间概念来处理流数据
- 处理时间(Processing Time ):使用的是机器本身的时间作为标准
- 事件时间(Event Time): 需要处理的流中的数据发生的时间,以数据中带的时间戳为标准
- 摄取时间(Ingestion Time):*事件进入Flink的时间;在内部它的处理类似于事件时间。
Flink默认使用的是处理时间,如果想使用其他两个时间,可以在执行环境中指定
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime); // 默认
// env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);
// env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
处理时间
有两种方法定义处理时间
使用DataStream转换到Table时定义
注意到第二行后面的UserActionTime.proctime,它是在末尾附加一个逻辑字段UserActionTime.proctime,然后调用Table API时就在这个附加的字段上面定义时间窗口
DataStream<Tuple2<String, String>> stream = ...;
// 将附加的逻辑字段声明为处理时间属性
Table table = tEnv.fromDataStream(stream, "Username, Data, UserActionTime.proctime");
WindowedTable windowedTable = table.window(Tumble.over("10.minutes").on("UserActionTime").as("userActionWindow"));
使用TableSource定义
这种相当与直接指定一个source,然后转化成Table,注册到Table环境里面,需要实现StreamTableSource和DefinedProctimeAttribute这两个接口
// 使用processing属性定义表源
public class UserActionSource implements StreamTableSource<Row>, DefinedProctimeAttribute {
@Override
public TypeInformation<Row> getReturnType() {
String[] names

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



