
# Kafka业务规格说明
本章节内容适用于MRS 3.x及后续版本。
#### 支持的Topic上限
支持Topic的个数，受限于进程整体打开的文件句柄数（实际场景主要为数据文件和索引文件占用比较多）。
1. 可通过以下命令查看进程最多打开的文件句柄数。
   ```
   ulimit -n
   ```
   
2. 执行以下命令，查看当前单节点上Kafka进程打开的文件句柄（会继续增加）。
   ```
   lsof -p <Kafka PID>
   ```
   
3. 评估当前需要创建的Topic创建完成后，是否会达到文件句柄上限，每个Partition文件夹下会最多保存多大的数据，会产生多少个数据文件（\*.log文件）和索引文件（\*.index文件），是否会影响Kafka正常运行。
   - \*.log文件：由"log.segment.bytes"参数控制，该参数表示指定日志数据中分段文件的最大字节数，单位：字节。默认配置为1GB。
   
   - \*.index文件：由"log.index.size.max.bytes"参数控制，该参数表示指定索引文件的大小，一般不需要修改，单位：字节。默认配置为10MB。
   
   
   以上参数可通过登录Manager界面，选择"集群 \> 服务 \> Kafka \> 配置 \> 全部配置"，搜索参数，并根据实际需要修改参数值来调整大小。
   
 
#### Consumer的并发量
在一个应用中，同一个Group的Consumer并发量建议与Topic的Partition个数保持一致，保证每个Consumer对应消费一个Partition上的数据。如果Consumer的并发量多于Partition个数，那么多余的Consumer将消费不到数据。
#### Topic和Partition的划分关系说明
- 假设集群中部署了K个Kafka节点，每个节点上配置的磁盘个数为N，每块磁盘大小为M，集群共有n个Topic（T1,T2...Tn），并且其中第m个Topic的每秒输入数据总流量为X(Tm) MB/s，配置的副本数为R(Tm)，配置数据保存时间为Y(Tm)小时，那么整体必须满足： ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001724866633.png)
  
- 假设单个磁盘大小为M，该磁盘上有n个Partition（P0,P1......Pn），并且其中第m个Partition的每秒写入数据流量为Q(Pm) MB/s（计算方法：所属Topic的数据流量除以Partition数）、数据保存时间为T(Pm)小时，那么单个磁盘必须满足： ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001676747558.png)
  
- 根据吞吐量粗略计算，假设生产者可以达到的吞吐量为P，消费者可以达到的吞吐量为C，预期Kafka吞吐量为T，那么建议该Topic的Partition数目设置为Max(T/P , T/C)。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 在Kafka集群中，分区越多吞吐量越高，但是分区过多也存在潜在影响，例如文件句柄增加、不可用性增加（如：某个节点故障后，部分Partition重选Leader后时间窗口会比较大）及端到端时延增加等。
- 建议：单个Partition的磁盘占用最大不超过300GB；单节点上Partition数目不超过3000。如果单集群Broker总数超过30，建议以多服务方式部署。
 
