布吉网站建设价格,湘潭网站建设开发,网站建设数据库实训体会,如何查看网站用什么代码做的在 Apache Flink 中#xff0c;时间在流处理中是一个重要的概念#xff0c;而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义#xff0c;分别是#xff1a;
Processing Time#xff08;处理时间#xff09;#xff1a; 以机器的系统时间为基准#xff0c;…在 Apache Flink 中时间在流处理中是一个重要的概念而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义分别是
Processing Time处理时间 以机器的系统时间为基准每个事件被处理时的时间。这是最简单和最低开销的时间概念因为不需要处理事件中的时间戳信息。处理时间应用程序通常对延迟敏感性不高。
// 示例在 Flink 程序中使用处理时间
StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamMyEvent stream env.addSource(new MyEventSource());
stream.keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());Event Time事件时间 以事件的时间戳为基准这是数据产生的实际时间。适用于乱序事件的场景可以通过水位线watermark来处理迟到的事件。需要在数据中包含准确的时间戳信息。
// 示例在 Flink 程序中使用事件时间
StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamMyEvent stream env.addSource(new MyEventSource());
stream.assignTimestampsAndWatermarks(new MyTimestampExtractor()).keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());Ingestion Time摄入时间 以事件进入 Flink 的时间为基准。通常是事件进入 Flink 的 Source 算子的时间。摄入时间介于处理时间和事件时间之间适用于不需要关注数据源的实际时间戳但又不想使用处理时间的场景。
// 示例在 Flink 程序中使用摄入时间
StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamMyEvent stream env.addSource(new MyEventSource());
stream.assignTimestampsAndWatermarks(new IngestionTimeExtractor()).keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());在 Flink 中可以通过 StreamExecutionEnvironment 的 setStreamTimeCharacteristic() 方法来设置时间语义。例如
StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);