Flink1.14.4 与 Flinkcdc 2.2.1 遇keng

<properties>
        <flink.version>1.14.4</flink.version>
        <flinkCDC.version>2.2.1</flinkCDC.version>
</properties>

上面是版本,使用这两个结合,程序运行成功但是不报错,数据也不打印,有人遇到这个问题吗??可以留言一下,解决方法。

换成Flink  1.13.5  , 数据就可以正常监控打印

下面是代码:

Main.class

public class Main {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        Properties prop = new Properties();
        prop.setProperty("autoReconnect","true");


        MySqlSource<String> mySqlSource = MySqlSource.<String>builder()
                .hostname("localhost")
                .port(3306)
                .databaseList("flink") // set captured database
                .tableList("flink.t_ranking_goods") // set captured table
                .username("root")
                .password("123456")
                .startupOptions(StartupOptions.initial())
                .deserializer(new CustomerDeserialization()) // converts SourceRecord to JString
                //jdbc连接参数配置
                .jdbcProperties(prop)
                .build();


        // enable checkpoint
        env.enableCheckpointing(3000);

        env.fromSource(mySqlSource, WatermarkStrategy.noWatermarks(), "MySQL Source")
                // set 4 parallel source tasks
                .setParallelism(4)
                .print().setParallelism(1); // use parallelism 1 for sink to keep message ordering

        env.execute("Print MySQL ");
    }
}
CustomerDeserialization.class
public class CustomerDeserialization implements DebeziumDeserializationSchema<String> {

    @Override
    public void deserialize(SourceRecord sourceRecord, Collector<String> collector) throws Exception {

        HashMap<String, Object> hashMap = new HashMap<>();

        String topic = sourceRecord.topic();
        String[] split = topic.split("[.]");
        String database = split[1];
        String table = split[2];
        hashMap.put("database",database);
        hashMap.put("table",table);

        //获取操作类型
        Envelope.Operation operation = Envelope.operationFor(sourceRecord);
        //获取数据本身
        Struct struct = (Struct)sourceRecord.value();
        Struct after = struct.getStruct("after");
        Struct before = struct.getStruct("before");
        /*
         	 1,同时存在 beforeStruct 跟 afterStruct数据的话,就代表是update的数据
             2,只存在 beforeStruct 就是delete数据
             3,只存在 afterStruct数据 就是insert数据
        */
        if (after != null) {
            //insert
            Schema schema = after.schema();
            HashMap<String, Object> hm = new HashMap<>();
            for (Field field : schema.fields()) {
                hm.put(field.name(), after.get(field.name()) == null?"":after.get(field.name()) );
            }

            hashMap.put("data",hm);
        }else if (before !=null){
            //delete
            Schema schema = before.schema();
            HashMap<String, Object> hm = new HashMap<>();
            for (Field field : schema.fields()) {
                hm.put(field.name(), before.get(field.name()) == null?"":before.get(field.name()));
            }
            hashMap.put("data",hm);
        }else if(before !=null && after !=null){
            //update
            Schema schema = after.schema();
            HashMap<String, Object> hm = new HashMap<>();
            for (Field field : schema.fields()) {
                hm.put(field.name(), after.get(field.name()) == null?"":after.get(field.name()));
            }
            hashMap.put("data",hm);
        }

        String type = operation.toString().toLowerCase();
        if ("create".equals(type)||"read".equals(type)) {
            type = "insert";
        }else if("delete".equals(type)) {
            type = "delete";
        }else if("update".equals(type)) {
            type = "update";
        }

        hashMap.put("type",type);

        Gson gson = new Gson();
//        System.out.println(gson.toJson(hashMap));
        collector.collect(gson.toJson(hashMap));

    }

    @Override
    public TypeInformation<String> getProducedType() {
        return TypeInformation.of(String.class);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Flink 1.14.4是Apache Flink的一个版本,它是开源分布式流处理框架。如果您想要下载Flink 1.14.4,您可以按照以下步骤进行操作: 1. 打开Flink的官方网站。您可以在浏览器中搜索“Apache Flink”来找到官方网站。 2. 导航到Flink的下载页面。在官方网站上,通常可以在主菜单或主页上找到一个“下载”或“获取Flink”等类似的选项。 3. 选择适合您系统的二进制下载包。Flink支持多种操作系统,例如Linux、Windows和Mac OS。请根据您的操作系统选择相应的二进制下载包。 4. 选择Flink版本。在下载页面上,您可能会看到多个版本Flink可供选择。请确保选择1.14.4版本,因为这是您想要下载的特定版本。 5. 点击下载链接并等待下载完成。一旦您点击了下载链接,下载过程将自动开始。请耐心等待,直到下载完成。 6. 解压下载的文件。一旦下载完成,您将得到一个压缩包。请使用适当的解压工具(如WinRAR或7-Zip)解压文件到您想要安装Flink的目标文件夹。 7. 配置Flink。解压完文件后,您可以根据Flink的官方文档进行配置。配置过程包括设置环境变量、配置文件路径和其他必要的参数。 8. 启动Flink。完成配置后,您可以启动Flink并开始使用它了。 需要注意的是,以上步骤仅为大致指引,实际操作可能会有所不同,具体取决于您的操作系统和网络环境。建议您在下载和配置过程中参考Flink官方文档,以获得更详细和准确的指导。 ### 回答2: 要下载Flink 1.14.4,可以按照以下步骤进行操作: 首先,打开Flink的官方网站(https://flink.apache.org/)。 在网站的首页上方,你会看到一个名为"Download"的标签。点击该标签。 在下载页面上,你可以看到列出的所有可用版本。找到Flink 1.14.4,并点击下载链接。 下载链接可能会引导你到一个可用镜像的列表页面。选择一个适合你的地理位置和网络连接速度的镜像站点,并点击该站点的链接。 在镜像站点上,你会找到Flink 1.14.4的下载文件。根据你所使用的操作系统,选择合适的二进制文件进行下载。 Flink支持多种操作系统,如Linux、Windows和MacOS。 下载完成后,你将得到一个压缩文件。解压缩该文件以获取Flink 1.14.4的安装包。 安装包中会包含Flink的可执行文件和其他必要的文件。按照Flink的官方文档和指南,进行进一步的配置和安装。 完成配置后,你就可以开始使用Flink 1.14.4进行大数据流处理和批处理的开发和运行了。 总结起来,下载Flink 1.14.4可以通过以下几个步骤完成:打开官方网站、找到下载页面、选择镜像、下载合适的二进制文件、解压缩安装包、进行配置和安装,最后开始使用Flink 1.14.4。 ### 回答3: 要下载Flink 1.14.4,可以按照以下步骤进行操作: 1. 打开Flink的官方网站(https://flink.apache.org/)。 2. 在首页上找到"Download"或"下载"的按钮,并点击进入下载页面。 3. 在下载页面,可以看到Flink的不同版本和发行版本的列表。找到并点击Flink 1.14.4版本。 4. 在Flink 1.14.4版本的下载页面,可以看到不同的发行版(例如:源码、二进制包、Docker镜像等)。选择适合你需求的发行版,比如选择二进制包。 5. 点击选择的发行版后,选择一个可用的下载源,例如国内的镜像站点或官方的下载源。 6. 点击下载链接,开始下载Flink 1.14.4的二进制包。 7. 下载完成后,解压缩二进制包到指定文件夹中。 8. 打开命令行终端,进入解压缩后的文件夹,并执行相应的操作命令,如启动Flink集群或运行Flink作业。 以上就是下载Flink 1.14.4的大致步骤。当然,也可以根据自己实际的需求和环境配置,选择其他发行版或者其他下载方法进行安装。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值