如何为kafka主题选择no分区?

时间:2018-05-10 11:16:42

标签: apache-kafka kafka-consumer-api kafka-producer-api

我们有3个zk节点集群和7个代理。现在我们必须创建一个主题,并且必须为该主题创建分区。

但我没有找到任何公式来决定我应该为这个主题创建多少分区。 生产者的速率是5k消息/秒,每条消息的大小是130字节。

提前致谢

5 个答案:

答案 0 :(得分:1)

我无法给出明确的答案,有许多模式和约束可能会影响答案,但以下是您可能需要考虑的一些事项:

  • 并行单元是分区,因此如果您知道每条消息的平均处理时间,那么您应该能够计算跟上所需的分区数。例如,如果每条消息需要100毫秒来处理并且您每秒接收5k,那么您将需要至少50个分区。增加一个百分比,以应对峰值和可变基础设施性能。排队论可以帮助您计算并行需求。

  • 您的流量有多突发,您有什么延迟限制?考虑到最后一点,如果您还有延迟要求,那么您可能需要扩展分区以应对最高流量。

  • 如果您使用任何数据位置模式或需要订购消息,那么您需要考虑未来的流量增长。例如,您处理客户数据并将客户ID用作分区键,并依赖于始终将每个客户路由到同一分区。也许对于事件采购或仅仅是为了确保每个更改都以正确的顺序应用。好吧,如果您稍后添加新分区以应对更高的消息速率,那么现在每个客户可能会被路由到不同的分区。当客户存在于两个分区上时,这可能引入一些关于保证消息排序的令人头疼的问题。因此,您希望为未来的增长创建足够的分区。 请记住,这很容易扩展,并且在消费者中,但是分区需要一些规划,所以请放心使用,以便将来证明。

  • 拥有数千个分区可能会增加整体延迟。

答案 1 :(得分:1)

这取决于您所需的吞吐量,群集大小,硬件规格:

Confluent的Jun Rao撰写了一个清晰的博客: How to choose the number of topics/partitions in a Kafka cluster?

这对于了解以下情况可能会有所帮助: Apache Kafka Supports 200K Partitions Per Cluster

答案 2 :(得分:1)

由卡夫卡(Kafka)联合创始人创建的旧基准很容易理解规模的大小-https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

由此得出的直接结论,就像上面的Vanlightly所说的那样,消费者的处理时间是决定分区数量的最重要因素(因为您还不能挑战生产者的吞吐量)。

最大的并发消耗是分区数,因此您需要确保:

((处理一条消息的时间,以秒为单位 x 每秒的消息数) / 分区数) << 1

如果它等于1,则您读取的速度不能比写入的速度快,并且这还没有提及消息突发和使用者的失败\停机时间。因此您需要将其显着低于1,其显着性取决于系统可以承受的延迟。

答案 3 :(得分:1)

分区= max(NP,NC)

其中:

NP是通过计算得出的所需生产者数量:TT / TP NC是通过计算确定的所需消费者数量:TT / TC TT是我们系统的总预期吞吐量 TP是单个生产者到单个分区的最大吞吐量 TC是单个使用者在单个分区中的最大吞吐量

答案 4 :(得分:0)

您可以选择等于 {throughput/#producer 的最大值的分区数;吞吐量/#consumer}。吞吐量按每秒消息量计算。在这里你有: 吞吐量 = 5k * 130bytes = 650MB/s