当我们的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里。