网易流批一体的实时数据湖实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 网易流批一体的实时数据湖实践
网易数帆,周劲松
2.
3. 目录
1
3
网易数据开发现状与痛点
案例与成果
2
4
网易流批一体的实时数据湖——Arctic
未来规划
4. 01
网易数据开发现状与痛点
5. T+1 离线数据生产
原始数据
轻度汇聚
明细数据
数据源
数据集市
spark
spark/hive
spark/hive
impala
spark/hive
hive
6. 初步引入实时化
近 N 天数据
数据集市
数据源
Kudu
清洗聚合
Flink
CDC
分钟/秒级
消息队列
spark / impala
LOG
spark / impala
Flink
全部数据
清洗聚合
Hive
spark
Hive
主键聚合
spark
Hive
小时/天级
7. 更加复杂的实时化
清洗/打宽/聚合
近 N 天数据
数据集市
数据源
Kudu
HBASE
分钟/秒级
Flink
spark / impala
CDC
LOG
Flink
spark
Hive Hive
Hive Hive
清洗/打宽/聚合 全部数据
Hive Hive
spark
Hive
spark
Hive
spark / impala
小时/天级
8. 流批分割的Lambda架构
应用层:流批合并视图
实时应用层
离线应用层
spark
• 数据孤岛(Kudu 等)
impala
impala
服务层 Hive
spark
独立采购和部署
• 冗余存储浪费成本
• 难以数据复用和互通
服务层(实时数仓)
KV
Kudu
flink
存储层 Hive
spark
•
存储层(消息队列 + kv)
KV
数据源
消息队列
flink
数据源
flink
• 研发体系割裂
• 研发人效低
• 研发规范不通用
• 应用层视图合并复杂
• 指标和语义二义性
9. 02
网易流批一体的实时数据湖
Arctic
10. Arctic核心功能
痛点
数据孤岛
实时数据更新
功能
流批研发体系割裂
流批一体功能封装
• 支持主键定义 • 毫秒级延迟的实时写入/读取接口
• 提供唯一性保障 • 分钟级延迟的批量写入/读取接口
• 结构自由化,保障读写效 • Flink/Spark/trino等引擎的支持
11. Arctic架构
Arctic 是由网易开源的流式湖仓系统,Arctic 在 Iceberg 和 Hive 之上添加了更多实时场景的能力,
并且面向 DataOps 提供流批统一,开箱即用的元数据服务,让数据湖更加好用和实用 。
12. Arctic核心功能:Primary Key
• 支持 Primary Key
• 支持 CDC ingestion
• 实现 Upsert 语义
• 主键唯一性约束实现
• Merge on read
• optimize
• 未来扩展 SortKey / AggKey
13. Arctic架构
• AMS:元数据服务
- 三元组的元数据中心
- 支持和 HMS 同步,一起服务
- 事务和冲突解决 API
• Optimizer 机制
- Optimizer container
- Optimizer group
• 配套 Dashboard,注重管理体验
• Table format 完全兼容
14. Arctic核心功能:Optimizer
•Minor Optimize
•执行周期短(约10min 一次)
•eq-del 转换为 pos - del
•针对 change store
•Major Optimize
•执行周期长(约1 day 一次)
•消除delete 文件
•优化小文件情况
•针对base store
15. Arctic核心功能:文件索引
Snpshot id : 1000
1
0
Key:11010011
0
0
0
1
12M
1
0
1
change node:11
1
。。。。。。
000
001
011
111
108M
82M
96M
base node :111
base node:011
change node
base node
change file
base file
94M
16. Arctic核心功能:文件索引
Snpshot id : 1001
1
0
Spark
impala
presto
Merge on read
0
0
0
1
1
0
1
1
。。。。。。
000
001
0
1
111
11
57M
0011
change node
base node
1011
000
001
11
11
57M
0011
merge read task
92M
1011
111
17. Arctic核心功能:流批一体
lookup join
batch join
流批一体功能封装
seconds
• 毫秒/秒级延迟流计算
• 分钟级延迟流计算
seconds
stream write
stream read
minutes minutes
hours hours
• 小时级延迟批计算
• 流和批场景下的关联计算
batch write
batch read
18. Arctic核心功能:hidden queue
•下游可订阅 Arctic 表变更
•支持 Hidden Queue
•秒级延迟订阅
•通过消息回撤实现最终一致性
•arctic-flink-connector 封装双写和回撤
实现细节
•不开启 Hidden Queue
•分钟级延迟订阅
19. Arctic核心功能:hidden queue
任务Failover 后,先写入 Flip 消息,带上任务恢复
的CP信息
下游任务收到 Flip 消息,从 Kafka 找到对应的消息
并 retract
整个过程由 arctic-flink-connector 封装
20. Arctic核心功能:多写一致性保障
?
事务开始时从AMS分配事务ID,Merge-On-Read/Optimize时根据事务ID判定写入顺序
21. 性能测试
22. 性能测试
23. Arctic总结
• 格式兼容:百分百兼容 Iceberg / Hive 的表格式和语法
• 引擎平权:支持 Spark 和 Flink 读写数据,支持 Trino/impala 查询数据
streaming lakehouse service
• 基于主键高效地流式更新 • 支持将数据湖和消息队列封装成统一的表,流批表合一
• 数据自动分桶,结构自优化 • 提供流式数仓标准化的度量,dashboard 和相关管理工具
• Spark/Trino merge-on-read,查询分钟级新鲜度 • 解决并发写入冲突,实现事务一致性语义
24. 03
案例与成果
25. 案例:推送营销分析
设备明细表
设备库
kv index
ods_device
维表 join
清洗
change
base
算法埋点日志
推送分析报表
base
圈选明细表
ods_select_user
清洗
AP 批查询
base
base
left join
曝光明细表
主站埋点日志
base
ods_ua
分拆
点击明细表
base
• Hive 表支持流式更新
• 通过 merge on read 提供实时仓能力数
base
26. 案例:推送营销分析
设备明细表
设备库
kv index
ods_device
维表 join
清洗
change
base
base
ABTests
算法埋点日志
推送归因表
圈选明细表
ods_select_user
清洗
base
base
营销分析
实时生产
left join
base
曝光明细表
主站埋点日志
特征加工
样本生产
base
ods_ua
分拆
点击明细表
base
base
• 批量分析切换到实时生产,生产流程复用
• 优化报表响应时间 10x-100x
27. 04
未来规划
28. 未来规划
• 更多流批一体场景
• Rollup 聚合视图
• Sort Key 支持,Z-ORDER 排序
• 部分列的 Stream upsert
• 不依赖外部 KV 实现 Flink lookup join
• 拓展与集成
• 更多SQL语法支持(MERGE INTO)
• 扩展更多的Table format(Hudi、Delta)
• 支持开放式的权限插件,支持对接 Ranger
• 更多 optimizer container 支持
29. GitHub: https://github.com/NetEase/arctic
Document: https://arctic.netease.com/ch/
30.
31.
32.
33.
34.
35.
36.