教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

SparkStreaming連接Kafka兩種方式

更新時(shí)間:2021年12月16日18時(shí)18分 來(lái)源:傳智教育 瀏覽次數(shù):

Spark Streaming支持從多種數(shù)據(jù)源獲取數(shù)據(jù),其中就包括 Kafka,要想從 數(shù)據(jù)源獲取數(shù)據(jù),首先要建立兩者之間的連接,本節(jié)來(lái)介紹兩種連接Kafka的方式。

1.Receiver based Approach:

(1)KafkaUtils.createDstream基于接收器方式,消費(fèi)Kafka數(shù)據(jù)已淘汰企業(yè)中不再使用;

(2)Receiver作為常駐的Task運(yùn)行在Executor等待數(shù)據(jù),但是一個(gè)Receiver效率低,需要開啟多個(gè),再手動(dòng)合并數(shù)據(jù)(union),再進(jìn)行處理,很麻煩;

(3)Receiver那臺(tái)機(jī)器掛了,可能會(huì)丟失數(shù)據(jù),所以需要開啟WAL(預(yù)寫日志)保證數(shù)據(jù)安全,那么效率又會(huì)降低;

(4)Receiver方式是通過zookeeper來(lái)連接kafka隊(duì)列,調(diào)用Kafka高階API,offset存儲(chǔ)在zookeeper,由Receiver維護(hù)

(5)Spark在消費(fèi)的時(shí)候?yàn)榱吮WC數(shù)據(jù)不丟也會(huì)在Checkpoint中存一份offset,可能會(huì)出現(xiàn)數(shù)據(jù)不一致;

2.· Direct Approach (No Receivers):

(1)KafkaUtils.createDirectStream直連方式,Streaming中每批次的每個(gè)job直接調(diào)用Simple Consumer API獲取對(duì)應(yīng)Topic數(shù)據(jù),此種方式使用最多,面試時(shí)被問的最多;

(2)Direct方式是直接連接kafka分區(qū)來(lái)獲取數(shù)據(jù),從每個(gè)分區(qū)直接讀取數(shù)據(jù)大大提高并行能力

(3)Direct方式調(diào)用Kafka低階API(底層APl),offset自己存儲(chǔ)和維護(hù),默認(rèn)由Spark維護(hù)在checkpoint中,消除了與zk不一致的情況

(4)當(dāng)然也可以自己手動(dòng)維護(hù),把offset存在MySQL/Redis中;

兩種API

Spark Streaming與Kafka集成,有兩套API,原因在于Kafka Consumer API有兩套,文檔:

http://spatkapathe.org/docs/2.4.5/streaming-kafka-integration.html

http://spark apache.org/docs/latest/streaming-kafka-integration.html

Kafka0.8.x版本-早已淘汰

底層使用老的KafkaAPI:Old Kafika Consumer API

支持Receiver(已淘達(dá))和Direct模式:

Kafka 0.10.x版本-開發(fā)中使用

底層使用新的KafkaAPI:New Kafka Consumer API

只支持Direct模式

兩個(gè)版本API

好口碑IT培訓(xùn)






猜你喜歡:

怎樣使用Spark Shell來(lái)讀取HDFS文件?

Spark Streaming框架有什么特點(diǎn)?【大數(shù)據(jù)培訓(xùn)】

Spark Streaming工作原理是什么?

怎樣一鍵啟動(dòng)或關(guān)閉Kafka?有快捷的方法嗎?

傳智教育python+大數(shù)據(jù)開發(fā)工程師培訓(xùn)

0 分享到:
和我們?cè)诰€交談!