流式计算框架的开源方案非常多,整体的机构相似,只是实现实时的方式存在差异,按照子系统功能划分,分为数据采集、数据处理、数据存储、数据服务四个部分
数据采集
1)实时采集的数据一般来自业务服务器,分成两大类:
① 数据库变更日志
② 服务器引擎访问日志
2)不论是哪种日志文件,采集完成后都已文件的形式保存,采集工具只要监控文件的变化就可以做到实时采集
3)处于对吞吐量的考虑,会以批次的方式进行采集,批次大小基于两个原则:
① 数据大小限制
② 事件阈值限制
4)时效性和吞吐量是需要权衡的两个属性,采集频繁可以提升时效性,降低吞吐量。
数据处理
1)市面上流行的流式计算框架:
① Strom
② S4
③ spark Streaming
④ flink
2)典型问题分析:
① 去重:实时计算为了提高性能,把中间结果的数据保存在内存中,当数据量过大,内存不足以容纳时
+ 精确去重:通过处理数据倾斜的方式把一个节点的内存压力分散到多台节点上
+ 模糊去重:在对结果精度要求不高的情况下使用相关算法去重,如布隆过滤器、基数估计
② 数据倾斜:由于数据分布不均匀,倒是某一台节点数据量巨大,承为性能的瓶颈,这时对数据进行分桶处理,利用各个桶的cpu能力
③ 事务处理:分布式系统处理任务可能由于网络、硬件等原因出现失败的情况,在这种情况下如何做到数据的精确处理。
数据存储:
1)实时计算过程中涉及很多维度和指标,其中会涉及三类数据
① 中间结果
② 最终结果
③ 维表数据
2)表名设计:汇总层表示(DWS) + 数据域(交易数据) + 主维度(交易信息) + 时间维度(0)
3)rowkey设计:MD5(卖家id前四位:用于数据散列,负载均衡) + 主维度(买家id) + 维度标识(app) + 子维度1(一级类目id) + 时间维度(ddd) + 子维度2(二级类目id)