爲了讓Spark Streaming消費kafka的數據不丟數據,能夠建立Kafka Direct DStream,由Spark Streaming本身管理offset,並非存到zookeeper。啓用Spark Streaming的 checkpoints是存儲偏移量的最簡單方法,由於它能夠在Spark的框架內輕鬆得到。 checkpoints將應用程序的狀態保存到HDFS,以便在故障時能夠恢復。若是發生故障,Spark Streaming應用程序能夠從checkpoints偏移範圍讀取消息。java
可是,Spark Streaming checkpoints在應用程序修改後因爲從checkpoint反序列化失敗而沒法恢復,所以不是很是可靠,特別是若是您將此機制用於關鍵生產應用程序,另外,基於zookeeper的offset可視化工具將沒法使用。咱們不建議經過Spark checkpoints來管理偏移量。所以本文將手動存儲offset到zookeeper,徹底自我掌控offset。面試
建立ZKClient,API有好幾個,最後用帶序列化參數的,否則保存offset的時候容易出現亂碼。架構
查看該groupId在該topic下是否有消費記錄,若是有,確定在對應目錄下會有分區數,children大於0則有記錄。框架
在有記錄的狀況下,去拿具體的offset分佈式
注意紅色線框部分,在zookeeper裏存儲的offset有可能在kafka裏過時了,因此要拿kafka最小的offset和zookeeper裏的offset比較一下。工具
接下來就能夠建立Kafka Direct DStream了,前者是從zookeeper拿的offset,後者是直接從最新的開始(第一次消費)。源碼分析
最後就是處理RDD,保存Offset。性能
感興趣能夠加Java架構師羣獲取Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點高級進階乾貨的直播免費學習權限 都是大牛帶飛 讓你少走不少的彎路的 羣..號是:855801563 對了 小白勿進 最好是有開發經驗學習
注:加羣要求大數據
一、具備工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。
二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。
三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。
四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。
5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知!