當我們的spark streaming程序需要消費kafka數據,我們需要根據自己的spark版本和kafka broker版本選擇合適的maven依賴
spark-streaming-kafka-0-8 | spark-streaming-kafka-0-10 | |
支持的kafka版本 | 0.8+ | 0.10+ |
依賴包使用的spark版本 | 2.0-及2.0+ | 2.0+ |
消費方式 | 直連及基於消費者 | 直連 |
偏移存儲方式 | 直連自己處理,基於消費者存zk | 存kafka topic裏 |
兼容性 | 與0.8+的kafka都兼容 | 與0.10-的kafka版本不兼容 |
注意:0.8+表示0.8版本及0.8以上的版本,-同理
首先,我們來看kafka的版本
如果kafka是在apache下的kafka,比如kafka_2.11-2.0.0,2.11表示scala版本,2.00表示kafka的版本
如果是cdh下載parcel包裝的kafka,可參照如下表格
比如3.0.0-1.3.0.0.p0.40,則對應的kafka版本是0.11.0,3.1.1-1.3.1.1.p0.2對應的kafka版本是1.01,
也可到kafka下看jar包的版本便可知kafka版本
接下來我們看spark的版本,如果使用cdh默認的spark,則spark版本默認1.6,如果升級過,則爲升級後的版本,
2.0,2.1.....
該選擇maven依賴了,去maven倉庫搜索
可以看到有三種依賴,第一種和第二種是代碼是一樣的,區別是第一種支持spark早期版本,第二種支持spark1.6以後版本,這兩種kafka版本都爲0.8.21,故只討論第二種。
以下爲第一種的
先看0-8的
再看0-10的,kakfa版本爲0.10.1
version表示spark版本,scala表示scala版本,date列是日期
可根據自己的spark版本和kafka版本選擇適合自己的依賴,spark版本沒那麼強關聯,注意有的在低版本的開發者api,到高版本成了包私有的,比如KafkaCluster(在0-8爲開發者api,在spark-streaming-kakfa爲包私有),Logging(在1.6爲開發者api,1.6以後爲包私有)
這兩種推薦使用0-10,無需自己管理偏移,直接調api將偏移存到kafka的topic裏。