一、前言
ChunJun(原FlinkX)是一个基于Flink提供易用、稳定、高效的批流统一的数据集成工具,是袋鼠云一站式大数据开发平台-数栈DTinsight的核心计算引擎,其技术架构基于实时计算框架Flink,打造出“具有袋鼠特色”的实时计算引擎。
开源项目地址:
https://github.com/DTStack/chunjun
https://gitee.com/dtstack_dev_0/chunjun
二、从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技术沙龙会