本文主要介绍通过简单规则来评估一般业务场景下EMR Kafka集群所需硬件资源。实际业务场景中,您可以通过这些规则评估出资源规模后,再结合负载测试来确定最终的集群规格。集群创建后,您也可以根据实际资源使用率通过集群扩容功能来变更集群的资源配置。
Kafka集群硬件资源的影响因素较多,包括消息流量的峰值、消息的平均大小、分区的个数、副本因子、客户端的个数等,以及使用的业务场景、业务应用程序的性能等非Kafka服务控制因素。因此评估硬件资源需求时,需要先预估实际业务的规模,并以此作为业务参数输入来评估所需资源。您可以使用kafka-producer-perf-test、kafka-consumer-perf-test等工具来模拟实际负载,进一步评估实际需要的硬件资源。
Master节点组(Zookeeper)资源评估
Master节点组主要用于安装Zookeeper组件。此外,Kafka Manager、Schema Registry、Rest Proxy等Kafka生态组件也安装在Master节点组。
通常情况下,Master节点组规格配置推荐如下:
节点数:3个。
数据盘:选择1块云盘,存储容量120 GiB。
系统盘:80 GiB。
CPU:4 Core。
内存:8 GiB。
重要建议选择CPU和内存配比为1:2的机型。
Core节点组(Kafka Broker)资源评估
评估业务需求
您需要根据业务情况,评估以下参数:
扇出因子:业务数据会被下游消费的次数,不包含Kafka本身副本复制产生的消费次数。
数据峰值流入:业务数据的峰值流量,单位MB/s。
数据平均流入:业务数据的平均流量,单位MB/s。
数据保留时长:数据保留时长,默认7天。
分区副本因子:分区副本因子,默认为3,即每个分区具有3个副本。
需要根据实际的业务情况,充分评估峰值流量,峰值流量通常会比平均流量高1个数量级以上。
在评估参数时,需要保留适度的冗余以便在极端业务场景负载时,集群仍能正常提供服务。根据以上参数,可以计算出以下需求指标:
集群总写入流量峰值:
数据峰值流入 * 分区副本因子
。集群总读取流量峰值:
数据峰值流入 *(扇出因子 + 分区副本因子 - 1)
。数据总存储容量:
数据平均流入 * 数据保留时长 * 分区副本因子
。
节点规格推荐
通常情况下,Core节点组规格配置推荐如下:
节点数:根据业务需求评估,具体请参见评估Broker的节点数。
CPU:16 Core。
内存:64 GiB。
重要建议选择CPU和内存配比为1:4的机型。
系统盘:80 GiB。
数据盘:选择4块云盘,云盘容量根据业务需求评估。
网卡带宽:根据节点磁盘总IO计算网卡带宽。
数据盘推荐使用云盘机型,避免因磁盘故障产生的运维工作量,可以获取更高的服务可用性并降低人力运维成本。
选择数据盘类型以及块数之后,计算出总的磁盘IO吞吐量。建议选择网卡带宽不低于磁盘IO吞吐量。
评估Broker的节点数
理想情况下,Kafka Broker最大流量能够达到节点磁盘IO的最大吞吐量或者网卡最大带宽。因此,可以根据数据峰值流量以及每个节点IO吞吐量(或者网卡带宽)计算所需Broker的节点数。
获取单个节点磁盘性能指标
单个节点磁盘吞吐量 = 单块盘吞吐量 * 数据盘个数
云盘的IO性能理论值请参见块存储性能。例如,PL1每块云盘的最大吞吐量为350 MB/s。对于本地盘机型,建议根据理论值的一半来计算磁盘吞吐量指标。例如,通常一块本地盘按照50 MB/s估算。
计算所需Broker节点数
如果您的分区副本数为3,则建议选择4个及以上Broker节点,即出现一个节点暂时不可用时,仍然可以创建3副本的分区。通常建议保留50%的硬件资源冗余。基于以上前提,计算所需Broker节点数公式为:
Broker节点数 = Max(4,(集群总读取流量峰值 + 集群总写入流量峰值)/ 单个节点磁盘吞吐量 / 50%)
此外,从分区副本限制考虑,每个Broker建议不超过2000个分区副本、最多不能超过4000个分区副本;整个集群不应超过200,000个分区副本。如果预估集群总分区副本数量会比较多,建议您从总分区数来评估所需Broker的节点数。此时,计算所需Broker节点数公式为:
Broker节点数 = Max(4,总预估分区数 * 分区副本因子 / 2000)
估算每个Broker的磁盘大小
每个Broker的磁盘大小 = 数据总存储容量 / Broker节点数 / 节点数据盘块数 / 50%
(可选)Task节点组(Kafka Connect)资源评估
该节点组是可选的。集群创建后,您可以根据资源使用情况随时扩容。
通常情况下,Task节点组规格配置推荐如下:
节点数:建议选择2个节点以上,这样Connect集群是高可用的。
数据盘:选择1块云盘,存储容量80 GiB以上。
CPU:建议每个节点选择8 Core以上,根据Connector的计算量随时扩容。
内存:根据Connector的类型以及内存使用情况选择。
重要建议选择CPU和内存配比为1:2或者1:4的机型。