字节跳动数据集成引擎BitSail开源架构演进和实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 字节跳动数据集成引擎BitSail
开源架构演进和实践
李畅 字节跳动大数据工程师
DataFunSummit # 2023
2. 个人简介
l 16年加入字节跳动开发套件团队,从0到1设计、研发了面向字节各业
务线的数据集成服务
l 专注大规模数据的分布式计算和传输领域, 提供高效、可靠的数据集
成解决方案
l 开源社区爱好者,BitSail开源项目负责人之一
3. 目录
CONTENT
01
02
BitSail 背景介绍
BitSail 新功能介绍
03 BitSail CDC解决方案
04 未来展望
未来展望
4. 01
BitSail 背景介绍
DataFunSummit # 2023
5. BitSail 背景介绍
在数据建设过程中,通常需要把数据从A
系统导入到B系统
数据集成是数据建设的基础,主要解决异
构数据源间数据传输、加工和处理
6. BitSail 背景介绍
• BitSail,又可称为“比特航行”
• BitSail 是字节跳动开源的分布式、高性能数据集成引擎,支持多种异构数据源间
的数据同步,并提供离线、实时、增量场景下全域数据集成解决方案
•
BitSail 目前已被广泛使用, 并服务于字节内部几乎所有业务线,包括抖音、今日头
条等,每天同步数百万亿条数据,同时在火山引擎云原生环境、本地私有云环境等
多种场景下得到验证
7. BitSail 演进历程
覆盖流式场景
无统一框架
通用能力输出
M*N,每个通道各自实现 覆盖流式场景,完成流、 BitSail 开源
如MR/Spark等等 批架构统一 云原生引擎
~2018
2019
统一架构,覆盖批式场景
基于Flink引擎,完成批式场景统一
2020
2021
2022-now
覆盖CDC场景, 湖仓一体
基于Flink+Hudi实现数据准实时入湖
8. 02
BitSail 新功能介绍
DataFunSummit # 2023
9. BitSail 数据同步架构
架构
• Connector层、框架层、引擎层
• 每一层都采取可插拔的设计,灵活性较好
框架层
• 丰富基础能力,比如数据源类型转换、脏数据
处理、流控、自动并发度推断、运行监控等
场景
• 覆盖离线、实时、增量数据同步场景
10. BitSail 数据同步架构 – 代码结构
Root
Connector
Components
Engine Adapter
11. 多引擎架构
问题
• Flink 深度绑定,依赖较重,场景受限制
• Flink 定位通用计算引擎,数据集成场景存在资源浪费
解决思路
• 引擎基于可插拔设计,支持轻量化的分布式计算引擎
• Connector 提供引擎无关的读写接口
• 框架层与引擎解耦
12. 多引擎架构 – Source API
Source API
数据读取组件的生命周期管理类,主要负责和框架的
交互,它不参与作业真正的执行
• Split
数据分片,大数据处理框架的核心目的就是将大规模
的数据拆分成为多个合理的Split
• Split Coordinator
创建、管理Split,并将Split分发给Source Reader
• Source Reader
真正负责数据读取的组件,在接收到Split后会对其
进行数据读取,然后将数据传输给下一个算子
13. 多引擎架构 – Sink API
Sink API
数据写入组件生命周期的管理类,主要负责和框架
进行交互,它不参与作业真正的执行
• Writer
主要负责将接收到的数据写到外部存储
• Writer Committer(可选)
用于对数据进行提交操作,基于两阶段提交,实
现Exactly-Once的语义
14. 多引擎架构 – API 接口转换
• DelegateXXX 基于引擎接口实现
• DelegateXXX 实现Source/Sink API 接口和引擎接口转换
15. EtLT架构
数据处理架构 BitSail EtLT架构
• ETL -> ELT -> EtLT • Source、Sink间引入Transform模块
• 现代数据栈、实时性 • 流批一体,支持轻量级数据处理
16. 自动化测试引擎
背景
• Fat 包缺点,产物包太大,并且包冲突较为严重
• Connector 独立打包,并支持运行时动态加载
问题
• Connector 动态加载时,存在潜在的包冲突问题
解决思路
• 构建 Connector 自由组合自动化测试引擎
• 打通 CICD 流程,避免 Connector 包冲突问题
17. 自动化测试引擎
基本原理
• 单数据源测试用例构建
• M * N 自由组合测试任务生成
• 分布式调度和执行
• 结果通知
多引擎架构
• 测试用例与引擎无关
• 测试任务可复用到不同引擎
流批一体框架
•
兼容离线以及实时场景
18. 03
BitSail CDC解决方案
DataFunSummit # 2023
19. CDC 背景介绍
CDC(Change data capture):
通过捕获数据变更日志(Binlog)的方式,将更新数据同步到外部数据源
相比于批式变更同步,CDC 变更同步有着延迟更低,对线上数据影响更小的优点
20. CDC 同步使用场景
•
离线数据分析:离线数仓建设,离线报表
MySQL -> Hive/ClickHouse
•
准实时数据分析:实时看板建设,实时数据分析
MySQL -> Doris/StarRocks
•
搜索数据分析:在线搜索
MySQL -> ElasticSearch
21. 离线整库同步解决方案
痛点
• 延迟高:MySQL 数据 T + 1 导入 Hive, 实时性较差
• 运维成本高:需要维护多张表与表之间的映射关系和
多个同步任务
• 分库分表场景:分库分表只能分别入仓,入仓后再进
行合并
• 一致性问题:同步链路长,乱序导致数据不一致问题
22. CDC 整库同步解决方案
23. CDC 整库同步解决方案
离线整库同步 - 延迟高
• MySQL 数据 T + 1 导入 Hive,实时性较差
CDC 整库同步
• 全量数据批式导入
• 增量数据实时消费 Binlog 写入,根据场景需求调整写入延迟
• 以 Doris/StarRocks 为例延迟可以做到秒级
24. CDC 整库同步解决方案
离线整库同步 - 运维成本高
• 需要维护多张表之间的映射关系和多个同步任务
CDC 整库同步
• 自动建表:自动根据上游表的字段创建下游表
• 全量任务:自动调度单次全量批任务,其中每个批
任务实现单表同步
•
增量任务:一个任务写入到多张下游表中
25. CDC 整库同步解决方案
离线整库同步 - 分库分表
• 分库分表只能分别入仓,入仓后再进行合并
CDC 整库同步
•
全量任务:单个任务读取多个数据源,写入到单张下
游表中
•
增量任务:增量任务直连多个数据源拉取Binlog,写
入到单张下游表中
26. CDC 整库同步解决方案
离线整库同步 - 一致性问题
• 同步链路长,乱序导致数据不一致
CDC 整库同步
•
基于严格有序的字段,保证新数据不被旧数据覆盖
• Binlog 原生字段,例如 Binlog Position
• 业务自定义排序字段,例如 Hudi 的 precombine 字段,Doris 的 sequence字段
27. CDC 整库同步解决方案 – 运行流程
28. CDC 整库同步解决方案 – 运行页面
29. 04
未来展望
DataFunSummit # 2023
30. 未来展望
基础能力建设
• Connector生态建设,提供更多的读写数据源
• 多引擎架构,提供更轻量的分布式计算引擎
CDC 同步能力增强
• 自动 DDL 同步,支持自动 Create Table 和 Add Column
• CDC 生态建设,支持更多的上下游数据源,复用 CDC 框架能力
• 端到端数据一致性校验能力构建
31. 了解更多
BitSail技术交流群 BitSail代码仓库
最新进展·社区活动·干货分享 https://github.com/bytedance/bitsail
32. 感谢观看