首页 > 解决方案 > 如何选择 kafka 主题的分区数?

问题描述

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

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

提前致谢

标签: apache-kafkakafka-consumer-apikafka-producer-api

解决方案


我不能给你一个明确的答案,有很多模式和限制会影响答案,但这里有一些你可能需要考虑的事情:

  • 并行度的单位是分区,因此如果您知道每条消息的平均处理时间,那么您应该能够计算出跟上所需的分区数。例如,如果每条消息需要 100 毫秒来处理,而您每秒收到 5k,那么您至少需要 50 个分区。再增加一个百分比,以应对峰值和可变的基础架构性能。排队论可以给你数学来计算你的并行需求。

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

  • 如果您使用任何数据局部性模式或需要对消息进行排序,那么您需要考虑未来的流量增长。例如,您处理客户数据并使用您的客户 ID 作为分区键,并依赖于每个客户始终被路由到同一个分区。也许是为了事件溯源,或者只是为了确保以正确的顺序应用每个更改。好吧,如果您稍后添加新分区以应对更高的消息率,那么每个客户现在可能会被路由到不同的分区。由于客户存在于两个分区上,这可能会带来一些关于保证消息排序的问题。所以你想为未来的增长创建足够的分区。请记住,这很容易向外扩展和在消费者中使用,但分区需要一些规划,所以要安全起见并成为未来的证明。

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


推荐阅读