繁体   English   中英

kafka - 多个主题与多个分区

[英]kafka - multiple topics vs multiple partitions

我正在研究一个apache spark用例,我需要从kafka读取数据。 我有一个非常基本的问题来理解spark从kafka读取数据的方式。

根据我的理解,如果数据速度和数量很高,那么我可以在kafka中创建多个分区并在spark中读取它。 现在,dstream中的分区数与kafka中的分区数相同。

我是否可以通过创建多个kafka主题来实现相同的方案,每个主题都有一个分区。 我可以配置我的kafka生产者以顺序方式将数据推送到所有主题。 这将在spark中创建多个dstream。 然后我可以简单地“联合”所有的dstream来创建我的unionedDstream。

现在我的问题是: -

由“其他dstream的联合”创建的unionedDstream将具有与通过读取“具有多个分区的单个主题”创建的分区相同数量的分区

为清楚起见,我将在下面举一个例子: -

我有单身生产者和单身消费者。

在第一种情况: -

(1)1个Kafka主题有4个分区 - > 1个Dstream有4个分区

在第二种情况: -

(2)4个Kafka主题,每个分区有1个分区 - > 4个Dstream,每个分区有一个分区。

但在这里,我可以“联合”所有dstream来创建单个dstream。

unionedDstream= dstream1.union(dstream2).union(dstream3).union(dstream4)

现在将“unionedDstream”变为“具有4个分区的1个Dstream”(与第1个场景相同)。 如果是,那么哪个过程会更有效?

我认为在单节点方案中它或多或少相同,但是如果要使用Kafka的集群/负载平衡功能,则希望拥有多个分区。

Kafka中的水平扩展是通过在多台计算机上分布一个消费者组并在其中分配分区来实现的。 仅当您有多个分区时才有效。

如果您在机器之间分配多个主题,则可能会达到相同的效果。 但是,您必须自己实现,不能使用Kafka的内置机制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM