Kafka是否支持数百万个分区?

3

如果我们为一个主题创建数百万个分区,会有什么问题吗?由于业务要求,我们正在考虑在 Kafka 中为每个用户创建一个分区。我们有数百万个用户。非常感谢您的见解!


1
出于好奇,您为什么想要为每个用户创建一个分区?如果您将关键消息与用户ID相关联,则仍然可以保证每个用户的数据每次都会结束在相同的分区中,而不受分区数量的影响。 - Robin Moffatt
1个回答

4
我认为如果你有数百万个分区,就会出现问题,原因如下:
- (最重要的!!)客户来来去去,所以您将需要不断更改分区数或有大量未使用的分区(因为您不能在主题内减少分区数)。 - 更多的分区需要更多的打开文件句柄:更多的分区意味着磁盘上有更多的目录和段文件。 - 更多的分区可能会增加不可用性:计划故障逐个将领导者从代理中移除,每个分区的停机时间都很短。在硬故障中,所有领导者立即不可用。 - 更多的分区可能会增加端到端延迟:要让消费者看到消息,必须提交该消息。代理使用单个线程从领导者复制数据,因此每个分区都会产生开销。 - 更多的分区可能需要更多的客户端内存。
Confluent的博客提供了更多详细信息:如何选择Kafka集群中的主题/分区数量?
此外,根据Confluent的Kafka开发人员培训资料,建议如下:
“当前限制(2-4K个分区/代理,每个集群数十万个分区)是最大值。大多数环境远低于这些值(通常在每个代理1000-1500个范围内或更少)。”
这篇博客解释了“Apache Kafka支持每个集群20万个分区”。
这可能会随着Zookeeper的替换而改变,KIP-500但是,再次看看上面的第一个要点,这仍将是一种不健康的软件设计。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接