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

Streaming Spark流中的Kafka消费者-工作节点中的并行消费,streaming,apache-kafka,apache-spark,Streaming,Apache Kafka,Apache Spark,我是Spark Streaming的新手,集群中有5个工作节点。目标是使用Kafka主题并将其直接保存到NoSql数据库中,如HBase或DynamoDB我试图了解Spark是如何处理Kafka消费者实例并将其分发给员工的(Spark 0.9.0和Kafka 0.8) 如果我创建一个卡夫卡流 val topicMap = Map("myTopic" -> 1) val kafkaDStream = KafkaUtils.createStream(ssc, zookeeper

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

如果我创建一个卡夫卡流

    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()
卡夫卡消费者具体在哪里创建?驱动程序是否构建消费者实例并将其发送给工作人员,或者工作人员是否根据需要创建消费者实例

以下是有关JsonWrapper的更多详细信息,以备您需要:

import play.api.libs.json.Json

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

这个类懒洋洋地引用Json单例(通过播放),并在程序启动时发送给每个工作者。

查看
KafkaInputDStream
的代码。这就是所有卡夫卡相关的事情发生的地方。