在用Apache SeaTunnel研发SM2加密组件过程中,发现社区关于本地调试SeaTunnel文章过于简单,很多情况没有说明,于是根据自己遇到问题总结这篇文档。SeaTunnel本地调试官方文档,希望对大家有所帮助!
使用的引擎为Flink(不需要下载,SeaTunnel中有加载依赖),输入输出方式为:mysql to mysql
一、工具说明
1.idea2023.3.2
2.MySQL8.0.36
3.jdk1.8
4.seatunnel 2.3.4-release
二、开发前准备
1.从github拉下来代码
github地址:https://github.com/apache/seatunnel/
2.在控制台运行编译
编译指令为:
./mvnw clean install
Apache SeaTunnel2.3.3版本的编译可以参考大飞哥的博客4.2.1
3.创建数据库创建表
(注意,数据库不要使用mysql系统库(如:information_schema,mysql,performance_schema,sys),需要自己创建新的数据库,seatunnel会排除这些系统库,2.3.4新增,2.3.3没有这个判断)。
4.添加配置文件
在seatunnel-flink-connector-v2-example项目的resource/examples下添加需要运行的配置文件,并修改SeaTunnelApiExample.java指向的文件路径
test.json(seatunnel支持运行json和config格式的配置文件)
{ "env" : { "job.name" : "test" }, "source" : [ { "query" : "select t.id,t.name,t.depId,t.salary from seatunnel.t_employee t", "fetch_size" : 0, "url" : "jdbc:mysql://localhost:3306/seatunnel", "driver" : "com.mysql.cj.jdbc.Driver", "user" : "root", "password" : "123456", "plugin_name" : "Jdbc", "result_table_name" : "_seatunnel_table_jdbc_8" } ], "transform" : [ { "original_text" : "name", "plugin_name" : "Sm2Encrypt", "result_table_name" : "_seatunnel_table_sm2_9", "source_table_name" : "_seatunnel_table_jdbc_8" } ], "sink" : [ { "database" : "seatunnel", "table" : "t_employee", "support_upsert_by_query_primary_key_exist" : true, "generate_sink_sql" : true, "primary_keys" : [ "name" ], "max_retries" : 3, "batch_size" : 300, "is_exactly_once" : false, "url" : "jdbc:mysql://localhost:3306/seatunnel", "driver" : "com.mysql.cj.jdbc.Driver", "user" : "root", "password" : "123456", "plugin_name" : "Jdbc", "source_table_name" : "_seatunnel_table_sm2_9" } ] }
Sm2Encrypt是我自己研发的国密加密组件,自定义插件的代码可以参考SeaTunnel扩展Transform插件,自定义转换插件
5.添加maven
seatunnel-flink-connector-v2-example项目添加下列pom依赖并刷新maven,没有这些依赖会报错,连接方式用到什么就要添加什么,我这里使用的是connector-jdbc。如果source或sink用到http连接就需要添加connect-http依赖,具体有哪些可以看seatunnel-connectors-v2项目下的包
org.apache.seatunnel connector-jdbc ${project.version}
因为使用的是mysql数据库,所以还需要引入mysql驱动
mysql mysql-connector-java 8.0.27
三、本地调试
1.debug运行
debug运行SeaTunnelApiExample.java下的主类,
就可以在需要调试的地方断点调试了
2.执行结果
本文由 白鲸开源科技 提供发布支持!