Flink Table API读取Kafka数据,并将结果sink到Kafka中

本文记录了使用 Flink 1.13.0 的 Table API 从 Kafka 中读取数据并将其结果写回 Kafka 的过程中遇到的错误及解决方案。在尝试使用已过时的 `tableEnv.connect` 方法后,改为使用 `executeSql`。错误提示缺少 CSV 描述器,通过更新相关依赖解决问题。接着因 Kafka 连接器版本问题导致新的异常,升级连接器版本后,虽然仍有控制台错误,但程序能正常运行并完成数据的读写操作。

最近在小破站上学Flink,跟着做 “Flink Table API读取Kafka数据,并将结果sink到Kafka中”这样一个小练习,感觉平平无奇,但是一直运行报错。内心一阵抓狂,WTF!

废话少叙,切入正题。

使用的是 Flink-1.13.0,Scala版本是 2.12,JDK版本 1.8。

开始,我是这样写的:

1.pom 依赖:

<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>org.apache.flink</groupId>
            <artifactId>flink-clients_2.12</artifactId>
            <version>1.13.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-planner-blink_2.12</artifactId>
            <version>1.13.0</version>
        </dependency>
        <!--<dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-table-api-java-bridge_2.12</artifactId>
            <version>1.13.0</version>
        </dependency>-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-csv</artifactId>
            <version>1.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.12</artifactId>
            <version>1.11.3</version>
        </dependency>
    </dependencies>

2.代码

// 1.创建执行环境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(1);

StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env);

// 2.连接kafka,读取数据
tableEnv.connect(new Kafka()
            .version("0.11")
            .topic("sensor")
            .property("zookeeper.connect", "192.168.56.150:2181")
            .property("bootstrap.servers", "192.168.56.150:9092")
        )   // 连接kafka
        .withFormat(new Csv())   // 定义数据格式化方法: 按照Csv格式进行格式化
        .withSchema(
                new Schema()
                        .field("id", DataTypes.STRING())
                        .field("timestamp", DataTypes.BIGINT())
                        .field("temp", DataTypes.DOUBLE())
        )  //定义表结构
        .createTemporaryTable("inputTable");    // 创建临时表

// 3.过滤数据
Table inputTable = tableEnv.from("inputTable"); // 读取出表
tableEnv.toAppendStream(inputTable, Row.class).print();
Table resultTable = inputTable.select("id, temp").filter("id === 'sensor_5'");

// 4.建立Kafka连接,将结果输出到不同的topic下
tableEnv.connect(new Kafka()
                .version("0.11")
                .topic("sensor_simple")
                .property("zookeeper.connect", "192.168.
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值