Kafka业务规格说明
本章节内容适用于MRS 3.x及后续版本。
支持的Topic上限
支持Topic的个数,受限于进程整体打开的文件句柄数(现场环境一般主要是数据文件和索引文件占用比较多)。
- 可通过ulimit -n命令查看进程最多打开的文件句柄数;
- 执行lsof -p <Kafka PID>命令,查看当前单节点上Kafka进程打开的文件句柄(会继续增加);
- 权衡当前需要创建的Topic创建完成后,会不会达到文件句柄上限,每个Partition文件夹下会最多保存多大的数据,会产生多少个数据文件(*.log文件,默认配置为1GB,可通过修改log.segment.bytes来调整大小)和索引文件(*.index文件,默认配置为10MB,可通过修改log.index.size.max.bytes来调整大小),是否会影响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)小时,那么整体必须满足:
- 假设单个磁盘大小为M,该磁盘上有n个Partition(P0,P1……Pn),并且其中第m个Partition的每秒写入数据流量为Q(Pm) MB/s(计算方法:所属Topic的数据流量除以Partition数)、数据保存时间为T(Pm)小时,那么单个磁盘必须满足:
- 根据吞吐量粗略计算,假设生产者可以达到的吞吐量为P,消费者可以达到的吞吐量为C,预期Kafka吞吐量为T,那么建议该Topic的Partition数目设置为Max(T/P , T/C)。
- 在Kafka集群中,分区越多吞吐量越高,但是分区过多也存在潜在影响,例如文件句柄增加、不可用性增加(如:某个节点故障后,部分Partition重选Leader后时间窗口会比较大)及端到端时延增加等。
- 建议:单个Partition的磁盘占用最大不超过100GB;单节点上Partition数目不超过3000;整个集群的分区总数不超过10000。