数据的实效性一般分三种:
- 离线:在今天(T)处理N天前(T-N,N>=1)的数据,延迟时间粒度为天。
- 准实时:在当前小时(H)处理N小时前(H-N,N>0,如0.5小时、1小时等)的数据,延迟时间粒度为小时。
- 实时:在当前时刻处理当前的数据,延迟时间粒度为秒。
离线和准实时都可以在批处理系统中实现,而实时数据则需要在流式处理系统中完成。
一、流式技术架构
在流式计算技术中,需要各个子系统之间相互依赖形成一条数据处理链路,才能产出结果最终对外提供实时数据服务。子系统:
- 数据采集
- 数据处理
- 数据存储
- 数据服务
1.数据采集
实时采集,两种数据:
- 数据库变更日志
- 引擎访问日志
日志在业务服务器上落地成文件,只要监控文静的内容发生变化,采集工具就可以把最新的数据采集下来。基于下面的原则按批次对数据进行采集:
- 数据大小限制
- 时间阈值限制
数据中间件:把采集到的数据分发给下游(kafka,timetunnel(阿里的kafka)等)
消息系统:业务数据库变更的消息中转
时效性和吞吐量是数据处理中的两个矛盾体,很多时候需要从业务角度来权衡使用什么样的系统来做数据中转。
2.数据处理
实时计算任务部署在流式计算系统上,通过数据中间件获取到实时源数据后进行实时加工处理。流计算引擎:
- Storm
- Spark Streaming
- Flink
- StreamCompute(阿里)
实时任务遇到的典型问题:
- 去重指标
- 数据倾斜
- 事务处理
3.数据存储
三种类型的数据:
- 中间计算结果
- 最终结果数据
- 维表数据
4. 数据服务
实时数据落地到存储系统中后,通过统一的数据服务获取到实时数据。
二、流式数据模型
类似于离线模型也分五层,由于实时计算的局限性,每一层中没有像离线做得那么宽,维度和指标也没有那么多,整体来看,实时数据模型是离线数据模型的一个子集。
1.数据分层
- ODS:数据操作层,原始数据,粒度最细。
- DWD:实时事实明细层。
- DWS:各个维度的汇总指标,可作为通用的数据模型使用。
- ADS:个性化维度汇总层。
-
DIM:从离线维表层导过来的。
其中,ods层导dim层的etl处理是在离线系统中进行的,处理完成后会同步到实时计算说使用的存储系统。
ods层和dwd层会放在数据中间件中,供下游订阅使用。
dws层和ads层会落地到在线存储系统中,下游通过接口调用的形式使用。
2.多流关联
在流式计算中常常需要把两个实时流进行主键关联,以得到对应的实时明细表。
3.维表使用
关联维表一般会使用当前的实时数据(T)去关联T-2的维表数据。原因如下:
- 数据无法及时准备好
- 无法准确获取全量的最新数据
- 数据的无序性
4. 大促保障
略