在Spark Streaming中从Kafka主题创建两个DStream不起作用

时间:2017-04-07 17:33:28

标签: apache-spark apache-kafka spark-streaming

在我的火花流媒体应用程序中。我正在从两个Kafka主题创建两个DStream。我这样做,因为我需要以不同的方式处理两个DStream。下面是代码示例:

object KafkaConsumerTest3 {
  var sc:SparkContext = null
  def main(args: Array[String]) {



    Logger.getLogger("org").setLevel(Level.OFF);
    Logger.getLogger("akka").setLevel(Level.OFF);

    val Array(zkQuorum, group, topics1, topics2, numThreads) = Array("localhost:2181", "group3", "test_topic4", "test_topic5","5")
    val sparkConf = new SparkConf().setAppName("SparkConsumer").setMaster("local[2]")
    sc = new SparkContext(sparkConf)
    val ssc = new StreamingContext(sc, Seconds(2))


    val topicMap1 = topics1.split(",").map((_, numThreads.toInt)).toMap
    val topicMap2 = topics2.split(",").map((_, numThreads.toInt)).toMap

    val lines2 = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap2).map(_._2)
    val lines1 = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap1).map(_._2)

    lines2.foreachRDD{rdd =>
      rdd.foreach { println }}

    lines1.foreachRDD{rdd =>
      rdd.foreach { println }}

    ssc.start()
    ssc.awaitTermination()
  }
}

这两个主题可能有也可能没有数据。在我的情况下,第一个主题目前没有获取数据,但第二个主题是获取。但是我的spark应用程序没有打印任何数据。而且也不例外。 有什么我想念的吗?或者我该如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

发现上述代码的问题。问题是我们使用master作为local [2]并且我们正在注册两个receiver.Increasing线程数解决问题。