Flink doesn‘t support ENFORCED mode for PRIMARY KEY constraint

flinkCDC感知mysql中表的数据的变化的时候,准备采用flinksql来实现,实现代码如下:

java 复制代码
package com.bigdata.cdc;

import org.apache.flink.api.common.RuntimeExecutionMode;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.table.api.Table;
import org.apache.flink.table.api.bridge.java.StreamTableEnvironment;
import org.apache.flink.types.Row;

/**
 * @基本功能:
 * @program:FlinkProject
 * @author: 闫哥
 * @create:2025-06-13 11:01:11
 **/
public class CdcSQLTest {

    public static void main(String[] args) throws Exception {

        //1. env-准备环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
        env.setParallelism(1);
        // 获取tableEnv对象
        // 通过env 获取一个table 环境
        StreamTableEnvironment tenv = StreamTableEnvironment.create(env);

        //2. 创建表对象
        //3. 编写sql语句
        //4. 将Table变为stream流
        tenv.executeSql("CREATE TABLE user_info2 (\n" +
                " id INT NOT NULL primary key,\n" +
                " name STRING,\n" +
                " age int\n" +
                ") WITH (\n" +
                " 'connector' = 'mysql-cdc',\n" +
                " 'hostname' = 'bigdata01',\n" +
                " 'port' = '3306',\n" +
                " 'username' = 'root',\n" +
                " 'password' = '123456',\n" +
                " 'scan.startup.mode' = 'latest-offset', " +
                " 'database-name' = 'cdc_test',\n" +
                " 'table-name' = 'user_info'\n" +
                ")");

        tenv.executeSql("select * from user_info2").print();

        Table table = tenv.sqlQuery("select * from user_info2");
        DataStream<Tuple2<Boolean, Row>> retractStream = tenv.toRetractStream(table, Row.class);
        retractStream.print();


        //5. execute-执行
        env.execute();
    }
}

以上代码会报如下错误:

java 复制代码
Exception in thread "main" org.apache.flink.sql.parser.error.SqlValidateException: Flink doesn't support ENFORCED mode for PRIMARY KEY constraint. ENFORCED/NOT ENFORCED controls if the constraint checks are performed on the incoming/outgoing data. Flink does not own the data therefore the only supported mode is the NOT ENFORCED mode

修改方案:

id INT NOT NULL primary key 修改为 id INT NOT NULL PRIMARY KEY NOT ENFORCED

因为如下:

测试结果如下:

相关推荐
金融小师妹8 小时前
基于多模态宏观建模与历史序列对齐:原油能源供给冲击的“类1970年代”演化路径与全球应对机制再评估
大数据·人工智能·能源
播播资源8 小时前
OpenAI2026 年 3 月 18 日最新 gpt-5.4-nano模型:AI 智能体的“神经末梢”,以极低成本驱动高频任务
大数据·人工智能·gpt
GJGCY9 小时前
中小企业财务AI工具技术评测:四大类别架构差异与选型维度
大数据·人工智能·ai·架构·财务·智能体
九河云10 小时前
云上安全运营中心(SOC)建设:从被动防御到主动狩猎
大数据·人工智能·安全·架构·数字化转型
武子康10 小时前
大数据-252 离线数仓 - Airflow + Crontab 入门实战:定时调度、DAG 编排与常见报错排查
大数据·后端·apache hive
jinanwuhuaguo10 小时前
OpenClaw、飞书、Claude Code、Codex:四维AI生态体系的深度解构与颗粒化对比分析
大数据·人工智能·学习·飞书·openclaw
Rubin智造社10 小时前
# OpenClaude命令实战|核心控制三剑客/reasoning+/verbose+/status 实操指南
大数据·人工智能
华奥系科技11 小时前
智慧经济新格局:解码社区、园区与城市一体化建设逻辑
大数据·人工智能·科技·物联网·安全
TDengine (老段)12 小时前
TDengine IDMP 组态面板 —— 画布
大数据·数据库·物联网·时序数据库·tdengine·涛思数据