spark streaming 和 kafka兩種連接方式對(duì)比

1、 createDirectStream
自 Spark-1.3.0 起今豆,提供了不需要 Receiver 的方法灯蝴。替代了使用 receivers 來接收數(shù)據(jù),該方法定期查詢每個(gè) topic+partition 的 lastest offset聂渊,并據(jù)此決定每個(gè) batch 要接收的 offsets 范圍
? 簡(jiǎn)化并行:不再需要?jiǎng)?chuàng)建多個(gè) kafka input DStream 然后再 union 這些 input DStream差购。使用 directStream,Spark Streaming會(huì)創(chuàng)建與 Kafka partitions 相同數(shù)量的 paritions 的 RDD汉嗽,RDD 的 partition與 Kafka 的 partition 一一對(duì)應(yīng)欲逃,這樣更易于理解及調(diào)優(yōu)
? 高效:在方式一中要保證數(shù)據(jù)零丟失需要啟用 WAL(預(yù)寫日志),這會(huì)占用更多空間饼暑。而在方式二中稳析,可以直接從 Kafka 指定的 topic 的指定 offsets 處恢復(fù)數(shù)據(jù),不需要使用 WAL
? 恰好一次語(yǔ)義保證:基于Receiver方式使用了 Kafka 的 high level API 來在 Zookeeper 中存儲(chǔ)已消費(fèi)的 offsets弓叛。這在某些情況下會(huì)導(dǎo)致一些數(shù)據(jù)被消費(fèi)兩次彰居,比如 streaming app 在處理某個(gè) batch 內(nèi)已接受到的數(shù)據(jù)的過程中掛掉,但是數(shù)據(jù)已經(jīng)處理了一部分邪码,但這種情況下無(wú)法將已處理數(shù)據(jù)的 offsets 更新到 Zookeeper 中裕菠,下次重啟時(shí),這批數(shù)據(jù)將再次被消費(fèi)且處理闭专∨耍基于direct的方式,使用kafka的簡(jiǎn)單api影钉,Spark Streaming自己就負(fù)責(zé)追蹤消費(fèi)的offset画髓,并保存在checkpoint中。Spark自己一定是同步的平委,因此可以保證數(shù)據(jù)是消費(fèi)一次且僅消費(fèi)一次奈虾。這種方式中,只要將 output 操作和保存 offsets 操作封裝成一個(gè)原子操作就能避免失敗后的重復(fù)消費(fèi)和處理廉赔,從而達(dá)到恰好一次的語(yǔ)義(Exactly-once)

2肉微、 createStream
這種方法使用一個(gè) Receiver 來接收數(shù)據(jù)徘郭。在該 Receiver 的實(shí)現(xiàn)中使用了 Kafka high-level consumer API鼓黔。Receiver 從 kafka 接收的數(shù)據(jù)將被存儲(chǔ)到 Spark executor 中徐绑,隨后啟動(dòng)的 job 將處理這些數(shù)據(jù)做鹰。
在默認(rèn)配置下眶痰,該方法失敗后會(huì)丟失數(shù)據(jù)(保存在 executor 內(nèi)存里的數(shù)據(jù)在 application 失敗后就沒了)诊杆,若要保證數(shù)據(jù)不丟失船侧,需要啟用 WAL(即預(yù)寫日志至 HDFS蔬螟、S3等),這樣再失敗后可以從日志文件中恢復(fù)數(shù)據(jù)铁孵。
在該函數(shù)中锭硼,會(huì)新建一個(gè) KafkaInputDStream對(duì)象,KafkaInputDStream繼承于 ReceiverInputDStream蜕劝。KafkaInputDStream實(shí)現(xiàn)了getReceiver方法檀头,返回接收器的實(shí)例

 def getReceiver(): Receiver[(K, V)] = {
    if (!useReliableReceiver) {
      //< 不啟用 WAL
      new KafkaReceiver[K, V, U, T](kafkaParams, topics, storageLevel)
    } else {
      //< 啟用 WAL
      new ReliableKafkaReceiver[K, V, U, T](kafkaParams, topics, storageLevel)
    }
  }

需要注意的點(diǎn):
? Kafka Topic 的 partitions 與RDD 的 partitions 沒有直接關(guān)系,不能一一對(duì)應(yīng)岖沛。如果增加 topic 的 partition 個(gè)數(shù)的話僅僅會(huì)增加單個(gè) Receiver 接收數(shù)據(jù)的線程數(shù)鳖擒。事實(shí)上,使用這種方法只會(huì)在一個(gè) executor 上啟用一個(gè) Receiver烫止,該 Receiver 包含一個(gè)線程池蒋荚,線程池的線程個(gè)數(shù)與所有 topics 的 partitions 個(gè)數(shù)總和一致,每條線程接收一個(gè) topic 的一個(gè) partition 的數(shù)據(jù)馆蠕。而并不會(huì)增加處理數(shù)據(jù)時(shí)的并行度期升。
? 對(duì)于一個(gè) topic,可以使用多個(gè) groupid 相同的 input DStream 來使用多個(gè) Receivers 來增加并行度互躬,然后 union 他們播赁;對(duì)于多個(gè) topics,除了可以用上個(gè)辦法增加并行度外吼渡,還可以對(duì)不同的 topic 使用不同的 input DStream 然后 union 他們來增加并行度
? 如果你啟用了 WAL容为,為能將接收到的數(shù)據(jù)將以 log 的方式在指定的存儲(chǔ)系統(tǒng)備份一份,需要指定輸入數(shù)據(jù)的存儲(chǔ)等級(jí)為 StorageLevel.MEMORY_AND_DISK_SER 或 StorageLevel.MEMORY_AND_DISK_SER_2

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寺酪,一起剝皮案震驚了整個(gè)濱河市坎背,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寄雀,老刑警劉巖得滤,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盒犹,居然都是意外死亡懂更,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門急膀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沮协,“玉大人,你說我怎么就攤上這事卓嫂】对荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵命黔,是天一觀的道長(zhǎng)呜呐。 經(jīng)常有香客問我,道長(zhǎng)悍募,這世上最難降的妖魔是什么蘑辑? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮坠宴,結(jié)果婚禮上洋魂,老公的妹妹穿的比我還像新娘。我一直安慰自己喜鼓,他們只是感情好副砍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庄岖,像睡著了一般豁翎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上隅忿,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天心剥,我揣著相機(jī)與錄音,去河邊找鬼背桐。 笑死优烧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的链峭。 我是一名探鬼主播畦娄,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼弊仪!你這毒婦竟也來了熙卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤励饵,失蹤者是張志新(化名)和其女友劉穎再膳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曲横,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喂柒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禾嫉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灾杰。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熙参,靈堂內(nèi)的尸體忽然破棺而出艳吠,到底是詐尸還是另有隱情,我是刑警寧澤孽椰,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布昭娩,位于F島的核電站凛篙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏栏渺。R本人自食惡果不足惜呛梆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磕诊。 院中可真熱鬧填物,春花似錦、人聲如沸霎终。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莱褒。三九已至击困,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間广凸,已是汗流浹背沛励。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炮障,地道東北人目派。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胁赢,于是被迫代替她去往敵國(guó)和親企蹭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容