flinksql 读取cdc如何攒批插入目标表

文章讲述了使用ApacheFlink处理大数据时,如何通过调整JDBC连接参数`rewriteBatchedStatements`来优化从源表(gzzx_8717_jc_yljcxxb)到目标表(sw_js_jc_yljcxxb_1)的批量插入速度,以实现高效数据同步的过程。
摘要由CSDN通过智能技术生成

背景:一张3000多万的表数据想同步到一张新表中,先要进行初始化然后增量同步,但是根据官网修改攒批参数后不起作用,数据写入的速度没有明显的加快

参考帖子【实战02】flinksql mysql真正的批量插入_flink 批量插入mysql-CSDN博客

结果代码

需要jdbc协议中的参数中加入rewriteBatchedStatements。 于是最后我的flinksql改成了下面的样子,问题得到解决。


        
        //cdc读取gzzx_8717_jc_yljcxxb 表数据
        String sourcesql = "CREATE TABLE `gzzx_8717_jc_yljcxxb` (\n" +
                "  `czdm` string ,\n" +
                "  `czmc` string ,\n" +
                "  `sj` timestamp,\n" +
                "  `jyl` decimal(26,2)  ,\n" +
                "  `yllx` string,\n" +
                "  `ssdw` string,\n" +
                "  `swm` string,\n" +
                "  `jxsj` timestamp  ,\n" +
                "  `rksj` timestamp  ,\n" +
                "  `bwfssj` timestamp  ,\n" +
                "  `gzjssj` timestamp  ,\n" +
                "  PRIMARY KEY (`czdm`,`sj`,`yllx`) NOT ENFORCED\n" +
                ") WITH (\n" +
                "     'connector' = 'mysql-cdc',\n" +
                "   'hostname' = 'xxx',\n" +
                "   'port' = '15020',\n" +
                "   'username'='sjzx',\n" +
                "   'password'='xxx',\n" +
                "   'database-name' = 'ads_yw',\n" +
                "   'table-name' = 'gzzx_8717_jc_yljcxxb'\n" +
                ")\n";
        tableEnv.executeSql(sourcesql);

     
        //创建写入表连接
        tableEnv.executeSql("CREATE TABLE `sw_js_jc_yljcxxb_1` (\n" +
                "  `czdm` string,\n" +
                "  `czmc` string,\n" +
                "  `sj` timestamp  ,\n" +
                "  `dqjyl` decimal(22,2) ,\n" +
                "  `yllx` string,\n" +
                "  `jslljz` decimal(22,2) ,\n" +
                "  `wfzsdyl` decimal(22,2)  ,\n" +
                "  `lydw` string ,\n" +
                "  `js_src` string,\n" +
                "  `js_dt` timestamp  ,\n" +
                "  PRIMARY KEY (`czdm`,`sj`,`yllx`) NOT ENFORCED \n" +
                ")WITH (\n" +
                "   'connector' = 'jdbc',\n" +
                "   'url' = 'jdbc:mysql://xxx:15020/tmp?rewriteBatchedStatements=true',\n" +
                "   'username'='sjzx',\n" +
                "   'password'='xxx',\n" +
                "   'driver'='com.mysql.cj.jdbc.Driver',\n" +
                "   'table-name' = 'sw_js_jc_yljcxxb_1',\n" +
                "   'sink.buffer-flush.max-rows' = '20000',\n" +
                "   'sink.buffer-flush.interval' = '3000',\n" +
                "   'sink.parallelism' = '4',\n" +
                ")");
        tableEnv.executeSql("insert into sw_js_jc_yljcxxb_1(czdm,czmc,sj,dqjyl,yllx,lydw,js_src)\n" +
                "select czdm,czmc,sj,jyl,yllx,ssdw,'gzzx_8717_jc_yljcxxb' from gzzx_8717_jc_yljcxxb ");


要使用Flink CDC读取MySQL,您需要按照以下步骤进行操作: 1. 首先,您需要从Flink CDC的GitHub发布页面下载最新的jar包flink-sql-connector-mysql-cdc-2.0.2.jar。 2. 接下来,进入Flink的bin目录,并执行./start-cluster.sh命令启动Flink测试环境。 3. 在Flink SQL读取MySQL数据,您需要执行以下步骤: - 进入Flink的bin目录,并执行./sql-client.sh命令启动Flink SQL。 - 在Flink SQL中创建一个,例如,可以使用以下命令创建名为mysql_binlog的: CREATE TABLE mysql_binlog ( id INT NOT NULL, name STRING, description STRING, weight DECIMAL(10,3), PRIMARY KEY(id) NOT ENFORCED ) WITH ( 'connector' = 'mysql-cdc', 'hostname' = '192.168.0.200', 'port' = '3306', 'username' = 'root', 'password' = 'passwd', 'database-name' = 'demo', 'table-name' = 'products' ); 这将使用Flink CDC连接器创建一个名为mysql_binlog的,其中包含了与MySQL数据库中的demo.products相对应的列和设置。您可以根据实际情况修改连接器的配置参数。 以上是使用Flink CDC读取MySQL的步骤。通过执行这些步骤,您可以在Flink中使用CDC功能来读取MySQL数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Flink CDC读取MySQL的例子](https://blog.csdn.net/chrisy521/article/details/121377441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值