我正在学习 Kafka 并尝试为我最近的搜索应用程序创建一个主题。假设推送到 kafka 主题的数据数量很大。
我的kafka集群有3个broker,并且已经为其他需求创建了主题。
现在我应该为最近的搜索主题选择多少分区?如果我没有明确提供分区号怎么办?选择分区数时需要考虑哪些因素?
这将取决于消费者的吞吐量。如果您每秒生成 100 条消息,并且您的消费者每秒可以处理 10 条消息,那么您将需要至少 10 个分区(生产/消费)以及 10 个消费者实例。如果您希望该主题能够处理未来的增长,那么您将需要增加分区数量,以便您可以添加更多消费者实例来处理新卷。
另一个建议是让您的分区计数为高度可整除的数字,以便您可以在保持负载平衡的同时扩大/缩小消费者。例如,如果您选择 10 个分区,那么您必须拥有 1、2、5 或 10 个使用者实例,以确保它们每次处理相同数量的分区。如果您选择 12 个分区,那么您可以使用 1、2、3、4、6 或 12 个消费者实例进行平衡。
在决定分区数量之前,我会考虑评估两个主要因素。
第一点是,消费者组的分区、消费者如何一起行动。简单来说,一个消费者可以消费多个分区的消息,但一个分区不能被多个消费者消费。这意味着,消费者组中的分区数 >= 消费者数是有意义的。否则,您最终将得到没有分配任何分区的消费者。
第二点是,从延迟和整体的角度来看,您的要求是什么。 简单来说, 延迟是执行某些操作或产生某些结果所需的时间。延迟以时间单位测量——小时、分钟、秒、纳秒或时钟周期。 吞吐量是每单位时间执行的此类操作或产生的结果的数量
现在回到kafka的角度进行比较,一般来说,Kafka集群中的分区越多,吞吐量就越高。但是,如果您确实寻求低延迟,则应该小心这个数字。
一般来说,更多的分区会带来更高的吞吐量。 但有几件事需要考虑 - 更多分区意味着消费者必须拥有更高的内存系统来消费数据。
我发现了一些关于它的有趣文章