Spark Streaming 接入 kafka 之 sasl配置

被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

你可能感兴趣的:(大数据)