ChunJun
简介
ChunJun是一个分布式集成框架,目前基于Apache Flink。它最初被称为FlinkX,并于2022年2月22日更名为ChunJun。它可以实现各种异构数据源之间的数据同步和计算。到目前为止,ChunJun已在数千家公司稳定部署和运行。
ChunJun官方网站:https://dtstack.github.io/chunjun/
ChunJun的特点
ChunJun将不同的数据库抽象为reader/source插件、writer/sink插件和lookup插件,具有以下特点:
- 基于实时计算引擎Flink,支持JSON模板和SQL脚本配置任务。SQL脚本兼容Flink SQL语法;
- 支持分布式运行,支持flink-standalone、yarn-session、yarn-per job等提交方式;
- 支持Docker一键部署,支持在k8s上部署和运行;
- 支持多种异构数据源,支持MySQL、Oracle、SQLServer、Hive、Kudu等20多种数据源的同步和计算;
- 易于扩展,灵活性高,新扩展的数据源插件可以与现有数据源插件即时集成,插件开发者无需关心其他插件的代码逻辑;
- 不仅支持全量同步,还支持增量同步和区间训练;
- 不仅支持离线同步和计算,还兼容实时场景;
- 支持脏数据存储,并提供指标监控等;
- 配合flink checkpoint机制实现断点续传、任务灾难恢复;
- 不仅支持同步DML数据,还支持DDL同步,如'CREATE TABLE'、'ALTER COLUMN'等;
构建和编译
获取代码
使用git克隆ChunJun的代码
git clone https://github.com/DTStack/chunjun.git
构建
在项目目录中执行以下命令:
./mvnw clean package
或执行
sh build/build.sh
常见问题
编译'ChunJun-core'模块时抛出'Failed to read artifact descriptor for com.google.errorprone:javac-shaded'
错误信息:
[ERROR]Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.4.2:check(spotless-check)on project chunjun-core:
Execution spotless-check of goal com.diffplug.spotless:spotless-maven-plugin:2.4.2:check failed:Unable to resolve dependencies:
Failed to collect dependencies at com.google.googlejavaformat:google-java-format:jar:1.7->com.google.errorprone:javac-shaded:jar:9+181-r4173-1:
Failed to read artifact descriptor for com.google.errorprone:javac-shaded:jar:9+181-r4173-1:Could not transfer artifact
com.google.errorprone:javac-shaded:pom:9+181-r4173-1 from/to aliyunmaven(https://maven.aliyun.com/repository/public):
Access denied to:https://maven.aliyun.com/repository/public/com/google/errorprone/javac-shaded/9+181-r4173-1/javac-shaded-9+181-r4173-1.pom -> [Help 1]
mvn install:install-file -DgroupId=com.google.errorprone -DartifactId=javac-shaded -Dversion=9+181-r4173-1 -Dpackaging=jar -Dfile=./jars/javac-shaded-9+181-r4173-1.jar
快速开始
下表显示了ChunJun的分支与Flink版本的对应关系。如果版本不一致,任务中可能会出现'序列化异常'、'NoSuchMethod异常'等问题。
分支 | Flink版本 |
---|---|
master | 1.16.1 |
1.12_release | 1.12.7 |
1.10_release | 1.10.1 |
1.8_release | 1.8.3 |
ChunJun支持多种模式运行任务。不同模式依赖不同的环境和步骤。以下是
本地模式
本地模式不依赖Flink环境和Hadoop环境,在本地环境启动一个JVM进程执行任务。
步骤
进入'chunjun-dist'目录并执行以下命令:
sh bin/chunjun-local.sh -job $SCRIPT_PATH
"$SCRIPT_PATH"参数表示"任务脚本所在的路径"。 执行后,您可以在本地执行任务。
注意:
当您在Windows上打包并在Linux上运行sh时,需要执行命令 sed -i "s/\r//g" bin/*.sh 来修复'\r'问题。
独立模式
独立模式依赖于Flink独立环境,不依赖Hadoop环境。
步骤
1. 添加Chunjun的jar包
-
找到jar包目录: 如果您使用maven构建此项目,目录名为'chunjun-dist'; 如果您从发布页面下载tar.gz文件,解压后目录名类似'chunjun-assembly-${revision}-chunjun-dist'。
-
将jar包复制到Flink的lib目录,命令示例:
cp -r chunjun-dist $FLINK_HOME/lib
注意:此操作应在Flink集群的所有机器上执行,否则某些作业会因ClassNotFoundException而失败。
2. 启动Flink独立集群
sh $FLINK_HOME/bin/start-cluster.sh
启动成功后,Flink Web的默认端口为8081,您可以在'flink-conf.yaml'文件中配置。我们可以访问当前机器的8081端口进入独立集群的Flink Web界面。
3. 提交任务
进入'chunjun-dist'目录并执行以下命令:
sh bin/chunjun-standalone.sh -job chunjun-examples/json/stream/stream.json
命令执行成功后,您可以在Flink Web界面上观察任务状态。
Yarn会话模式
Yarn会话模式依赖于Flink jar包和Hadoop环境,在提交任务之前需要启动yarn-session。
步骤
1. 启动yarn-session环境
Yarn会话模式依赖Flink和Hadoop环境。您需要提前设置$HADOOP_HOME和$FLINK_HOME,并且我们需要使用yarn-session的'-t'参数上传'chunjun-dist'。
cd $FLINK_HOME/bin
./yarn-session -t $CHUNJUN_HOME -d
2. 提交任务
通过yarn web获取对应yarn-session的应用ID $SESSION_APPLICATION_ID,然后进入'chunjun-dist'目录并执行以下命令:
sh ./bin/chunjun-yarn-session.sh -job chunjun-examples/json/stream/stream.json -confProp {\"yarn.application.id\":\"SESSION_APPLICATION_ID\"}
'yarn.application.id'也可以在'flink-conf.yaml'中设置。 提交成功后,可以在yarn web上观察任务状态。
Yarn Per-Job模式
Yarn Per-Job模式依赖Flink和Hadoop环境。您需要提前设置$HADOOP_HOME和$FLINK_HOME。
步骤
配置正确后即可提交yarn per-job任务。进入'chunjun-dist'目录并执行以下命令:
sh ./bin/chunjun-yarn-perjob.sh -job chunjun-examples/json/stream/stream.json
提交成功后,可以在yarn web上观察任务状态。
连接器文档
详情请访问:https://dtstack.github.io/chunjun/documents/
贡献者
感谢所有贡献者!我们很高兴您能为Chunjun做出贡献。
贡献者随时间变化
许可证
ChunJun采用Apache 2.0许可证。详情请访问LICENSE。
联系我们
加入ChunJun Slack。 https://join.slack.com/t/chunjun/shared_invite/zt-1hzmvh0o3-qZ726NXmhClmLFRMpEDHYw