集羣的spark還沒有用起來,自建一個單機spark,然後連接本機的kafka生產者消費消息。
idea+spark
scala代碼
package ex
import org.apache.spark.SparkConf
import org.apache.spark.streaming.Seconds
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.kafka010.KafkaUtils
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.kafka.common.serialization.StringDeserializer
object KafkaCount {
def main(args: Array[String]): Unit = {
//創建streamingContext
var conf=new SparkConf().setAppName("SparkStreamKaflaWordCountDemo");
var ssc=new StreamingContext(conf,Seconds(4));
//創建topic
//var topic=Map{"test" -> 1}
var topic=Array("test");
//指定zookeeper
//創建消費者組
var group: String ="con-consumer-group"
//消費者配置
val kafkaParam = Map(
"bootstrap.servers" -> "localhost:9092",//用於初始化鏈接到集羣的地址
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
//用於標識這個消費者屬於哪個消費團體
"group.id" -> group,
//如果沒有初始化偏移量或者當前的偏移量不存在任何服務器上,可以使用這個配置屬性
//可以使用這個配置,latest自動重置偏移量爲最新的偏移量
"auto.offset.reset" -> "latest",
//如果是true,則這個消費者的偏移量會在後臺自動提交
"enable.auto.commit" -> (false: java.lang.Boolean)
);
//創建DStream,返回接收到的輸入數據
var stream=KafkaUtils.createDirectStream[String,String](ssc, PreferConsistent,Subscribe[String,String](topic,kafkaParam))
//每一個stream都是一個ConsumerRecord
stream.map(s =>(s.key(),s.value())).print();
ssc.start();
ssc.awaitTermination();
}
}
sbt工程
name := "test2"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.3.2"// % "provided"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.2" % "provided"
libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.1" % "provided"
因爲自己環境的spark爲2.3.2,所以需要下載對應的spark-core_2.11爲2.3.2版本,2.11代表spark基於scala版本2.11;
因爲kafka爲2.0版本,spark-streaming-kafka-0-10選0-10版本,因爲自己環境的spark爲2.3.2, 跟spark最爲接近2.3.0版本,雖然我寫的是2.3.2,但是下載的是2.3.0版本。spark-streaming-kafka裏2.3.0版本有些方法跟2.1.0方法不一樣,spark如果是2.3.0版本,必須選2.3.0以上的spark-streaming-kafka;
spark-streaming版本2.1.1也適用於2.3.2版本的spark,裏面方法沒有差異。
kafka生產者
[root@zhangchenglong-test kafka_2.11-2.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>asdf
>122222222222222
>1234'
>zcl123
>zcl124
>zcl125
>ssssssssssssssssssssssss
spark結果
-------------------------------------------
Time: 1541685796000 ms
-------------------------------------------
-------------------------------------------
Time: 1541685800000 ms
-------------------------------------------
(null,ssssssssssssssssssssssss)
-------------------------------------------
Time: 1541685804000 ms
-------------------------------------------