Flink+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")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章