【发布时间】:2018-02-16 23:57:24
【问题描述】:
我正在研究一个需要从 kafka 读取数据的 apache spark 用例。我有一个非常基本的问题要了解 spark 从 kafka 读取数据的方式。
据我了解,如果数据速度和容量很高,那么我可以在 kafka 中创建多个分区并在 spark 中读取它。现在dstream中的分区数和kafka中的分区数一样。
我可以通过创建多个 kafka 主题来实现相同的场景,每个主题都有一个分区。我可以配置我的 kafka 生产者将数据按顺序推送到所有主题。这将在 spark 中创建多个 dstream。然后我可以简单地“联合”所有 dstream 来创建我的 unionedDstream 。
现在我的问题是:-
“union of other dstreams”创建的unionedDstream是否会与通过读取“single topic with multiple partitions”创建的分区数相同
为了清楚起见,我将在下面举一个例子:-
我有一个生产者和一个消费者。
在第一种情况下:-
(1) 1 个具有 4 个分区的 Kafka 主题 --> 1 个具有 4 个分区的 Dstream
第二种情况:-
(2) 4 个 Kafka Topics,每个 1 个分区 --> 4 个 Dstream,每个 1 个分区。
但在这里我可以“联合”所有 dstream 以创建一个 dstream。
unionedDstream= dstream1.union(dstream2).union(dstream3).union(dstream4)
现在“unionedDstream”将变为“1 Dstream with 4 partitions”(与第一种情况相同)。如果是,那么哪个过程在性能方面会更有效?
【问题讨论】: