前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flink实战之解决金融数据聚合问题一

flink实战之解决金融数据聚合问题一

作者头像
山行AI
发布2019-06-28 11:46:41
2K0
发布2019-06-28 11:46:41
举报
文章被收录于专栏:山行AI

时间模型

Flink提供了三种时间模型,EventTime、IngestionTime、WindowProcessingTime如下图:

EventTime:

EventTime是事件在现实世界中发生的时间,ProcessingTime是Flink系统处理该事件的时间。事件时间是每条事件在它产生的时候记录的时间,该时间记录在事件中,在处理的时候可以被提取出来。小时的时间窗处理将会包含事件时间在该小时内的所有事件,而忽略事件到达的时间和到达的顺序。事件时间处理通常存在一定的延时,因此自然的需要为延时和无序的事件等待一段时间。因此,使用事件时间编程通常需要与处理时间相结合。

IngestionTime:

摄入时间是事件进入flink的时间,在source operator中,每个事件拿到当前时间作为时间戳,后续的时间窗口基于该时间。

摄入时间在概念上处于事件时间和处理时间之间,与处理时间相比稍微昂贵一点,但是能过够给出更多可预测的结果。因为摄入时间使用的是source operator产生的不变的时间,后续不同的operator都将基于这个不变的时间进行处理,但是处理时间使用的是处理消息当时的机器系统时钟的时间。与事件时间相比,摄入时间无法处理延时和无序的情况,但是不需要明确执行如何生成watermark。在系统内部,摄入时间采用更类似于事件时间的处理方式进行处理,但是有自动生成的时间戳和自动的watermark。

ProcessingTime:

流处理程序使用该时间进行处理的时候,所有的操作(类似于时间窗口)都会使用当前机器的时间,例如按照小时时间窗进行处理,程序将处理该机器一个小时内接收到的数据。处理时间是最简单的概念,不需要协调机器时间和流中事件相关的时间。他提供了最小的延时和最佳的性能。但是在分布式和异步环境中,处理时间不能提供确定性,因为它对事件到达系统的速度和数据流在系统的各个operator之间处理的速度很敏感。

Watermark:

flink中检测事件时间处理进度的机制是watermark,watermark跟事件一样在流中进行传输并携带一个时间戳t。一个watermark(t)声明了在流中的事件时间有一个到达时间t,意味着流中应该不再有时间比t小的事件(例如某个事件的时间戳比watermark的时间戳老)。watermark主要用来处理事件时间戳乱序的事件流。

金融数据的特点:

金融数据主要指每秒产生的实时交易数据,这些数据需要根据不同的维度,如1min,5min,15min,30min,60min,日,周、月、年等进行价格高开低收的聚合,然后在金融软件上进行kline展示。下面的例子是将每秒的交易数据通过flink进行分钟维度的切分,具体聚合和存储的部分将在后面的文章中讲述。

一个模拟生成金融数据的源:

生成的数据格式如下图:

在flink端的处理代码为:

设置的窗口长度为1min,处理结果为:

可见每分钟接收到的数据都会落在同一个窗口中,即使数据有乱序,发生在前面的数据延时到达了也没关系,因为这里的watermark设置了5s钟的延时机制,在5s钟延时以内的数据会正常进入属于自己的窗口,5s钟以上的延时数据则不会被处理。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发架构二三事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档