Spark Streaming中的Kafka消费者 - 工作节点中的并行消耗

时间:2014-03-11 22:27:54

标签: streaming apache-kafka apache-spark

我是Spark Streaming的新手,我的群集中有5个工作节点。目标是使用Kafka主题并将其直接保存到NoSql数据库(如HBase或DynamoDB)中。 我试图理解Spark如何处理Kafka Consumer实例并将它们分发到Workers (Spark 0.9.0和Kafka 0.8)。

如果我通过

创建Kafka流
    val topicMap = Map("myTopic" -> 1)
    val kafkaDStream = KafkaUtils.createStream(ssc, zookeeper, group, topicMap).map(_._2)

并运行像

这样的流操作
    val valueStream = kafkaDStream.map(
        s => {
            val json = new JsonWrapper
            val js = json.parse(s)
            val a = (js \ "a").toString
            val b = (js \ "b").toString
            val c = (js \ "c").toString
            (a, b, c)
        }
    )

    valueStream.foreachRDD(
        rdd => {
            rdd.foreach(
                row => // put (a,b,c) into DB (HBase or DynamoDB)
            )
        }
    )
    ssc.start()
    ssc.awaitTermination()

Kafka消费者究竟在哪里创建?驱动程序是否构建了Consumer实例并将它们发送给了worker,或者worker是否根据需要创建了Consumer?

以下是JsonWrapper的更多详细信息,以备不时之需:

import play.api.libs.json.Json

class JsonWrapper extends Serializable {
    lazy val jsObj = Json
    def parse(s: String) = jsObj.parse(s)
}

此类懒惰引用Json单例(通过Play),并在程序启动时发送给每个worker。

0 个答案:

没有答案