基于Apache Seatunnel对于mysql8进行同步

今天同事被一个需求搞的很难受,场景是甲方有内网、外网、中转机三台服务器,其中内网和外网的mysql数据库需要互相同步,中转机是windows系统,同事不想太麻烦(数据量也不是很大)。最好是简单搭建即可进行同步内外数据库中的数据。canal的方案太复杂涉及到的组件太多,flink对于windows的支持又不好。于是我想到了之前了解过的Apache Seatunnel他是DolphinScheduler技术团队的另一项目,于是我推荐给了我同事,帮他解决了他的问题,让他又变得舒爽起来。这个组件用的人不多网上资料也相对较少。于是我把他分享出来。

  1. 搭建环境

    1. 安装java环境(这不废话嘛!!!)

    2. 安装maven环境(此步骤是拉取相应的连接插件包,如果已经拉了直接复制文件夹就不需要了)

    3. 下载https://dlcdn.apache.org/seatunnel/2.3.8/apache-seatunnel-2.3.8-bin.tar.gz并且解压

    4. 修改config/plugin_config文件(把不需要的包都删除,比如我就剩下了 mysql-cdc和jdbc因为我别的不用)

      --connectors-v2--
      connector-cdc-mysql
      connector-jdbc
      --end--
      
    5. bin/install-plugin.cmd(运行此步骤拉取上述配置文件指定的连接包)

  2. 配置文件(参见: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"
            
           }
    }
    
  3. 配置检查点(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/
    
  4. 运行脚本

    cd bin
    seatunnel.cmd --config confing/test.conf -m local
    
  5. 打完收工

posted @ 2024-12-02 21:48  coderliu_cn  阅读(418)  评论(1)    收藏  举报