Apache spark 卡夫卡-多主题vs多分区

Apache spark 卡夫卡-多主题vs多分区,apache-spark,apache-kafka,Apache Spark,Apache Kafka,我正在处理一个ApacheSpark用例,在这个用例中我需要从kafka读取数据。我有一个非常基本的问题来理解spark从卡夫卡读取数据的方式 根据我的理解,如果数据速度和容量都很高,那么我可以在kafka中创建多个分区并在spark中读取。现在,dstream中的分区数与kafka中的分区数相同 我可以通过创建多个kafka主题(每个主题有一个分区)来实现相同的场景吗。我可以将我的卡夫卡制作人配置为按顺序将数据推送到所有主题。这将在spark中创建多个数据流。然后我可以简单地“联合”所有的数据

我正在处理一个ApacheSpark用例,在这个用例中我需要从kafka读取数据。我有一个非常基本的问题来理解spark从卡夫卡读取数据的方式

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

我可以通过创建多个kafka主题(每个主题有一个分区)来实现相同的场景吗。我可以将我的卡夫卡制作人配置为按顺序将数据推送到所有主题。这将在spark中创建多个数据流。然后我可以简单地“联合”所有的数据流来创建我的unionedDstream

现在我的问题是:

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

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

我有一个生产者和一个消费者

在第一个场景中:-

(1) 1个带4个分区的卡夫卡主题-->1个带4个分区的数据流

在第二种情况下:

(2) 4个卡夫卡主题,每个主题有1个分区-->4个数据流,每个主题有一个分区

但是在这里我可以“联合”所有的数据流来创建一个单一的数据流

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

现在“unionedDstream”将变成“1个数据流和4个分区”(与第一个场景相同)。如果是,那么哪个进程在性能方面更有效?

我认为在单节点场景中大致相同,但如果您想利用Kafka的群集/负载平衡功能,则需要多个分区

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

如果您将多个主题分发到机器上,则可能会达到相同的效果。但是,您必须自己实现这一点,并且不能利用卡夫卡的内置机制