flink订阅(读取)kafka的数据

1.在服务器上通过这条命令查看kafka主题的数据

kafka-console-consumer.sh --bootstrap-server bigdata1:9092 --from-beginning --topic 主题名称

kafka-console-consumer.sh --bootstrap-server bigdata1:9092 --from-beginning --topic ChangeRecor

我的主题的数据是这样的:

2.再IDEA中导入配置文件到pox.xml中

<!--flink连接kafka配置-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.11</artifactId>
            <version>1.14.0</version>
        </dependency>
<!--配置redis链接-->
        <dependency>
            <groupId>org.apache.bahir</groupId>
            <artifactId>flink-connector-redis_2.12</artifactId>
            <version>1.1.0</version>
        </dependency>

3.建立flink环境

    val env = StreamExecutionEnvironment.getExecutionEnvironment

4.设置并行度

env.setParallelism(1)  // 设置并行度为1,单节点运行

5.与kafka配置属性建立连接

val kafkaSource = KafkaSource.builder()
      .setBootstrapServers("bigdata1:9092") // 设置kafka服务器地址
      .setTopics("ChangeRecord") // flink需要订阅的主题
      .setValueOnlyDeserializer(new SimpleStringSchema()) // 设置反序列化器,将kafka的字节数据转换为字符串
      .setStartingOffsets(OffsetsInitializer.latest()) // 设置读取偏移量,从kafka最新的记录开始读取
      .build()

6.开始读取kafka的数据,并做无水印设置

    val produceDataStream = env.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "kafka_flink_redis")
// 第一个参数是刚刚与建立连接kafka的配置属性
// 第二个参数是水印配置,我配置的是无水印
// 第三个参数是起一个名字,用于标识或描述这个特定的数据流

7.查看读取的数据

val kafka_value = produceDataStream   // 读取的数据
      .map(x => {
        val data = x.split(",")   // 每一条记录以‘,’进行分割
        (data(1).toInt, data(3), data(4))     // 输出:Change(110,预警,2024-01-18 14:09:36)
      })


kafka_value.print()   // 打印输出


env.execute()  // 开始执行(注意一定要有这个)

打印的数据

7.注意:

这个会以逗号进行分割,分割成数组,要以数组的方式进行读取,上图的红色数字是数组的索引,就像我上面代码中‘data(0)’这个代表我要读取索引为0的元素。

②所写的代码是只读取最新的流数据,所以要让kafka主题里的数据一直生成,那样才能读取到数据

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值