StructuredStreaming整合Kafka

StructuredStreaming整合Kafka
官网介绍
http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html
在这里插入图片描述
整合环境准备
●启动kafka
/export/servers/kafka/bin/kafka-server-start.sh -daemon /export/servers/kafka/config/server.properties
●向topic中生产数据
/export/servers/kafka/bin/kafka-console-producer.sh --broker-list hadoop01:9092 --topic 18BD3401
代码演示:

package StructuredStreaming_4_16
import org.apache.spark.SparkContext
import org.apache.spark.sql.{DataFrame, Dataset, Row, SparkSession}
import org.apache.spark.sql.streaming.{DataStreamReader, Trigger}
object StructStreaming_kafka {
def main(args: Array[String]): Unit = {
//创建SparkSession
val spark: SparkSession = SparkSession.builder().master(“local[*]”).appName("").getOrCreate()
val sc: SparkContext = spark.sparkContext
sc.setLogLevel(“WARN”)
//读取实时数据 数据(key value)不是字符串
val kafkaDRow: DataFrame = spark.readStream.format(“kafka”)
.option(“kafka.bootstrap.servers”, “hadoop01:9092,hadoop02:9092,hadoop03:9092”)
.option(“subscribe”, “18BD3401”)
.load()
import spark.implicits._
val kafkaString: Dataset[(String, String)] =
kafkaDRow.selectExpr(“CAST(key AS String)”, “CAST(value AS String)”).as[(String, String)]
//数据预处理和数据计算
val word: Dataset[String] = kafkaString.flatMap(a => a._2.split(" "))
//使用DSL (SQL)对数据进行计算
val WordCount: Dataset[Row] = word.groupBy(“value”).count().sort($“count”)
//输出(启动和等待关闭)
WordCount.writeStream
//尽快执行
.trigger(Trigger.ProcessingTime(0))
//数据输出到控制台
.format(“console”)
//输出所有数据
.outputMode(“complete”)
//开始计算
.start()
//等待关闭
.awaitTermination()
}
}

注意:下面的参数是不能被设置的,否则kafka会抛出异常:
group.id:kafka的source会在每次query的时候自定创建唯一的group id
auto.offset.reset :为了避免每次手动设置startingoffsets的值,structured streaming在内部消费时会自动管理offset。这样就能保证订阅动态的topic时不会丢失数据。startingOffsets在流处理时,只会作用于第一次启动时,之后的处理都会自动的读取保存的offset。
key.deserializer,value.deserializer,key.serializer,value.serializer 序列化与反序列化,都是ByteArraySerializer
enable.auto.commit:Kafka源不支持提交任何偏移量

发布了238 篇原创文章 · 获赞 429 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/qq_45765882/article/details/105564130