"); //-->
以下文章来源于DataFunTalk ,作者孙超
目前小红书对数据湖技术的探索主要分为三个方向,第一个方向是在小红书云原生架构下,对于大规模日志实时入湖的实践,第二个方向是业务数据的CDC实时入湖实践,第三个方向是对实时数据湖分析的探索。
01 日志数据入湖
1. 小红书数据平台架构
在进入主题之前先介绍一下小红书数据平台的基本架构。
总体来说,小红书数据平台与其他互联网公司大同小异,主要不同在于小红书的基础架构是“长”在多朵公有云之上的。在数据采集层,日志和RDBMS的数据源来自不同的公有云;在数据存储加工层,绝大多数数据会存储于AWS S3对象存储;同时,数仓体系也是围绕着S3来建设的,实时ETL链路基于Kafka、Flink,离线分析链路基于AWS EMR上的Spark、Hive、Presto等;在数据共享层,诸如Clickhouse、StarRocks、TiDB等OLAP引擎,为上层报表提供一些近实时的查询。以上就是小红书数据平台整体的架构组成。
2. APM日志数据入湖
接下来我们用APM(Application Performance Monitor)的例子来介绍Iceberg如何在当前架构体系下运转。
(1)使用Iceberg之前的APM链路
APM主要记录小红书APP前端和客户端性能相关的埋点日志,可以达到百万每秒的RPS。以前的离线链路是先将埋点数据发送到阿里云的Kafka,通过Flink作业落到阿里云的OSS对象存储,然后通过Distcp搬到AWS S3上,之后通过Add Partition落地到Hive表里,接下来下游的EMR集群会对落地的数据做一些离线的ETL作业调度和Adhoc的查询。整条链路中,数仓同学的痛点是Flink ETL作业上数据需要按业务分区动态写入,但是各点位分区之间的流量非常不均匀。这就涉及到动态写分区时候是否要加Keyby,如果加Keyby就会发生数据倾斜,不加Keyby每个写算子的Subtask都会为每个分区创建一个Writer,而分区Writer又至少创建一个文件,同时 Flink Checkpoint 又会放大这个写放大,最终导致小文件数爆炸。
小文件数多后会导致以下几个后果:
hive_prod.Iceberg_test.table
编辑:王菁
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。