Kafka 主题分区
Posted
技术标签:
【中文标题】Kafka 主题分区【英文标题】:Kafka topic partitions 【发布时间】:2018-03-01 16:59:42 【问题描述】:关于 Kafka 的主题和分区的快速问题。假设如下场景:
Producer1 将数据写入 Topic1。
Producer2将数据写入Topic2
Consumer1 从 Topic1 和 Topic2 读取数据。
Consumer2 仅从 Topic2 读取数据。
问题是:每个Topic里面有多少个partition?真的是靠消费者数量来推动并行吗?或者它只是文件 server.config 中的一个参数集?在后一种情况下,有没有办法让不同的主题具有不同的分区数?
【问题讨论】:
【参考方案1】:首先要了解的是,主题分区是 Kafka 中的并行单位。在生产者和代理端,对不同分区的写入可以完全并行完成。在消费者方面,Kafka 总是将单个分区的数据提供给一个消费者线程。因此,消费者(在消费者组内)的并行度受所消费的分区数量的限制。因此,一般来说,Kafka集群中的分区越多,可以达到的吞吐量就越高。
每个主题内有多少个分区?这是可配置的。您可以增加分区,但一旦增加就不能减少它。 Apache Kafka 为我们提供了 alter 命令来更改主题行为和添加/修改配置。我们将使用 alter 命令为现有主题添加更多分区。
这是将主题“my-topic”的分区计数增加到 20 的命令 -
./bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic my-topic --partitions 20
可以通过如下describe命令验证分区是否增加-
./bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-topic
您需要为一个主题设置多少个分区?请在此处阅读这篇写得很好的文档:https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/
【讨论】:
【参考方案2】:您可以指定创建主题时的分区数。例如,您创建了具有 40 个分区的 Topic1。现在您只开始一个消费者。这个消费者将被分配到你的 Topic1 的每个分区。
如果您想增加并行度,您可以在一个消费者组中启动多个消费者。例如,启动 10 个具有相同消费者组 id 的消费者会导致每个消费者被分配到大约 4 个分区。
仅供参考,启动 更多 个消费者(在消费者组中)比您拥有的 # 个分区没有意义 - 一些消费者将处于空闲状态。
欲了解更多信息,请查看官方 Kafka 文档:https://kafka.apache.org/documentation/#intro_consumers
【讨论】:
以上是关于Kafka 主题分区的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Kafka Connect Sink 中指定 Kafka 主题的分区