Hi,我是 ChunJun,一个有趣好用的开源项目。
数字经济时代,各行各业数字化转型大趋势下,数据要素成为关键。海量多源异构数据汇聚,使得数据同步面临同步速率受限、稳定性差、维护成本高等挑战。
批流一体的数据集成框架 ChunJun,沉淀了团队六年来在数据同步和集成方面的实践经验,秉承易用、稳定、高效的目标,满足更多用户对新型数据集成管理需求的响应。
ChunJun 是什么
ChunJun 是易用、稳定、高效的批流一体的数据集成框架。
主要应用于大数据开发平台的数据同步 / 数据集成模块,通常采用将底层高效的同步插件和界面化的配置方式相结合的方式,使大数据开发人员可简洁、快速的完成数据同步任务开发,实现将业务数据库的数据同步至大数据存储平台,从而进行数据建模开发,以及数据开发完成后,将大数据处理好的结果,数据同步至业务的应用数据库,供企业数据业务使用。
核心特性
・基于 json、sql 构建任务
・支持多种异构数据源之间数据传输
・支持断点续传、增量同步
・支持任务脏数据存储管理
・支持 Schema 同步
・支持 RDBS 数据源实时采集
开源地址
https://github.com/DTStack/chunjun
https://gitee.com/dtstack_dev_0/chunjun
ChunJun 的故事
项目最早启动的初衷是为袋鼠云的核心业务一站式大数据开发治理平台 - 数栈 DTinsight,打造一款具有 “袋鼠特色 “的核心计算引擎,承载实时平台、离线平台、数据资产平台等多个应用的底层数据同步及计算任务。
2016 年,数栈技术团队初步研发完成了这款基于 Flink 的分布式离线 / 实时数据同步插件 ——FlinkX,它可以实现多种异构数据源高效的数据同步,支持双向读写和多种异构数据源。有它助力,袋鼠云在批流一体的研究实践以更迅猛的势头往前挺进。
此后,FlinkX 在业务场景中投入实际应用,得到了超过预期的效果,团队持续投入研发力量,在脏数据、分布式、整库同步、连接数控制等方面逐渐完善。成为支持数栈实现异构数据源之间高速稳定数据同步的核心计算引擎。
2018 年 4 月,秉承着开源共享理念的数栈技术团队在 github 上开源了 FlinkX,吸引了大量的开发者们一起技术交流和合作共建,FlinkX 得到了更好的发展。
2022 年 4 月,在 FlinkX 进行初版开源的整整四年后,FlinkX 已经从当初的一个小项目,成长为拥有 3200 star,1400 fork 的开源项目。技术团队决定对 FlinkX 进行整体升级,并更名为 ChunJun,希望为大家真正提供一个稳定、高效、易用的批流一体的数据集成框架。
ChunJun 的技术
ChunJun 既可以采集静态的数据,比如 MySQL,HDFS 等,也可以采集实时变化的数据,比如 binlog,Kafka 等。同时 ChunJun 也是一个支持原生 FlinkSql 所有语法和特性的计算框架。
主要架构
ChunJun 基于 Flink 并采用插件式架构,将源数据库抽象成 Reader 插件,将目的数据库抽象成 Writer 插件。
核心能力
● 多源异构数据汇聚
作为一个开放式系统,用户可以根据需要,开发新的插件,接入新的数据库类型,也可以使用内置的数据库插件。目前兼容 30 异构数据源的数据读写与 SQL 计算。
● 断点续传
针对网络波动等异常情况,导致数据同步失败的任务,在下一次任务时自动从上一次失败的数据点进行数据同步,避免全部重跑。
● 数据还原
除了 DML 操作以外,一些源端数据库的 DDL 操作也能做到同步,最大程度保证源端数据库和目标端数据库的数据统一和结构统一,做到数据还原。
● 脏数据管理
数据传输过程中,因数据质量或主键约束等其他因素导致数据无法同步到目标数据库,针对这些脏数据进行统计和管理,便于后续进行脏数据分析。
● 速率控制
数据同步过程中,数据传输效率是关键,ChunJun 针对各种场景,有的放矢地控制速率,最大程度保证数据同步的正常进行。
ChunJun 的优势
简单易用
● 实现 “开箱即用”
支持 Docker 一键部署,支持多种任务运行模式。
- 本地 local 模式,适用于调研、测试阶段使用;
- Flink 集群 standalone 模式;
- Yarn 调度 session 模式及 per-job 模式,常用于生产环境;
- K8S 环境 application 模式及 session 模式。
● 丰富任务类型
支持 json 同步任务,以及 sql 计算任务,用户可以根据自己的需要,考虑是使用配置更加灵活的 json 同步任务,还是计算更加强大的 sql 计算任务。
● 多种插件种类
ChunJun 上下游插件多达 40 种,如常见的 mysql、binlog、logminer 等,大部分插件都支持 source/reader、sink/writer 及维表功能。
开放兼容
● 信创兼容
实现国产信创环境全面适配,包括服务器、芯片、系统、数据库等,并且支持在海豚调度、太阿调度、dlinky 等常用平台上使用。
● 成熟稳定
开源开放,基于 gitHub 社群不断进行优化迭代,在上百家客户生产环境上稳定运行,并且有专门的团队维护。
功能强大
● 支持增量同步
对于某些业务库的表,表中的数据基本只有插入操作,随着业务的运行,表中的数据会越来越大。如果每次都整表同步的话,消耗的时间及资源也会越来越多,因此需要一个增量同步的功能,每次只同步增加部分的数据,对于已经同步过的数据则不再进行重复的同步工作。
增量同步是针对于两个及以上数量的同步任务来说的,对于初次执行增量同步的某张表而言,该次同步实质上是整表同步,不同的是在任务执行结束后会记录增量字段的结束值 (endLocation) 并将其上传至 prometheus 供后续使用。
在构建下次增量任务时获取该 endLocation 并作为上述过滤条件的参数值 (startLocation)。在任务解析到增量任务配置时,会根据 startLocation 的有无自动构建过滤条件,并将其拼接至 where 条件中,最终构建出一条如:select id, name, age from test where id > 100 的 SQL,从而达到增量读取的目的。
● 支持断点续传
对于某些业务库的表,其数据量可能非常大,同步可能耗时非常久。如果在同步过程中由于某些原因导致任务失败,从头再来的话成本非常大,因此需要一个断点续传的功能从任务失败的地方继续。
断点续传的本质是通过 Flink 的 checkpoint 机制实现的,在每次 checkpoint 时,reader 插件会保存当前读取到的字段的值,writer 插件则会在保存 writer 中的指标及其他信息,然后将 writer 中的事务提交。
● 支持同步 DDL 数据
在客户真实场景中,对于 DDL 数据目前无法处理的情况,ChunJun 借助外部数据源,监听并捕获 DDL 变更数据,根据任务配置,对下游采用手动变更或自动变更。
● 支持脏数据收集系统插件化
面对不同的业务场景,可以配置不同的脏数据配置,灵活处理,例如:是否将脏数据落盘处理;是否在日志中打印脏数据信息;脏数据最大条数限制;脏数据存储到不同类型的数据源等。
● 支持指标系统插件化
与脏数据插件化类似,指标系统在设计上也采用了插件化设计,用户根据自己的业务场景,可灵活配置指标系统。
ChunJun 的未来规划
后续我们将定期对 ChunJun 进行迭代,发布最新版本。近期的规划如下:
・完善项目 E2E 测试及插件单测,为项目提供强有力的稳定性保证;
・加强数据还原,联同数据湖打造批流一体数仓全链路;
・增加服务能力,打造最全面的数据集成框架;
・框架整体优化,为用户提供最快、最丝滑的体验。
写在最后
为了满足各类业务需求,如何选择正确的数据集成工具,从而对各类数据加以归纳,是许多企业面临的问题。ChunJun 相继在各类型企业中进行落地应用,经过在丰富核心业务场景中的实践和打磨,能够支持不同类型的数据集成和同步任务,其强大的功能保障着客户业务数据的一致性。
ChunJun 项目技术团队非常期待得到每一个人的反馈,能够和其他优秀开发者共同合作,进一步推动数据集成 / 同步的技术发展。
最后,如果您对 ChunJun 或数据集成等领域有兴趣,都可以参与到我们的建设中来,一起交流,一起进步,为 ChunJun 变得更好贡献一点你的代码和意见,这将是我们,同时也是 ChunJun 莫大的荣幸。