kafka-0.8.x和kafka-0.10.0.0版本KafkaUtils.createDirectStream方法的比较

先是0.8.x版本KafkaUtils.createDirectStream是如何创建!!

导包(MVN或者sbt):

groupId = org.apache.spark

artifactId = spark-streaming-kafka-0-8_2.11

version = 2.2.1

测试代码如下:

object Kafka_Spark {
  def main(args: Array[String]) {
    val sparkConf = new SparkConf().setMaster("local[2]").setAppName("kafka-spark-demo")
    val scc = new StreamingContext(sparkConf, Duration(5000))//new一个spark-streaming的上下文
 
    //    scc.checkpoint(".") // 暂时用不到
    val topics = Set("kafka_spark2") //我们需要消费的kafka数据的topic
    val kafkaParam = Map(
      "metadata.broker.list" -> "localhost:9092", // kafka的broker list地址
      "auto.offset.reset" -> "smallest"//这个参数可以让streaming消费topic的时候从头开始消费
    )
    val stream: InputDStream[(String, String)] = createStream(scc, kafkaParam, topics)//建立流,读数据,传入上下文,kafka配置,主题名字
    val wordCount = stream.map(l => (json_an(l._2), 1)).reduceByKey(_ + _) //对数据进行处理
    wordCount.print()//输出到控制台看看结果

    scc.start() // 真正启动程序
    scc.awaitTermination() //阻塞等待
  }

  def createStream(scc: StreamingContext, kafkaParam: Map[String, String], topics: Set[String]) = {
    KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](scc, kafkaParam, topics)
  }
}
  
--------------------- 
作者:DaHuangXiao 
来源:CSDN 
原文:https://blog.csdn.net/m0_37637511/article/details/80330358 
版权声明:本文为博主原创文章,转载请附上博文链接!

接着是kafka-0.10.0.0版本KafkaUtils.createDirectStream方法

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
ssc = new StreamingContext(sparkConf, Milliseconds(1000))
val preferredHosts = LocationStrategies.PreferConsistent
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)
)

val topics = Array("topicA", "topicB")
val stream = KafkaUtils.createDirectStream[String, String](
 ssc,
 preferredHosts,
 Subscribe[String, String](topics, kafkaParams)
)

stream.map(record => (record.key, record.value))
--------------------- 
作者:Spark高级玩法 
来源:CSDN 
原文:https://blog.csdn.net/rlnLo2pNEfx9c/article/details/79648890 
版权声明:本文为博主原创文章,转载请附上博文链接!

可以明显看出createDirectStream是不同的,今天上午先是导入0.10.0.0的jar包,然后采用的是0.8.x的格式进行coding,IDEA反复报编译错误:

kafka-0.8.x和kafka-0.10.0.0版本KafkaUtils.createDirectStream方法的比较_第1张图片

后来经过仔细网上查找答案,发现两个版本的方法是不一样。另外kafkaParam两个版本的设置也是很不一样!

spark官网kafka0.10版本样例

http://spark.apache.org/docs/2.3.0/streaming-kafka-0-10-integration.html

spark官网kafka0.8.x版本样例

http://spark.apache.org/docs/2.3.0/streaming-kafka-0-8-integration.html

现在IDEA软件导入的是0.8.x版本的jar包,继续采用以前的方法,而服务器中部署的是1.10版本的kafka,向下兼容0.8.x版本的kafka。

 

做好记录,供以后参考!!!

你可能感兴趣的:(spark)