Flink 入门实战之五Source读取kafka数据

Source读取kafka, 解析json数据
  • 依赖
<!-- 属性配置 -->
    <properties>
        <flink.version>1.11.2</flink.version>
        <kafka.version>0.10.2.1</kafka.version>
        <scope>compile</scope>
    </properties>
    <dependencies>
        <!-- flink 依赖 -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.11</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-scala_2.11</artifactId>
            <version>${flink.version}</version>
            <scope>${scope}</scope>
        </dependency>

        <!-- kafka api -->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-kafka_2.11</artifactId>
            <version>${flink.version}</version>
            <scope>${scope}</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>${kafka.version}</version>
        </dependency>
        <!-- json 解析 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>
  • 源码
package com.day
import java.util.Properties

import com.alibaba.fastjson.JSON
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer

object SourceKafka {
  def main(args: Array[String]): Unit = {
    // 1、获取流式环境变量
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    // 2、从kafka读取数据
    val properties = new Properties()
    properties.setProperty("bootstrap.servers", "jeff200:9092")
    val kfkConsumer = new FlinkKafkaConsumer[String](
      "test",
      new SimpleStringSchema(),
      properties
    )
    //从头开始读取
    kfkConsumer.setStartFromEarliest()
    val dataStream = env.addSource(kfkConsumer)
        .map(x=>{
          val obj = JSON.parseObject(x)
          val ts = obj.getInteger("ts")
          val uid = JSON.parseObject(obj.getString("common")).getInteger("uid")
          (uid, ts)
        })
    // 3、打印数据
    dataStream.print()
    // 4、执行任务
    env.execute("kafka Job")
  }
}
  • 启动kafka并创建主题和写入json数据
// nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
// nohup bin/kafka-server-start.sh config/server.properties &
// bin/kafka-topics.sh --create --zookeeper jeff200:2181 --replication-factor 1 --partitions 1 --topic test
// bin/kafka-topics.sh --list --zookeeper jeff200:2181
// bin/kafka-console-producer.sh --broker-list jeff200:9092 --topic test
// {"ts": 1607003021, "common": {"uid": 1}, "displays": [{"item": 1, "type": "goods"},{"item": 2, "type": "goods"}]}
  • 程序运行结果
    在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值