Spark Streaming使用Kafka保證資料零丟失

weixin_33890499發表於2018-10-04

spark streaming從1.2開始提供了資料的零丟失,想享受這個特性,需要滿足如下條件:
資料輸入需要可靠的sources和可靠的receivers
應用metadata必須通過應用driver checkpoint
WAL(write ahead log)

可靠的sources和receivers

spark streaming可以通過多種方式作為資料sources(包括kafka),輸入資料通過receivers接收,通過replication儲存於spark中(為了faultolerance,預設複製到兩個spark executors),如果資料複製完成,receivers可以知道(例如kafka中更新offsets到zookeeper中)。這樣當receivers在接收資料過程中crash掉,不會有資料丟失,receivers沒有複製的資料,當receiver恢復後重新接收。


5501600-e5b7c0e722353bb6.png

metadata checkpoint

可靠的sources和receivers,可以使資料在receivers失敗後恢復,然而在driver失敗後恢復是比較複雜的,一種方法是通過checkpoint metadata到HDFS或者S3。metadata包括:
configuration
code
一些排隊等待處理但沒有完成的RDD(僅僅是metadata,而不是data)


5501600-1cb44351ce9428cb.png

這樣當driver失敗時,可以通過metadata checkpoint,重構應用程式並知道執行到那個地方。

資料可能丟失的場景

可靠的sources和receivers,以及metadata checkpoint也不可以保證資料的不丟失,例如:
兩個executor得到計算資料,並儲存在他們的記憶體中
receivers知道資料已經輸入
executors開始計算資料
driver突然失敗
driver失敗,那麼executors都會被kill掉
因為executor被kill掉,那麼他們記憶體中得資料都會丟失,但是這些資料不再被處理
executor中的資料不可恢復

WAL

為了避免上面情景的出現,spark streaming 1.2引入了WAL。所有接收的資料通過receivers寫入HDFS或者S3中checkpoint目錄,這樣當driver失敗後,executor中資料丟失後,可以通過checkpoint恢復。


5501600-119d965eef99a033.png

At-Least-Once

儘管WAL可以保證資料零丟失,但是不能保證exactly-once,例如下面場景:
Receivers接收完資料並儲存到HDFS或S3
在更新offset前,receivers失敗了


5501600-65477aa3742931b7.png
  • Spark Streaming以為資料接收成功,但是Kafka以為資料沒有接收成功,因為offset沒有更新到zookeeper
  • 隨後receiver恢復了
  • 從WAL可以讀取的資料重新消費一次,因為使用的kafka High-Level消費API,從zookeeper中儲存的offsets開始消費

WAL的缺點

通過上面描述,WAL有兩個缺點:
降低了receivers的效能,因為資料還要儲存到HDFS等分散式檔案系統
對於一些resources,可能存在重複的資料,比如Kafka,在Kafka中存在一份資料,在Spark Streaming也存在一份(以WAL的形式儲存在hadoop API相容的檔案系統中)

Kafka direct API

為了WAL的效能損失和exactly-once,spark streaming1.3中使用Kafka direct API。非常巧妙,Spark driver計算下個batch的offsets,指導executor消費對應的topics和partitions。消費Kafka訊息,就像消費檔案系統檔案一樣。

5501600-ff626028e35b4847.png
  • 不再需要kafka receivers,executor直接通過Kafka API消費資料
  • WAL不再需要,如果從失敗恢復,可以重新消費
  • exactly-once得到了保證,不會再從WAL中重複讀取資料

總結

主要說的是spark streaming通過各種方式來保證資料不丟失,並保證exactly-once,每個版本都是spark streaming越來越穩定,越來越向生產環境使用發展。

相關文章