网易流批一体的实时数据湖实践
1. 网易数据开发现状与痛点
- T+1 离线数据生产:主要采用 Hive 和 Spark 进行数据处理。
- 初步引入实时化:使用 Flink 进行实时处理,数据源包括消息队列和 Kudu。
- 更加复杂的实时化:处理更为复杂的实时数据,涉及多个阶段的数据清洗和聚合。
- 流批分割的 Lambda 架构:离线应用层使用 Spark 和 Impala,实时应用层使用 Flink 和 Kudu,存储层采用消息队列和 KV。
痛点
- 数据孤岛:存在 Kudu 等独立的数据存储。
- 流批研发体系割裂:开发和运维体系分离,导致成本增加和复用困难。
- 研发人效低:研发规范不通用,导致开发效率低下。
- 应用层视图合并复杂:视图合并复杂且存在指标和语义二义性。
2. 网易流批一体的实时数据湖 Arctic
-
核心功能
- 实时数据更新:支持主键定义和唯一性保障。
- 流批一体功能:提供毫秒级和分钟级的实时写入/读取接口,支持多种引擎(如 Flink、Spark、Trino)。
- 文件索引:实现高效的文件管理和索引。
- 优化器:提供 Minor Optimize 和 Major Optimize 功能,优化数据存储和读取性能。
-
架构
- AMS:元数据服务,支持与 HMS 同步。
- Optimizer 机制:实现数据优化和排序。
- 配套 Dashboard:提供管理体验。
-
流批一体功能
- 毫秒/秒级延迟流计算
- 分钟级延迟流计算
- 小时级延迟批计算
- 流和批场景下的关联计算
-
隐藏队列
-
多写一致性保障
- 事务开始时从 AMS 分配事务 ID,根据事务 ID 判定写入顺序。
3. 案例与成果
- 案例:推送营销分析
- 实时生产:使用实时数据湖进行实时生产,优化报表响应时间 10-100 倍。
- 批量分析切换到实时生产:复用生产流程,提高效率。
4. 未来规划
- 更多流批一体场景
- Rollup 聚合视图
- Sort Key 支持,Z-ORDER 排序
- 部分列的 Stream upsert
- 更多 SQL 语法支持(MERGE INTO)
- 扩展更多的 Table format(Hudi、Delta)
- 支持开放式的权限插件,支持对接 Ranger
- 更多 optimizer container 支持
GitHub: https://github.com/NetEase/arctic
文档: https://arctic.netease.com/ch/