Spark Streaming + Kafka整合

兩種常用的Spark Streaming和Kafka整合方法:
1. CreateStream:
傳統方法,使用了接收器和Kafka的高階API
接收器接收到的數據被存在Spark executors中,隨後streaming的任務會處理數據。
缺點:會丟失數據,除非設置streaming的write ahead logs
2. CreateDirectStream:
新方法,不使用接收器
優勢:優化並行結構,kafka分區和RDD分區一一對應;不需要爲了數據恢復而寫write ahead logs,數據直接從kafka恢復;不會出現offset數據的不一致,offset全部由streaming維護

CreateStream

1.添加maven依賴:

 groupId = org.apache.spark
 artifactId = spark-streaming-kafka_2.10
 version = 1.6.0

2.代碼(API docs):

 import org.apache.spark.streaming.kafka._

 val kafkaStream = KafkaUtils.createStream(streamingContext, 
     [ZK quorum], [consumer group id], [per-topic number of Kafka partitions to consume])

3.注意:
Kafka的topic partitions和Streaming中RDD的partition不是對應的

CreateDirectStream

1.添加maven依賴:

 groupId = org.apache.spark
 artifactId = spark-streaming-kafka_2.10
 version = 1.6.0

2.代碼(API docexample

 import org.apache.spark.streaming.kafka._

 val directKafkaStream = KafkaUtils.createDirectStream[
     [key class], [value class], [key decoder class], [value decoder class] ](
     streamingContext, [map of Kafka parameters], [set of topics to consume])

最後生成的directKafkaStream是一個流stream,可以拆分成一個個RDD進行操作
附: 官方文檔補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章