NewsBreak 数据架构与 Hudi 应用实践
数据管道与架构演进
NewsBreak 采用现代数据平台架构,实现快速数据摄取与查询。其数据管道从旧版 CDH 迁至 AWS,通过 Hudi 实现统一数据架构。关键指标包括:
- 管道延迟:9s p95 < 15min
- 数据写入量:每月 50 BN 写入,最高 30 TB
- 同步间隔:3-10 分钟
- 源限制:10GB 数据源限制
Hudi 详细配置与性能优化
NewsBreak 的 Hudi 配置要点:
- MultiSink 与 frst 水槽集成
- HudiRefinement 支持后期数据 Extra upsert
- HudiMetrics 显示每月写入量、同步间隔等
- DeltaStreamer 低代码支持,支持 Protobuf 架构自定义
- FileBasedSchemaProvider 与 JsonKafkaSource 等源配置
- Presto 版本 0.275(私有代码库),支持 Hudi 优化
- 显式设置 record.size.estimate(尤其 < 1KB 数据)
- 每小时分区使用 TimestampBasedKeyGenerator
Presto 查询性能与优化
Presto 在 NewsBreak 的应用:
- 核心集群:1600 个节点,9s P95
- 查询量:每月 50k 查询
- 数据读取:每月 6PB S3 字节,160 Tri 读取行数
- Presto 版本 0.275(Twilio 开源,优化 Hudi 支持)
- CTAS 查询受数据分析欢迎
- 排序列优化集群性能
- 精细计划调度对性能、资源、存储至关重要
Schema 管理与演变策略
NewsBreak 的 Schema 管理实践:
- 采用 PB3(Avro)作为 Kafka 方案描述语言
- 模式演变最佳实践:
- 保留 Json 内容在 Kafka/DFS 中
- 使用二进制日志记录变更
- UseProtoNames: true, Emitated: true
- Hive 注册表广泛访问,Spark SQL 需 yyyy/MM/dd/HH 分区格式
模式训练管道设计
模式训练管道配置:
- 3 分钟延迟,每日 500GB+ 数据
- 时间窗口与固定大小窗口结合
- 管道逻辑在开始或结束执行
- Hive 注册表支持分区格式 yyyy/MM/dd/HH
Hudi 与 Presto 协同优化
- hoodie.cleaner.commit.retained 参数配置:
- hoodie.cleaner.commit.retained = hoodie.keep_min_commit_times - 1
- hoodie.cleaner.commit_retained_num * time_interval >= max_query_execution_time
- Appcache 在 EMR 中通过 Cronjob 清理
- Spark SQL 使用 / 分隔符,Presto 支持 yyyy-MM-dd-HH 格式
统一架构与事件流
- 统一架构注册表整合数据
- Presto 事件流插件将查询事件发送至 Kafka
- Alluxio 本地缓存支持(2.9.2)
- GDA 跳过,优化跨分区查询性能