被kafka的新版配置折磨的死去活来的,终于搞定了。。。放松一下写此篇博客以记录一下。
开发环境
- spark 2.2.0
- scala 2.11.8 (目前为止,高版本的scala貌似对kafka的支持还有坑。。。)
- sbt(目前为止,顺便说一下,如果是mac 10.13 之后的系统,并且使用 IntelliJ IDEA的话,sbt的版本要选择 1.0.3左右的,选择1.1.0之后那又是会爽的死去活来的)
- IntelliJ IDEA 社区版 2017.2.16
- kafka的版本,由于设置了sasl认证,Kafka 的版本要1.0之后的,具体的对应关系可以查看 此官网链接
为了方便大家配置贴出我的sbt配置:
name := "kstreaming"
version := "0.1"
scalaVersion := "2.11.8"
val sparkVersion = "2.2.0"
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.apache.spark" %% "spark-mllib" % sparkVersion,
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"org.apache.spark" %% "spark-hive" % sparkVersion,
"org.apache.spark" %% "spark-streaming-kafka-0-10" % sparkVersion
)
当然了链接的普通例子还是以官网的为准,戳这里
回归正题,接着说咱们的sasl配置,相对于官网的配置,只需要修改以下部位…
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.streaming.kafka010._
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092,anotherhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "use_a_separate_group_id_for_each_stream",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean),
"security.protocol" -> "SASL_PLAINTEXT", // 这两项是我们自己的sasl设置,相对于官网的代码也只改了这两行
"sasl.mechanism" -> "PLAIN" // 这两项是我们自己的sasl设置,相对于官网的代码也只改了这两行
)
val topics = Array("topicA", "topicB")
val stream = KafkaUtils.createDirectStream[String, String](
streamingContext,
PreferConsistent,
Subscribe[String, String](topics, kafkaParams)
)
stream.map(record => (record.key, record.value))
接下来就是在 IntelliJ IDEA里边跑以下结果了,当然要顺手设置以下IntelliJ IDEA了~
- 界面右上角运行的按钮旁有个下拉框,下拉选择 Edit Configurations
- Confirguration界面的 VM options选项的最右边有个按钮
- 在里边添加如下代码即可
-Dspark.master=local
-Djava.security.auth.login.config=kafka_client_jaas.conf
第一行是单机运行的意思
第二行是告诉spark运行的时候把认证信息加到运行环境中
当然这里边设置了个文件,这个文件要放到工作目录中~
文件的内容呢,如下
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="xxx"
password="xxx";
};
完成了这三步简单的配置之后,跑起来就清爽了!!!
废话不多说,敲代码去了 T_T