APACHE ICEBERG 在小红书的探索实践
日志数据入湖
- 痛点:
- 动态分区流量极不均匀,导致KeyBy数据倾斜和小文件多。
- 小文件问题严重。
- Distcp延迟。
- 下游读取性能差。
- 解决方案:
- 使用 Iceberg 合并小文件。
- 异步模式:下游ETL任务已触发。
- 同步模式:跨云读写IO及OOM风险。
- 解决小文件问题,单次提交减少100倍。
- 减少Writer Operator内存消耗。
- 引入Shuffle,流量动态变化。
- 技术细节:
- Cloud Native Table。
- S3FileIO:优化S3客户端,使用Apache HttpClient,设置S3 API调用超时,配置凭证提供者,调整MPU阈值,重置异常读取限制。
- 下游集成。
生产环境落地
- 单作业吞吐量:每秒千兆字节(GB/s),每秒百万请求(Mil RPS)。
- 数据就绪时间:约5分钟(Flink checkpoint间隔)。
- 下游读取性能提升:-30% ~ 50%。
CDC 实时入湖
- MySQL 全量入仓:
- 技术细节:
- 确保同一主键(业务主键+ Shard Key)的binlog保持有序。
- 先发全量再发增量。
- 至少一次保证重复发送时有序。
- MQ producer根据主键Hash且分桶数固定。
- Flink处理:Shuffle key 只能是主键的子集 + 不变列。
- Iceberg sink:使用 upsert 模式。
- 特性:
- Binlog 格式:Canal PB。
- 忽略更新前的数据。
- 渐进式合并。
- 时间旅行查询:FOR SYSTEM_TIME AS OF ${history_time}。
- 软删除。
实时湖分析
- 实时分析链路:
- 技术细节:
- Iceberg外表:IcebergMergeTree。
未来规划
- 存储:
- 计算:
- 管理:
- 产品化:
- DLF(Data Lake Framework)+ DLA(Data Lake Analytics)。
- 智能化。
非常感谢您的观看
pangbo@xiaohongshu.com