Kafka主题分区

Gia*_*oli 4 apache-kafka

关于Kafka主题和分区的快速问题.假设以下场景:

  • Producer1将数据写入Topic1.

  • Producer2将数据写入Topic2

  • Consumer1从Topic1和Topic2读取数据.

  • Consumer2仅从Topic2读取数据.

问题是:每个主题中有多少个分区?它是否真的取决于促进并行性的消费者数量?或者它只是一个参数设置到文件server.config?在后一种情况下,有没有办法让不同的主题内部有不同数量的分区?

Mon*_*mul 7

首先要理解的是,主题分区是Kafka中并行性的单位.在生产者和代理端,对不同分区的写入可以完全并行完成.在消费者方面,Kafka总是将一个分区的数据提供给一个消费者线程.因此,消费者(在消费者群体内)的并行度受到消费的分区数量的限制.因此,通常,Kafka群集中的分区越多,可以实现的吞吐量越高.

每个主题中有多少个分区?这是可配置的.您可以增加分区,但一旦增加,您就无法减少分区.Apache Kafka为我们提供了alter命令来更改主题行为并添加/修改配置.我们将使用alter命令为现有主题添加更多分区.

这是将主题'my-topic'的分区数增加到20的命令 -

./bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic my-topic --partitions 20
Run Code Online (Sandbox Code Playgroud)

您可以使用describe命令验证分区是否已增加,如下所示 -

./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-topic
Run Code Online (Sandbox Code Playgroud)

您需要为主题设置多少个分区?请在此处阅读这份精心编写的文件:https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/


cod*_*tsu 5

可以在创建主题时指定分区数。例如,您创建了带有40个分区的Topic1。现在,您仅启动一个消费者。该使用者将分配给Topic1的每个分区。

如果要增加并行度,可以在一个使用者组中启动多个使用者。例如,以相同的使用者组ID开头10个使用者,会导致每个使用者分配到大约4个分区。

FYI (在一个消费者组中)启动更多的消费者而不是您拥有的#个分区没有意义-一些消费者将处于闲置状态。

有关更多信息,请参阅Kafka官方文档:https : //kafka.apache.org/documentation/#intro_consumers