我有一个非常大的(消息数)Kafka主题,它每秒可能有超过20M消息,但是,消息大小很小,它只是一些纯文本,每个少于1KB,我可以使用几个分区每个主题,而且我可以使用多个服务器来处理一个主题,它们将消耗该主题中的一个分区... 如果我需要一台+100台服务器来解决一个巨大的话题该怎么办?
在单个主题上创建+100个或更多分区是否合乎逻辑?
答案 0 :(得分:2)
在提及Kafka主题时,您应定义“大”:
无论哪种情况,您都应该在消费者方面考虑一下,以获得更好的设计主题和分区。例如:
在对主题和分区进行了适当的设计之后,就会出现问题:每个主题应该有多少个分区。增加总分区会增加吞吐量,但是同时会影响可用性或延迟。 how to choose number topics and partitions for Kafka cluster有一个很好的主题,它仔细地解释了每个主题的总分区将影响性能。我认为,您应该直接在系统上进行基准测试以选择正确的值。它取决于系统的许多因素:服务器计算机的处理能力,网络容量,内存...
最后一部分,您不需要100个服务器即可使用100个分区。 Kafka将尝试平衡服务器之间的所有分区,但这只是可选的。例如,如果您有1个主题,其中3个服务器上运行着7个分区,那么将有2个服务器分别存储2个分区,而1个服务器存储3个分区。 (因此2 * 2 + 3 * 1 = 7)。在较新版本的Kafka中,分区和服务器信息之间的映射将存储在zookeeper中。
答案 1 :(得分:0)
如果您更具体,并且会提供一些数字,例如每秒的预期负载以及每个邮件的大小等,您将获得更好的帮助
通常,Kafka非常强大,并且在暂挂之后将数据写入缓冲区并定期将数据刷新到磁盘。并且根据融合前一段时间的基准测试,具有6个节点的Kafka集群在下面每秒支持约80万条消息,这是基准
答案 2 :(得分:0)
我们的朋友是对的,我推荐你这本书
Kafka,权威指南 由 Neha Narkhede,Gwen Shapira和Todd Palino
您可以在第 47
页找到答案如何选择分区数
选择数量时要考虑几个因素 分区:
您期望该主题的吞吐量是多少?
例如,您期望每秒写入100 KB还是每秒写入1 GB 第二?
- 从单个分区使用时,您期望达到的最大吞吐量是多少?您最多将只有一名消费者 从分区读取,所以如果您知道您的慢消费者 将数据写入数据库,而该数据库再也无法处理更多 每个线程每秒写入它的速度超过50 MB,那么您知道 从分区使用时,您的吞吐量限制为60MB。
- 您可以执行相同的练习来估计单个分区上每个生产者的最大吞吐量,但是由于生产者 通常比消费者快得多,因此跳过通常是安全的 这个。
- 如果您要根据密钥将消息发送到分区,则以后添加分区可能非常困难,因此请计算吞吐量 根据您将来的预期使用量,而不是当前的使用量。
- 考虑要在每个代理上放置的分区数以及每个代理的可用磁盘空间和网络带宽。
- 避免高估,因为每个分区都使用代理上的内存和其他资源,并且会增加领导者的时间 选举。考虑到所有这些,很明显,您想要许多 分区,但不要太多。如果您对 主题的目标吞吐量和预期的吞吐量 求和器,您可以将目标吞吐量除以预期收益 求和器吞吐量并以此方式导出分区数。所以如果我 希望能够从一个主题读写1 GB /秒,我知道 每个消费者只能处理50 MB / s,那么我至少需要20 MB 分区。这样,我可以让20位消费者从该主题中阅读 并达到1 GB /秒。如果您没有这些详细信息,我们的 经验表明,限制分区上的分区大小 每天少于6 GB的磁盘通常可以令人满意 结果。