袋鼠云批流一体分布式同步引擎 ChunJun(原 FlinkX)的前世今生
一、前言
ChunJun(原 FlinkX)是一个基于 Flink
提供易用、稳定、高效的批流统一的数据集成工具,是袋鼠云一站式大数据开发平台 - 数栈 DTinsight
的核心计算引擎,其技术架构基于实时计算框架 Flink,打造出 “具有袋鼠特色” 的实时计算引擎。
开源项目地址:
https://github.com/DTStack/chunjun
https://gitee.com/dtstack_dev_0/chunjun
开源技术交流群:
钉钉群:30537511
二、从 FlinkX 到 ChunJun
ChunJun 脱胎于袋鼠云数栈自主研发的批流统一的数据同步工具 FlinkX。
2016 年,数栈技术团队初步研发完成了一款基于 Flink 的分布式离线 / 实时数据同步插件 ——FlinkX,它可实现多种异构数据源高效的数据同步,支持双向读写和多种异构数据源。有它助力,袋鼠云在批流一体的研究实践以更迅猛的势头往前挺进。
2018 年 4 月,秉承着开源共享理念的数栈技术团队在 github 上开源了 FlinkX,历经 4 年多的发展,FlinkX 从当初的一个小项目,成长为拥有 2900+star,1300+fork 的开源项目。
从开源的第一天,数栈技术团队从未停下技术探索和社区回馈的脚步,在 4 年多的时间里先后开源了 flinkx、flinkStreamSQL、jlogstash、easyagent、doraemon、molecule、Taier,袋鼠云数栈开源家族愈发壮大,开源项目系列得到了广泛的发展,相继在各类企业中落地应用。
今年,数栈技术团队决定对开源项目进行整体升级,并推出自主开源计划 ——DTstackCon,其中大数据开源项目系列以 “十大名剑” 作为概念来源,承载着数栈技术团队对它们能如利剑,为社区数字化进程的发展之路披荆斩棘的向往。
正是怀揣着这样殷切的期望,我们决定正式将 FlinkX 更名为 ChunJun!
ChunJun 命名取自于中国古代十大名剑之一的纯钧

(ChunJun logo)
纯钧是春秋战国时期铸剑名师欧冶子为越王勾践所铸,其剑身取材珍贵,锋利无比,剑刃就象壁立千丈的断崖崇高而巍峨,剑身更是历经千年而不蚀,代表稳定而强大坚定的意志,正如 ChunJun 作为袋鼠云数栈的核心计算引擎,承载着实时平台、离线平台、数据资产等多个应用的底层数据同步及计算,其强大的功能保障着客户业务数据的一致性。

ChunJun 的 logo 主体的字母 C 是由许多平行四边形组成的,这个组合有递进、有组合,正是 ChunJun 的稳定、聚合体、分布式、集成的开发理念的具象体现。
同时也传达出 ChunJun 核心观念:提供一个易用、稳定、高效的数据同步和集成工具。
底层采用六边形蜂巢结构,因为六边形的蜂巢是 “最省劳动力、也最省材料的选择”。多个六边形排列在一起之间没有空隙,这种排列也被称为是最稳定的排列方式。稳定,从来是我们开发的第一考虑。
三、什么是 ChunJun
ChunJun 是一个基于 Flink 提供易用、稳定、高效的批流统一的数据集成工具,既可以采集静态的数据,比如 MySQL,HDFS 等,也可以采集实时变化的数据,比如 binlog,Kafka 等。同时 ChunJun 也是一个支持原生 FlinkSql 所有语法和特性的计算框架。目前 ChunJun 在实际应用过程中已服务了上百家客户,经过多次迭代与沉淀,积累了大量的客户案例。
ChunJun 主要应用于大数据开发平台的数据同步 / 数据集成模块,通常采用将底层高效的同步插件和界面化的配置方式相结合的方式,使大数据开发人员可简洁、快速的完成数据同步任务开发,实现将业务数据库的数据同步至大数据存储平台,从而进行数据建模开发,以及数据开发完成后,将大数据处理好的结果数据同步至业务的应用数据库,供企业数据业务使用。

四、ChunJun 功能特点
ChunJun 具有以下几大特色功能点:
1、超丰富
* 丰富的插件种类:ChunJun 上下游插件多达 40 种,如常见的 mysql、binlog、logminer 等,大部分插件都支持 source/reader、sink/writer 及维表功能。
* 丰富的任务执行模式:支持本地拆箱即用式 - local 模式,Flink 自带 standalone 模式,常用调度 yarn session 和 yarn pre-job 模式,以及与 k8s 结合部署的 k8s 模式。
* 丰富的任务类型:ChunJun 支持 json 同步任务,以及 sql 计算任务,用户可以根据自己的需要,考虑是使用配置更加灵活的 json 同步任务,还是计算更加强大的 sql 计算任务。
2、超灵活
* 脏数据收集系统插件化:面对不同的业务场景,可以配置不同的脏数据配置,灵活处理,例如:
是否将脏数据落盘处理;
是否在日志中打印脏数据信息;
脏数据最大条数限制;
脏数据存储到不同类型的数据源等。
* 指标系统插件化:与脏数据插件化类似,指标系统在设计上也采用了插件化设计,用户根据自己的业务场景,灵活配置指标系统。
3、超强大
* 支持增量同步: 对于某些业务库的表,表中的数据基本只有插入操作,随着业务的运行,表中的数据会越来越大。如果每次都整表同步的话,消耗的时间及资源也会越来越多,因此需要一个增量同步的功能,每次只同步增加部分的数据,对于已经同步过的数据则不再进行重复的同步工作。
增量同步是针对于两个及以上数量的同步任务来说的,对于初次执行增量同步的某张表而言,该次同步实质上是整表同步,不同的是在任务执行结束后会记录增量字段的结束值 (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 语句,并对 DDL 手动执行。
五、ChunJun 未来规划
ChunJun 能从一个小项目发展到今天离不开社区开发者们的支持,我们将以此为基,秉承初心,继续大力发展 ChunJun 开源框架。
1、技术发展
* 支持数据湖:ChunJun 团队正在探索湖仓一体的建设
* 数据还原的完善:支持对 DDL 自动解析并交由下游数据源自动执行
* 更丰富的插件:不仅仅是丰富同步插件,也还要丰富脏数据插件,指标插件等
* 更完善的调度:完善 k8s 调度,给予用户更完整的 k8s 方案
* 性能与稳定性:ChunJun 团队持续优化代码结构,提高 ChunJun 性能与稳定性
2、社区发展
* ChunJun 技术融合方案
* ChunJun 系列直播公开课
* ChunJun Meetup 技术沙龙会