Kafka主题分区

时间:2018-03-01 16:59:43

标签: apache-kafka

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

  • Producer1将数据写入Topic1。

  • Producer2将数据写入Topic2

  • Consumer1从Topic1和Topic2中读取数据。

  • Consumer2仅从Topic2中读取数据。

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

2 个答案:

答案 0 :(得分:6)

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

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

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

的命令
./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-topic

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

io.Reader

您需要为主题设置多少个分区?请在此处阅读这份精心编写的文件:Allocation with new

答案 1 :(得分:3)

可以指定主题创建的分区数。例如,您已创建包含40个分区的 Topic1 。现在,您只需一个消费者。此消费者将被分配到 Topic1 的每个分区。

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

仅仅开始更多消费者(在消费者群体中)而不是你所拥有的#分区是没有意义的 - 有些消费者会闲着。

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

相关问题