首先spark的實時處理分爲 sparkStreaming和structured streaming 倆中處理方式
sparkStreaming 需要引入
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-streaming-kafka-0-8_${scala.compat.version}</artifactId> <version>${spark.version}</version> </dependency>
其中 scala.compat.version 爲scala的版本 0-8指的是kafka需要什麼版本的要求
描述信息 | spark-streaming-kafka-0-8 | spark-streaming-kafka-0-10 |
kafka版本 | 0.8.2.1 or higher | 0.10.0 or higher |
穩定程度 | Stable | Experimental |
語言支持 | Scala, Java, Python | Scala, Java |
Receiver DStream | Yes | No |
Direct DStream | Yes | Yes |
SSL TLS Support | No | Yes |
Offset Commit Api | No | Yes |
Dynamic Topic Subscription | No | Yes |
從上面的表格可以看出 spark-streaming-kafka-0-8目前是支持版本大於或等於0.8.2.1時需要用到的
spark-streaming-kafka-0-10則需要kafka的版本是0.10.0以上才能支持
對於structured streaming 則需要引入
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql-kafka-0-10_2.11</artifactId> <version>2.3.0</version> </dependency>
用法和上面的表格一樣
另外:如果進羣環境是cloudera manager 則需要查看spark2中的配置參數SPARK_KAFKA_VERSION的版本
運行則會看到kafka的版本
18/11/01 16:48:04 INFO AppInfoParser: Kafka version : 0.9.0.0
18/11/01 16:48:04 INFO AppInfoParser: Kafka commitId : cb8625948210849f
原因分析
其實這個在官方文檔中有介紹。地址如下:
https://www.cloudera.com/documentation/spark2/latest/topics/spark2_kafka.html#running_jobs
簡單說,就是kafka集成spark2,需要在CDH中進行設置。官網介紹了2中方法。這裏我採用了第二種,在CDH中進行修改配置的方法。
步驟如下:
1.進入CDH的spark2配置界面,在搜索框中輸入SPARK_KAFKA_VERSION,出現如下圖,
2.然後選擇對應版本,這裏我應該選擇的是None,
即 : 選用集羣上傳的Kafka-client 版本 !!
3.然後保存配置,重啓生效。