服务器 频道

基于数据湖构建近实时数据链路

  大数据处理技术,经历了基于Hadop+Hive的离线数据仓库,可以满足大部分场景的需求,数据准确性可以得到保证;但是对于秒级实时需求无法满足,基于此产生了实时处理数仓+离线数仓结合的Lambda架构,实时性和准确性得到了保证,但需要维护两套代码;利用kafka数据重放offset功能产生了Kappa架构,剥离了离线数据处理,实时性得到了保障但准确性无法得到保证;基于数据湖构建的近实时数据链路,牺牲数据实时性,一套代码保证了准确性。

  一、Hive离线数仓

  传统的Hive离线数仓的优缺点:

  保存全量数据;程序稳定性、可靠性高;产出结果准确性高;

  T+1延迟,下游数据产出时间不稳定,时效性低;

  故障重试代价比较大;

  依赖调度系统构建任务依赖关系;

  一般在零点出现调度高峰,峰值资源紧张,集群服务压力大; 

  二、Lambda架构

  Lambda架构的优缺点:

  实时链路提供数据时效性支持;

  离线链路保证数据完整性;

  支持数据回溯、OLAP查询;

  平台维护两套架构,运维成本高;

  业务维护两套代码,开发成本高;

  两条链路产出结果可能会不一致;  

  三、Kappa架构

  使用不可改变的数据流作为主要的记录源;

  可以重放过去的事件;

  时效性高;

  无法保存全量数据;

  无法使用OLAP引擎直接分析;

  回溯能力不如离线存储Hive;

  产出结果可能不如离线计算准确;  

  Lambda和Kappa架构的起源可以参考: Lambda和Kappa架构的起源

  四、湖仓流批一体架构

  小文件合并 -> 避免对HDFS造成存储压力;

  CDC(Change Data Capture)增量读取 -> 近实时处理;

  计算和存储统一,架构简化,降低了开发维护成本;

  兼顾延迟和正确性,同时对OLAP有较好支持;

  只能做到分钟级,对于秒级时效性的数据需求,依然依赖Flink+Kafka;

  对于延迟敏感的查询需求(特别是面向应用的),依然需要通过ETL导入数仓;  

  对比天级别延时,无法及时感知到运营、风控策略、A/B实验效果,整体效果其实是比较差的,将数据架构升级为数据湖链路,数据分钟级别延迟,可以快速感知实验效果并调整运营和风控策略,对整体的提效会有较好的效果,并且数据复用性强,维护成本低。  

  

  可能有人会问,数据湖相比Hive会更节省存储内存吗,我们以Iceberg为例,从存储格式、数据压缩、数据更新删除和元数据管理方面具体分析下:

  数据存储格式

  Iceberg:采用列式存储格式,如 Parquet 等,这种格式只读取需要的列数据,避免了不必要的数据读取,从而提高了查询性能,并且在存储上更加紧凑,节省存储空间。例如,在一个包含众多列的宽表中,若查询只涉及其中几列,Iceberg可以只读取相关列的数据,减少了I/O 和内存占用。

  Hive:支持多种存储格式,包括文本格式、SequenceFile、RCFile 等,其中一些格式可能相对较为冗余。比如文本格式,数据以文本形式存储,每行记录完整,可能包含大量重复信息,占用较多空间。虽然Hive也可使用列式存储格式,但默认配置下可能不如Iceberg在存储效率上优化得好。

  数据压缩

  Iceberg:与高效的压缩算法紧密集成,如Snappy、Zstd等,在数据写入时可以自动对数据进行压缩,大大减少了数据的存储空间。例如,使用 Snappy压缩算法可以在不损失太多性能的前提下,将数据压缩到原来的几分之一甚至更小。

  Hive:也支持数据压缩,但在配置和使用上可能相对复杂一些,需要用户手动设置相关参数才能充分发挥压缩的优势。如果用户没有进行合理配置,可能导致数据未得到有效压缩,从而占用较多存储内存。

  数据更新和删除

  Iceberg:支持高效的增量更新和删除操作,通过记录数据的变化而不是直接修改原始数据文件,避免了大量的数据重写,从而节省了存储空间。例如,当需要更新一条记录时,Iceberg 只会记录该记录的更新操作,而不是重新生成整个数据文件。

  Hive:在进行数据更新和删除时,通常需要重写整个数据文件或者使用一些复杂的外部工具来处理,这可能导致大量的数据冗余和额外的存储开销。

  元数据管理

  Iceberg:拥有独立的元数据管理系统,能够更精细地跟踪数据的变化和版本信息,只存储元数据的增量部分,从而减少了元数据的存储空间占用。同时,高效的元数据管理也有助于提高查询性能,避免不必要的数据扫描。

  Hive:元数据存储在关系型数据库中,如MySQL等,随着数据量的增加和操作的频繁,元数据可能会变得庞大且复杂,需要更多的存储空间来维护。

  总结:从Hive离线数仓 -> Lambda架构 -> Kappa架构 -> 湖仓一体,每个数据架构解决的需求不一样,湖仓一体统一了存储和计算,节省了存储和计算成本,但是秒级实时需求还有待提升。

0
相关文章