在Spark Streaming中跨机器并行化接收器

时间:2015-04-23 21:41:42

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

在Spark流媒体应用中,我可以在群集中的所有计算机上并行化接收器(而不仅仅是Master)吗?这样,Spark集群中的所有节点都同时从外部流中读取。

1 个答案:

答案 0 :(得分:1)

在群集上部署时,Spark Streaming将使用spark.cores.max中指定的核心数。我们可以以编程方式创建n接收器,它们将分布在为此作业保留的核心上,但不保证物理节点上的均匀分布。

作为使用kafka的示例,我们在这里创建kafkaParallelism个接收器。

@transient val inKafkaList:List[DStream[(K,V)]] =     List.fill(kafkaParallelism) {
KafkaUtils.createStream[K, V, KDecoder, VDecoder](ssc, kafkaConfig,  topics, StorageLevel.MEMORY_AND_DISK_SER)
}
@transient val inKafka = ssc.union(inKafkaList)

请注意,合并生成的Dstream以减少生成的任务数量是一种很好的做法。