【问题标题】:kafka - multiple topics vs multiple partitionskafka - 多个主题与多个分区
【发布时间】: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”(与第一种情况相同)。如果是,那么哪个过程在性能方面会更有效?

【问题讨论】:

    标签: apache-spark apache-kafka


    【解决方案1】:

    我想在单节点场景下还是差不多的,但是如果你想使用 Kafka 的集群/负载均衡特性,你需要有多个分区。

    Kafka 中的水平扩展是通过将消费者组分布在多台机器上并在它们之间分配分区来实现的。这仅在您有多个分区时才有效。

    如果您将多个主题分布在机器上,您可能可以达到相同的效果。但是,您必须自己实现这一点,并且不能使用 Kafka 的内置机制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 2015-03-05
      • 2020-05-03
      • 2018-07-22
      • 2020-10-19
      • 1970-01-01
      • 2021-08-30
      相关资源
      最近更新 更多