Raj*_*gir 8 apache-kafka kafka-consumer-api kafka-producer-api
我们有 3 个 zk 节点集群和 7 个代理。现在我们必须创建一个主题并且必须为这个主题创建分区。
但是我没有找到任何公式来决定我应该为此主题创建多少分区。生产者的速率为 5k 条消息/秒,每条消息的大小为 130 字节。
提前致谢
我不能给你一个明确的答案,有很多模式和限制会影响答案,但这里有一些你可能需要考虑的事情:
并行度的单位是分区,因此如果您知道每条消息的平均处理时间,那么您应该能够计算出保持同步所需的分区数。例如,如果每条消息需要 100 毫秒来处理,而您每秒收到 5k,那么您至少需要 50 个分区。增加一个百分比以应对峰值和可变的基础设施性能。排队论可以为您提供计算并行需求的数学方法。
您的流量有多突发以及您有哪些延迟限制?考虑到最后一点,如果您也有延迟要求,那么您可能需要扩展分区以应对您的峰值流量。
如果您使用任何数据局部性模式或需要对消息进行排序,那么您需要考虑未来的流量增长。例如,您处理客户数据并使用您的客户 ID 作为分区键,并依赖于每个客户始终被路由到同一个分区。也许是为了事件溯源,或者只是为了确保以正确的顺序应用每个更改。好吧,如果您稍后添加新分区以应对更高的消息速率,那么现在每个客户可能会被路由到不同的分区。由于客户存在于两个分区上,这可能会带来一些关于保证消息排序的问题。所以你想为未来的增长创建足够的分区。请记住,这很容易扩展和在消费者中进行,但分区需要一些规划,所以要安全起见并面向未来。
拥有数千个分区会增加整体延迟。
小智 5
Kafka 联合创始人的这个旧基准非常适合理解规模的大小 - https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines
由此得出的直接结论,就像Vanlightly 在这里所说的,是消费者处理时间是决定分区数量的最重要因素(因为您还没有接近挑战生产者吞吐量)。
消费的最大并发数是分区数,因此您要确保:
((一条消息的处理时间以秒为单位x每秒的消息数) /分区数) << 1
如果它等于 1,你的阅读速度不会比写作快,这更不用说消息的爆发和消费者的故障\停机时间。因此您需要将其显着低于 1,具体程度取决于您的系统可以承受的延迟。
| 归档时间: |
|
| 查看次数: |
12516 次 |
| 最近记录: |