引用自Time 深度解析

Flink对多种时间语义的支持,是它的优势之一;Flink既支持Processing Time,又支持Event Time:

Processing Time 是来模拟我们真实世界的时间,其实就算是处理数据的节点本地时间也不一定就是完完全全的我们真实世界的时间,所以说它是用来模拟真实世界的时间。

而 Event Time 是数据世界的时间,就是我们要处理的数据流世界里面的时间。关于他们的获取方式,Process Time 是通过直接去调用本地机器的时间,而 Event Time 则是根据每一条处理记录所携带的时间戳来判定。

Watermark

Event Time 因为是绑定在每一条的记录上的,由于网络延迟、程序内部逻辑、或者其他一些分布式系统的原因,数据的时间可能会存在一定程度的乱序,比如上图的例子。

解决办法是在整个时间序列里插入一些类似于标志位的一些特殊的处理数据,这些特殊的处理数据叫做 watermark。一个 watermark 本质上就代表了这个 watermark 所包含的 timestamp 数值,表示以后到来的数据已经再也没有小于或等于这个时间的了。

Timestamp 分配和 Watermark 生成

对于用户来讲,可以通过DataStream.assignTimestampsAndWatermarks方法来生成event time和watermark;示例:

DataStream<MyEvent> stream = ...DataStream<MyEvent> withTimestampsAndWatermarks =stream.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<MyEvent>(Time.seconds(10)) {@Overridepublic long extractTimestamp(MyEvent element) {return element.getCreationTime();}
});

注意BoundedOutOfOrdernessTimestampExtractor有一个参数Time.seconds(10),这个配置和数据的“乱序”程度有关;设置得太小,可能会导致数据丢失;设置得太大,可能会导致状态(比如窗口)迟迟没有计算,在内存中积压。

Timer Service

Timer Service可以基于Processing Time或者Event Time设置定时器,可以用于消息的延迟处理/状态的定时清理等操作。

使用条件:

  1. Keyed Stream
  2. 使用ProcessFunction

示例:stream.keyBy(...).process(new MyProcessFunction())

CountWithTimeoutFunction

public class CountWithTimeoutFunction extends KeyedProcessFunction<Tuple, Tuple2<String, String>, Tuple2<String, Long>> {...@Overridepublic void processElement(Tuple2<String, String> value, Context ctx, Collector<Tuple2<String, Long>> out) throws Exception {...// set the state's timestamp to the record's assigned event time timestampcurrent.lastModified = ctx.timestamp();// schedule the next timer 60 seconds from the current event timectx.timerService().registerEventTimeTimer(current.lastModified + 60000);}...
}

注意

  1. 注册的Timer是占用内存的,如果注册太多Timer会导致内存问题;
  2. 同一个时间反复注册Timer没有影响(不会重复);

为了避免内存问题,推荐对Timer进行“时间合并“:

long coalescedTime = ((ctx.timestamp() + timeout) / 1000) * 1000;
ctx.timerService().registerProcessingTimeTimer(coalescedTime);

Flink作业开发清单(5)——Time/时间相关推荐

  1. 如何处理分析Flink作业反压的问题?

    本文分享自华为云社区<一个Flink作业反压的问题分析>,原文作者:Yunz Bao . 反压(backpressure)是实时计算应用开发中,特别是流式计算中,十分常见的问题.反压意味着 ...

  2. 基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

    摘要:搭建这个平台最费时耗力的事莫过于对批.流作业的编排,作业组织管理以及任务调度了.但是这一切,用DAYU的数据开发功能几个任务可通通搞定. 大多数电商类企业都会搭建自己的个性化推荐系统,利用自己拥 ...

  3. Flink从入门到精通100篇(十二)-如何分析和定位 Flink 作业 OOM 问题?

    前言 生产环境,我们的 Flink 作业偶尔会出现 heap OOM,那么当出现这种情况我们会怎么办?通常来说会通过 jmap 命令去将作业的 heap dump 一份文件出来,可是 jmap 导出的 ...

  4. flink source 同步_如何生成 Flink 作业的交互式火焰图?

    原标题:如何生成 Flink 作业的交互式火焰图? 简介:Flink 是目前最流行的大数据及流式计算框架之一,用户可以使用 Java/Scala/Python 的 DataStream 接口或者标准 ...

  5. 如何生成 Flink 作业的交互式火焰图?

    简介: Flink 是目前最流行的大数据及流式计算框架之一,用户可以使用 Java/Scala/Python 的 DataStream 接口或者标准 SQL 语言来快速实现一个分布式高可用的流式应用, ...

  6. 【flink】flink作业超额启动多个taskManager k8s

    1.概述 flink作业按照配置应该启动4个taskManager,但是现在发现一个作业启动了十几个taskManager,jobManager只监控到3个taskManager,导致集群资源耗尽,启 ...

  7. 本地提交到yarn_Yarn运行Flink作业 0449

    Yarn运行Flink作业 link支持多种部署模式:本地.集群(Standalone/YARN).云(GCE/EC2).Standalone部署模式与Spark类似,这里,我们看一下Flink on ...

  8. Blink/Flink作业 性能优化配置及原理

    高性能作业指南 本文通过代码和一些配置信息来优化blink/flink作业的性能. 共分为几部分: 1.group aggregate优化: 开启minibatch,开启localglobal,开启p ...

  9. 零基础学python需要多久-零基础学习Python开发需要多长时间?

    原标题:零基础学习Python开发需要多长时间? Python开发技术目前可谓是互联网行业编程界的新宠,不少零基础想要进入IT行业的人员都纷纷加入学习Python开发.零基础学习Python开发技术需 ...

最新文章

  1. 一、MySql优化的基础介绍
  2. STM32 CAN过滤器
  3. java customerservlet_顾客管理系统java+servlet
  4. [Leedcode][JAVA][第33题][搜索旋转排序数组]
  5. Nodejs 中的Get、Post
  6. Powershell访问数组
  7. 微信小程序头部导航栏自定义
  8. echarts 不显示标题_图标echarts使用
  9. 麻省理工学院推出数据美国大数据可视化工具
  10. Windows核心编程_异型窗口(续)
  11. 科研_研究生学术论文写作方法
  12. 【D3 API 中文手册】
  13. mysql监控工具_详解MySQL监控工具 mysql-monitor
  14. JS Enter键实现Tab键功能,回车键实现tab功能
  15. 阿里通信携手联通MWC演示“智选加速” 预演5G垂直应用
  16. 服务器提交任务和直接运行,linux下任务提交以及如何后台运行任务
  17. 访问页面转圈圈,怎么分析
  18. 怎么写竞品分析报告(思路):
  19. STM32闭环步进电机驱动器方案,原理图,源码,PCB
  20. EditPlus中文版+英文版+注册码下载

热门文章

  1. 高斯分布、复高斯分布、t分布、卡方分布、Wishart分布
  2. 小程序模仿微信聊天界面
  3. 集装箱船受压,中国货源网没有达到预期
  4. 三国志11原版win11成功运行心得
  5. ​6.29黄金原油走势分析操作建议空头强势下跌美盘如何布局
  6. 如何使Mac版本的git升级至最新版
  7. 区块链金融公司 Figure 将与美国顶级抵押贷款机构 Homebridge 合并
  8. 为什么insert操作会把整张表都锁住呢?
  9. 合理设置 HashMap 初始值大小
  10. JavaScript判断数据类型有几种方法,以及它们的区别