基于Apache Seatunnel对于mysql8进行同步
今天同事被一个需求搞的很难受,场景是甲方有内网、外网、中转机三台服务器,其中内网和外网的mysql数据库需要互相同步,中转机是windows系统,同事不想太麻烦(数据量也不是很大)。最好是简单搭建即可进行同步内外数据库中的数据。canal的方案太复杂涉及到的组件太多,flink对于windows的支持又不好。于是我想到了之前了解过的Apache Seatunnel他是DolphinScheduler技术团队的另一项目,于是我推荐给了我同事,帮他解决了他的问题,让他又变得舒爽起来。这个组件用的人不多网上资料也相对较少。于是我把他分享出来。
-
搭建环境
-
安装java环境(这不废话嘛!!!)
-
安装maven环境(此步骤是拉取相应的连接插件包,如果已经拉了直接复制文件夹就不需要了)
-
下载https://dlcdn.apache.org/seatunnel/2.3.8/apache-seatunnel-2.3.8-bin.tar.gz并且解压
-
修改config/plugin_config文件(把不需要的包都删除,比如我就剩下了 mysql-cdc和jdbc因为我别的不用)
--connectors-v2-- connector-cdc-mysql connector-jdbc --end-- -
bin/install-plugin.cmd(运行此步骤拉取上述配置文件指定的连接包)
-
-
配置文件(参见:https://seatunnel.incubator.apache.org/zh-CN/docs/concept/config )
#confing/test.conf env { parallelism = 5 job.mode = "STREAMING" checkpoint.interval = 5000 read_limit.bytes_per_second=7000000 read_limit.rows_per_second=400 } source { MySQL-CDC { base-url = "jdbc:mysql://localhost:3306/test1" username = "root" password = "123456" table-names = ["test1.table1"] startup.mode = "initial" debezium = { include.schema.changes = true } } } sink { jdbc { url = "jdbc:mysql://localhost:3306/test2" driver = "com.mysql.cj.jdbc.Driver" user = "root" password = "123456" generate_sink_sql = true database = test2 table = table1 primary_keys = ["id"] is_exactly_once = true xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource" } } -
配置检查点(conf/seatunnel.yaml)
storage: type: localfile (默认hdfs 改为localfile) max-retained: 3 plugin-config: namespace: /tmp/seatunnel/checkpoint_snapshot storage.type: local (默认hdfs 改为local) fs.defaultFS: file:///tmp/ -
运行脚本
cd bin seatunnel.cmd --config confing/test.conf -m local -
打完收工

浙公网安备 33010602011771号