环球时讯:聊聊Flink必知必会(四)
概述
Flink Streaming API借鉴了谷歌数据流模型(Google Data Flow Model),它的流API支持不同的时间概念。Flink明确支持以下3个不同的时间概念。
(资料图)
Flink明确支持以下3个不同的时间概念。(1)事件时间:事件发生的时间,由产生(或存储)事件的设备记录。
(2)接入时间:Flink在接入事件时记录的时间戳。
(3)处理时间:管道中特定操作符处理事件的时间。
支持事件时间的流处理器需要一种方法来度量事件时间的进度。在Flink中测量事件时间进展的机制是水印(watermark)。水印是一种特殊类型的事件,是告诉系统事件时间进度的一种方式。水印流是数据流的一部分,并带有时间戳t。水印(t)声明事件时间已经到达该流中的时间t,这意味着时间戳t′≤t(时间戳更早或等于水印的事件)的流中不应该有更多的元素。
Flink中水印的处理
水印的时间戳
时间t的水印标记了数据流中的一个位置,并断言此时的流在时间t之前已经完成。为了执行基于事件时间的事件处理,Flink需要知道与每个事件相关联的时间,它还需要包含水印的流。水印就是系统事件时间的时钟。水印触发是基于事件时间的计时器的触发。
事件流的类型有两种,一个是顺序的,一个是无序的。先看顺序场景下,水印的排列。
对于无序流,水印是至关重要的,其中事件不是按照它们的时间戳排序的。
例如,当操作符接收到w(11)这条水印时,可以认为时间戳小于或等于11的数据已经到达,此时可以触发计算。同样,当接收到w(17)这条水印时,可以认为时间戳小于或等于17的数据已经到达,此时可以触发计算。
可以看出,水印的时间戳是单调递增的,时间戳为t的水印意味着所有后续记录的时间戳将大于t。一般来讲,水印是一种声明,在流中的那个点之前,即在某个时间戳之前的所有事件都应该已经到达。
水印是在源函数处或直接在源函数之后生成的。源函数的每个并行子任务通常可以独立地生成水印。这些水印定义了特定并行源处的事件时间。
水印的生成
Flink提供了用于处理事件时间、时间戳和水印的API。
为了处理事件时间,Flink流程序需要知道事件的时间戳,这意味着流中的每个元素都需要分配其事件时间戳。这通常是通过TimestampAssigner从元素中的某个字段访问/提取时间戳实现的。
Flink提供了两种方式创建水印。
1.使用WatermarkStrategy上的静态辅助方法实现公共水印策略:
2.实现WatermarkStrategy接口,自定义TimestampAssigner与WatermarkGenerator捆绑在一起:
@Publicpublic interface WatermarkStrategy extends TimestampAssignerSupplier, WatermarkGeneratorSupplier { @Override WatermarkGenerator createWatermarkGenerator(WatermarkGeneratorSupplier.Context context); @Override default TimestampAssigner createTimestampAssigner( TimestampAssignerSupplier.Context context) { return new RecordTimestampAssigner<>(); } @Experimental default WatermarkAlignmentParams getAlignmentParameters() { return WatermarkAlignmentParams.WATERMARK_ALIGNMENT_DISABLED; } default WatermarkStrategy withTimestampAssigner( TimestampAssignerSupplier timestampAssigner) { checkNotNull(timestampAssigner, "timestampAssigner"); return new WatermarkStrategyWithTimestampAssigner<>(this, timestampAssigner); } default WatermarkStrategy withTimestampAssigner( SerializableTimestampAssigner timestampAssigner) { checkNotNull(timestampAssigner, "timestampAssigner"); return new WatermarkStrategyWithTimestampAssigner<>( this, TimestampAssignerSupplier.of(timestampAssigner)); } default WatermarkStrategy withIdleness(Duration idleTimeout) { checkNotNull(idleTimeout, "idleTimeout"); checkArgument( !(idleTimeout.isZero() || idleTimeout.isNegative()), "idleTimeout must be greater than zero"); return new WatermarkStrategyWithIdleness<>(this, idleTimeout); } @Experimental default WatermarkStrategy withWatermarkAlignment( String watermarkGroup, Duration maxAllowedWatermarkDrift) { return withWatermarkAlignment( watermarkGroup, maxAllowedWatermarkDrift, WatermarksWithWatermarkAlignment.DEFAULT_UPDATE_INTERVAL); } @Experimental default WatermarkStrategy withWatermarkAlignment( String watermarkGroup, Duration maxAllowedWatermarkDrift, Duration updateInterval) { return new WatermarksWithWatermarkAlignment( this, watermarkGroup, maxAllowedWatermarkDrift, updateInterval); } static WatermarkStrategy forMonotonousTimestamps() { return (ctx) -> new AscendingTimestampsWatermarks<>(); } static WatermarkStrategy forBoundedOutOfOrderness(Duration maxOutOfOrderness) { return (ctx) -> new BoundedOutOfOrdernessWatermarks<>(maxOutOfOrderness); } static WatermarkStrategy forGenerator(WatermarkGeneratorSupplier generatorSupplier) { return generatorSupplier::createWatermarkGenerator; } static WatermarkStrategy noWatermarks() { return (ctx) -> new NoWatermarksGenerator<>(); }}
这里面提供了很多静态的方法和带有缺省实现的方法,只有一个方法是非default和没有缺省实现的,就是createWatermarkGenerator
方法。
所以默认情况下,我们只需要实现这个方法就行了,这个方法主要是返回一个 WatermarkGenerator。
@Publicpublic interface WatermarkGenerator {/** * Called for every event, allows the watermark generator to examine and remember the * event timestamps, or to emit a watermark based on the event itself. */void onEvent(T event, long eventTimestamp, WatermarkOutput output);/** * Called periodically, and might emit a new watermark, or not. * * The interval in which this method is called and Watermarks are generated * depends on {@link ExecutionConfig#getAutoWatermarkInterval()}. */void onPeriodicEmit(WatermarkOutput output);}
这个方法简单明了,主要是有两个方法:
onEvent :每个元素都会调用这个方法,如果我们想依赖每个元素生成一个水印,然后发射到下游(可选,就是看是否用output来收集水印),我们可以实现这个方法.
onPeriodicEmit : 如果数据量比较大的时候,我们每条数据都生成一个水印的话,会影响性能,所以这里还有一个周期性生成水印的方法。这个水印的生成周期可以这样设置:
env.getConfig().setAutoWatermarkInterval(5000L)
标签:
推荐文章
- 环球时讯:聊聊Flink必知必会(四)
- 青海油田68年累计生产油气当量超过1.5亿吨-环球微头条
- 影视行业拥抱人工智能,谋求营收、估值双回升
- 又一子公司递表创业板!三年募资超380亿,南航或将手握3家上市公司 全球时快讯
- 因车辆起火风险 法拉利召回188辆296 GTB汽车
- 进出口银行与农业银行签署战略合作协议
- 首个干细胞合成人类胚胎样结构诞生 有望打开早期胚胎发育的“黑匣子”
- 新股消息 | 药师帮(09885)IPO招股已获3倍覆盖,近期最热
- 三星Z Fold5真机曝光 全新设计
- “长虹”品牌价值首次突破2000亿元
- 报道:小鹏汽车法务部:掌握数位造谣人身份 现已启动司法维权程序
- 收评:创指高开高走收涨1.44% 通信设备板块领涨
- 襄阳女教师热心帮助遇困老人 老人送锦旗致谢 焦点资讯
- 入门不到二十万!极狐阿尔法S和阿尔法T森林版上市_环球最资讯
- 感恩教师节祝福语_感恩教师节高级祝福语
- 海关总署恢复、批准20家肉类企业在华注册_全球信息
- 每日视讯:未成年人陪玩该不该管?该如何管?
- 依米康亮相IDCE数据中心展 献智高效低碳数据中心实践-焦点快报
- 滨州城建投资集团7亿元中期票据将于7月13日付息 利率3.58%
- 经纪人:若奥-马里奥回意甲?他不会考虑,他对意大利没有好回忆_天天头条
- 被限消后,贾跃亭最新发声:FF后续不用烧太多钱,就能快速成功!
- 西和县长道镇大蒜收获忙-环球短讯
- 白内障手术多少钱 报销多少_白内障手术多少钱 观察
- 爪哇语符号输入法_爪哇语符号|全球新要闻
- 枫林大道_关于枫林大道概略_当前视点
- 天天速读:庄子与惠子游于横梁之上(庄子与惠子游于翻译)
- 天天热消息:6月16日午间收盘快讯
- 蛇的简笔画图片大全可爱简单(蛇的简笔画图片大全)
- 察民情,解民忧!苏州工业园区唯亭街道红管服务进社区,筑牢群众“连心桥” 速读
- 中国铁物:6月15日融资买入902.18万元,融资融券余额2.43亿元
- 山寨版林俊杰涉嫌欺诈事件始末_范一贤是谁个人资料介绍 热推荐
- 菲律宾马荣火山活动持续 超2万人撤离
- 小学财务内部审计工作计划百度文库(财务内部审计的内容是什么)
- 汶莱皇家航空(关于汶莱皇家航空的基本详情介绍) 世界新动态
- 洗衣服时,别再用洗衣粉了!教你洗衣服又快又干净的方法 每日短讯
- 记得多喝水!世界最大肾结石出现:13厘米长、一斤半重 全球滚动
- 【天天速看料】Adobe第二财季净利润12.95亿美元,同比增长10%
- 皮海洲:一人管25只基金 基金经理“一拖多”说明了什么?_世界播报
- 2023年吉林高考志愿填报入口公布
- 生益科技:公司覆铜板是全系列布局 广泛应用于服务器、显卡、车载算力等领域
- 商务部:中国与洪都拉斯经济互补性强 争取尽早开启商谈自贸协定进程
- 华为携手神州信息发布金融分布式新核心解决方案3.0,助力金融数字化
- 怎么将图片设置为ppt背景图片(PPT背景图片设置怎么好看呢)
- 俄外交部就俄运输机遭扣押一事紧急召见加拿大驻俄外交官
- 向全球发起邀约!首届“浦东航运周”开幕
- ChatGPT 标注指南来了!数据是关键
- 守住钱袋子 护好幸福家—辰溪农商银行开展防范非法集资宣传活动|环球头条
- 让阅读无处不在,从化“流动书屋”奔走乡间三十年受追捧
- 天津滨海农商行2.86亿股股权再流拍 业绩大涨缘何股权转让频遇冷|全球播资讯
- 预测三亚一中录取分数线2023 世界微资讯
- 最资讯丨6月好的终身增额寿险排名,回本快且收益高的是哪款?
- 世界献血者日丨三分钟、200毫升,一座城市的温暖相助
- 为制造业装上更强“大脑”!重庆数字化推动制造业向高端迈进_每日精选
- 全球观察:国家统计局:1-5月全国房地产开发投资45701亿元 同比下降7.2%
- Vision Pro会收到色色短信吗?
- 焦点信息:趁“热”使用!高温天气防中暑这样做
- 全球通讯!《基督山伯爵》启幕大剧院国际戏剧季
- 【天天快播报】深圳氢能产业活力无限 拥有超140家相关机构
- 假面骑士极狐:邪魔徒无法完全消除,是超越创世之力的存在
- 债基年内分红560亿元,成基金分红主力军
- 环球短讯!扣押小米48亿后 印度提出新条件:中国手机厂商CEO等高管必须是印度人!
- 无线打印机怎么设置ip地址_无线打印机怎么设置 时快讯
- 今日快看!保定汽车违章查询电话-保定汽车违章查询
- 全球简讯:不锈钢加热器质量推荐_不锈钢加热器
- 要闻:席慕容经典语录及出处(席慕容经典语录)
- 关节疼吃什么药可以缓解_关节疼吃什么药|当前快播
- 特斯拉电动汽车价格表_保时捷有纯电动汽车吗
- 互动| 得润电子:公司具有光模块连接器相关产品
- 豆腐五花肉香菇蒸法?_环球实时
- 今日热议:关于猴痘,这些知识请了解!
- 用上宁德时代麒麟电池!新款哪吒S曝光:能跑1075km
- 智能家居的智能晨间日常自动化
- 6月14日退市泽达(688555)龙虎榜数据 实时焦点
- 世界速读:指数延续震荡整理 两市重回万亿!
- 焦点短讯!Mysteel日报:长沙中厚板小幅上涨 整日成交一般
- 山西严打农村赌博违法犯罪 侦破刑事案件265起_每日速讯
- 奇次根号下可以为负数吗_根号下可以为负数吗
- 宏图大道站(关于宏图大道站介绍)
- 以产业需求为导向 我国将增约200所高职院校和应用型本科院校
- 2023属猪女全年运势(2019年属猪的全年运势)
- 世界观点:康宝莱营养俱乐部(关于康宝莱营养俱乐部的基本详情介绍)
- 布莱顿将向切尔西提交对科尔维尔的4000万英镑报价|今日聚焦
- 亲民实用的国民MPV 试驾一汽奔腾M9 每日聚焦
- 高温来袭 全国总工会部署做好2023年职工防暑降温工作 天天播资讯
- 焦点热门:苹果MR现世,VR回光返照?
- 世界微速讯:研究证明全世界谷子均来自中国
- 焦点快播:从圣罗莎叛逆小子到红军未来中场关键,麦卡利斯特为何光芒耀眼
- 搜狗_揑 环球热议
- “密件风波”听证会结束 特朗普出庭全程沉默
- 高粱制种栽培技术_高粱人工种植方法 高粱如何人工种植-世界热讯
- judge的读音视频_judge的读音
- 手机软件:风行视频app如何一键清理缓存?-全球新要闻
- 自己补漆教程是补漆笔好还是喷漆(补漆笔好还是自喷漆好)
- 高州市气象台发布暴雨橙色预警【II级/严重】【2023-06-14】|天天微动态
X 关闭
资讯
X 关闭