当前位置: 首页 > news >正文

Flink 支持三种时间语义

在 Apache Flink 中,时间在流处理中是一个重要的概念,而时间语义则用于定义事件发生的时间。Flink 支持三种时间语义,分别是:

  1. Processing Time(处理时间):
    • 以机器的系统时间为基准,每个事件被处理时的时间。
    • 这是最简单和最低开销的时间概念,因为不需要处理事件中的时间戳信息。
    • 处理时间应用程序通常对延迟敏感性不高。
// 示例:在 Flink 程序中使用处理时间
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<MyEvent> stream = env.addSource(new MyEventSource());
stream.keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());
  1. Event Time(事件时间):
    • 以事件的时间戳为基准,这是数据产生的实际时间。
    • 适用于乱序事件的场景,可以通过水位线(watermark)来处理迟到的事件。
    • 需要在数据中包含准确的时间戳信息。
// 示例:在 Flink 程序中使用事件时间
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<MyEvent> stream = env.addSource(new MyEventSource());
stream.assignTimestampsAndWatermarks(new MyTimestampExtractor()).keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());
  1. Ingestion Time(摄入时间):
    • 以事件进入 Flink 的时间为基准。
    • 通常是事件进入 Flink 的 Source 算子的时间。
    • 摄入时间介于处理时间和事件时间之间,适用于不需要关注数据源的实际时间戳,但又不想使用处理时间的场景。
// 示例:在 Flink 程序中使用摄入时间
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<MyEvent> stream = env.addSource(new MyEventSource());
stream.assignTimestampsAndWatermarks(new IngestionTimeExtractor()).keyBy(MyEvent::getKey).timeWindow(Time.seconds(10)).process(new MyProcessWindowFunction());

在 Flink 中,可以通过 StreamExecutionEnvironmentsetStreamTimeCharacteristic() 方法来设置时间语义。例如:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
http://www.lryc.cn/news/233197.html

相关文章:

  • 【大话Presto 】- 核心概念
  • 阎良区公益创投之“小飞机大梦想” 航模DIY主题活动
  • springBoot集成websocket实时消息推送
  • web:[BUUCTF 2018]Online Tool
  • 决策树的Boosting策略是什么
  • SQL Server中substring的用法
  • vscode设置latex
  • Django模板层
  • TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt
  • websocket详解
  • 可以免费使用的设计素材网站分享
  • workman使用手册1.0
  • Cesium深入浅出之自定义材质
  • Appium移动自动化测试--安装Appium
  • 前端学习笔记--ES6
  • 冥想第九百七十八天
  • Maven分离资源文件
  • Linux CentOS 8(MariaDB概述)
  • 简述几个我们对Redis 7开源社区所做的贡献
  • 产品卖点怎么写,如何打造卖点?
  • 跟李沐学AI-深度学习课程00-03【预告、课程安排、深度学习介绍、安装】
  • C++ this 指针 面试
  • 虚拟机上安装docker,并安装flink镜像
  • 【计算机网络】P1 计算机网络概述
  • 003 OpenCV filter2D
  • 轻松玩转华为MateX5分屏功能,乐趣层出不穷!
  • springboot引入redisson分布式锁及原理
  • Linux驱动开发 问题随笔
  • 三分/01分数规划
  • 大批卖家产品被下架!Temu又有新动作?