Streaming Spark流中的Kafka消费者-工作节点中的并行消费
我是Spark Streaming的新手,集群中有5个工作节点。目标是使用Kafka主题并将其直接保存到NoSql数据库中,如HBase或DynamoDB我试图了解Spark是如何处理Kafka消费者实例并将其分发给员工的(Spark 0.9.0和Kafka 0.8) 如果我创建一个卡夫卡流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
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
的代码。这就是所有卡夫卡相关的事情发生的地方。