开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

FlinkCDC读取MySQL,并行度高于1就无法捕获更新数据

FlinkCDC读取MySQL,并行度高于1就无法捕获更新数据,并且给fromSource单独设置并行度也未能成功捕获更新数据。


    private SingleOutputStreamOperator<TableProcess> readConfig(StreamExecutionEnvironment env) {
        MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
                .hostname("Master")
                .port(3306)
                .databaseList("xxx") // set captured database
                .tableList("xxx.aaa") // set captured table
                .username("root")
                .password("xxxxxx")
                .deserializer(new JsonDebeziumDeserializationSchema()) // converts SourceRecord to JSON String
                .build();

        return env
                .fromSource(
                        mySqlSource,
                        WatermarkStrategy.noWatermarks(),
                        "Mysql Source")
                .setParallelism(1)
                .map(json -> {
                    JSONObject jsonObj = JSON.parseObject(json);
                    return jsonObj.getObject("after", TableProcess.class);
                });
    }

这段代码单独拿出来,env并行度设置为1是可以捕获更新数据的。

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.13.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>1.13.0</version>
        </dependency>

        <dependency>
            <groupId>com.ververica</groupId>
            <artifactId>flink-connector-mysql-cdc</artifactId>
            <version>2.1.0</version>
        </dependency>

求助大佬。

展开
收起
游客jrhsxavno5vkq 2023-08-28 10:42:14 260 0
1 条回答
写回答
取消 提交回答
  • 出现这个问题的原因是,FlinkCDC 默认使用单线程来处理数据,当并行度高于 1 时,就会创建多个线程来处理数据,每个线程会从 MySQL 中接收到不同的数据,导致数据重复。
    解决这个问题的方法是,修改 FlinkCDC 的配置,设置 parallelism.max 的值为 1。

    2023-09-13 14:49:38
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像