Flink+Kafka开发流程

文章目录

  • 第一步:启动zookeeper集群(kafka依赖于zookeeper集群)
  • 第二步:启动kafka集群
  • 第三步:启动程序客户端去消费kafka发送过来的消息
    • kafka连接配置示例:
    • 完整示例:

第一步:启动zookeeper集群(kafka依赖于zookeeper集群)

启动命令:
sh zkServer.sh start
查看状态:
sh zkServer.sh status
关闭命名:
sh zkServer.sh stop

第二步:启动kafka集群

启动命令:
sh kafka-server-start.sh /app/kafka/config/server.properties &
关闭集群:
sh kafka-server-stop.sh stop
查看当前服务器中的所有topic
sh kafka-topics.sh --zookeeper master:2181 --list
创建topic
sh kafka-topics.sh --zookeeper master:2181 --create --replication-factor 3 --partitions 1 --topic sensor
查询topic的内容
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicName --from-beginning
选项说明:
–topic 定义topic名
–replication-factor 定义副本数
–partitions 定义分区数
删除topic
sh kafka-topics.sh --zookeeper master:2181
–delete --topic first
需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。
发送消息
sh kafka-console-producer.sh --broker-list master:9092 --topic sensor

第三步:启动程序客户端去消费kafka发送过来的消息

kafka连接配置示例:

val properties = new Properties()
properties.setProperty("bootstrap.servers", "master:9092")
properties.setProperty("group.id", "consumer-group")
properties.setProperty("key.deserializer",
  "org.apache.kafka.common.serialization.StringDeserializer")
properties.setProperty("value.deserializer",
  "org.apache.kafka.common.serialization.StringDeserializer")
properties.setProperty("auto.offset.reset", "latest")

完整示例:

// 第一步:设置执行环境设定
val env = StreamExecutionEnvironment.getExecutionEnvironment

// 第二步:读取数据 (Source)
// 因为经常是从kafka读取流式的数据,所以多练习从kafka读取数据的方式
// 传入参数(topic,反序列化工具,配置项)
val stream1 = env.addSource(new FlinkKafkaConsumer011[String]("sensor",new SimpleStringSchema(),properties))

// 第三步:对数据集指定转换操作逻辑 (Transform)
val dataStream = stream1.map{line =>
  val wordArr = line.split(",")
  SensorReading(wordArr(0).trim, wordArr(1).trim.toLong, wordArr(2).trim.toDouble)
}
val res = dataStream.keyBy("id")
    .reduce{ (v1, v2) =>
      SensorReading(v1.id, v1.timeStamp + 1, v2.temperature + 10)
    }
// 第四步:指定计算结果输出位置 (Sink)
res.print("stream1")
// 第五步:指定名称并触发流式任务
env.execute("TransformApiDemo")

你可能感兴趣的:(#,Flink,flink)