写点什么

开源数据集成平台 SeaTunnel:MySQL 实时同步到 es

作者:javalover123
  • 2023-07-05
    广东
  • 本文字数:1719 字

    阅读完需:约 6 分钟

一、前言

  • 最近,项目有几个表要从 MySQL 实时同步到 另一个 MySQL,也有同步到 ElasticSearch 的。

  • 目前,公司生产环境同步,用的是 阿里云的 DTS,每个同步任务每月 500 多元,有点小贵。

  • 其他环境:MySQL 同步到 ES,用的是 CloudCanal,不支持 数据转换,添加同步字段比较麻烦,社区版限制 5 个任务,不够用;MySQL 同步到 MySQL,用的是 debezium,不支持写入 ES。

  • 恰好 3 年前用过 SeaTunnel 的 前身 WaterDrop,那就开始吧。本文以 2.3.1 版本,Ubuntu 系统为例

二、开源数据集成平台SeaTunnel

1. 简介

  • SeaTunnel 是 Apache 软件基金会下的一个高性能开源大数据集成工具,为数据集成场景提供灵活易用、易扩展并支持千亿级数据集成的解决方案。

  • Seaunnel 为实时(CDC)和批量数据提供高性能数据同步能力,支持十种以上数据源,已经在 B 站、腾讯云、字节等数百家公司使用。

  • 可以选择 SeaTunnel Zeta 引擎上运行,也可以在 Apache Flink 或 Spark 引擎上运行。

2. 安装


Caused by: java.sql.SQLException: No suitable driver        at java.sql/java.sql.DriverManager.getDriver(DriverManager.java:298)        at com.zaxxer.hikari.util.DriverDataSource.<init>(DriverDataSource.java:106)        ... 20 more
... 11 more
at org.apache.seatunnel.engine.client.job.ClientJobProxy.waitForJobComplete(ClientJobProxy.java:122) at org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand.execute(ClientExecuteCommand.java:181)
复制代码

3. 安装 connectors 插件

  • 执行 bash bin/install-plugin.sh,国内建议先配置 maven 镜像,不然容易失败 或者 慢

  • 官方文档写着执行 sh bin/install-plugin.sh,我在 Ubuntu 20.04.2 LTS 上执行报错(bin/install-plugin.sh: 54: Bad substitution),我提了PR

4. 编写配置文件

  • config 目录下,新建配置文件:如 mysql-es-test.conf

  • 添加 env 配置因为是 实时同步,这里 job.mode = "STREAMING",execution.parallelism 是 并发数


env {  # You can set flink configuration here  execution.parallelism = 1  job.mode = "STREAMING"  checkpoint.interval = 2000  #execution.checkpoint.interval = 10000  #execution.checkpoint.data-uri = "hdfs://localhost:9000/checkpoint"}
复制代码



source {  MySQL-CDC {    result_table_name = "t1"    server-id = 5656    username = "root"    password = "pwd"    table-names = ["db.t1"]    base-url = "jdbc:mysql://host:3306/db"  }}
复制代码



transform {  Sql {    source_table_name = "t1"    query = "SELECT id, alias_name aliasName FROM t1 WHERE c1 = '1'"  }}
复制代码



sink {    Elasticsearch {        hosts = ["host:9200"]        username = "elastic"        password = "pwd"
index = "index_t1" # cdc required options primary_keys = ["id"] }}
复制代码


  • 最终配置截图

5. 启动任务

这里以 本地模式为例,另有 集群、spark、flink 模式。


./bin/seatunnel.sh -e local --config ./config/mysql-es-test.conf
复制代码

三、总结


本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明,否则将追究法律责任。


本文首先发布于 https://www.890808.xyz/ ,其他平台需要审核更新慢一些。



发布于: 刚刚阅读数: 4
用户头像

javalover123

关注

还未添加个人签名 2016-07-16 加入

还未添加个人简介

评论

发布
暂无评论
开源数据集成平台SeaTunnel:MySQL实时同步到es_同步_javalover123_InfoQ写作社区