Kafka资源估算
需求场景分析
业务方反馈有 5 个要求:
- 每天请求量有3亿左右
- QPS峰值大约在3万左右并发量
- 消息体平均不超过10k
- 副本最少2个
- 消息保留3天
一天总数据量:3亿请求 x 10k消息体 x 2个副本 = 6000000000kb ≈ 5722G ≈ 5.6T
QPS峰值:30000qps
Kafka容量评估之主机数量
-
首先选择物理机还是虚拟机?
尽量选择物理机,才能做到更优高吞吐、高并发的场景。
-
服务器数量。
通常每台物理机承载qps在4w左右没有问题,一般会让高峰期的 QPS 控制在集群总承载 QPS 能力的 30%-50% 左右。
现在要求高峰期在 30000 QPS,那么集群总承载在 60000-100000 QPS。服务器数量在2-3台,集群通常取奇数台。所以这里选择使用3台物理机。
Kafka容量评估之CPU
我们评估需要多少个 CPU Core,主要是看 Kafka 进程里会有多少个线程。
线程主要是依托多核 CPU 来执行的。如果线程特别多,但是 CPU 核很少,就会导致 CPU 负载很高,会导致整体工作线程执行的效率不高,性能也不会好。所以,我们要保证 CPU Core 的充足,来保障系统的稳定性和性能最优。
Kafka 网络架构及线程数计算

我们评估下 Kafka 服务器启动后会有多少线程在跑。其实这部分内容跟 Kafka 超高并发网络架构密切相关。
上图是 Kafka 超高并发网络架构图,从图中我们可以分析得出:
| 线程名 | 默认数 | 建议数 | 总数 |
|---|---|---|---|
| Accept线程 | 1 | 1 | 1 |
| Processor线程 | 3 | 9 | 9 |
| RequestHandle线程 | 8 | 32 | 32 |
| 定时清理线程 | 1 | 1 | 1 |
| 副本同步线程 | 1 | 1 | 1 |
| 感应控制台状态线程 | 1 | 1 | 1 |
| 定时检测ISR线程 | 1 | 1 | 1 |
| ... | ... | ... | ... |
除了上图所列的还有其他一些线程。所以,估算下来一个 Kafka 服务启动后会有 150-250 线程在跑。
| CPU数量 | 支撑情况 |
|---|---|
| 4 | 可以支撑几十个线程,在高峰期CPU几乎被打满 |
| 8 | 可以比较宽裕的支撑几十个线程繁忙的工作 |
| 16 | 建议核数(2CPU*8),基本可以承载100-200个线程的工作 |
| 32 | 如果资源充裕,性能会更加好(4CPU*8) |
综合建议每台主机的 CPU 在 16-32 核数的
Kafka容量评估之内存
Kafka 写磁盘流程及内存分析

Kafka 读写数据的流程主要都是基于 OS Cache。所以,基本上 Kafka 都是基于内存来进行数据流转的。这样的话要分配尽可能多的内存资源给 OS Cache。
Kafka 的核心源码基本都是用 Scala 和 Java(客户端)写的,底层都是基于 JVM 来运行的。所以要分配一定的内存给 JVM 以保证服务的稳定性。对于 Kafka 的设计,并没有把很多的数据结构存储到 JVM 中。所以根据经验,给 JVM 分配 3-6G 就足够了。
OS Cache 预估:
Consumer读数据优先在 OS Cache 获取数据,存在则拷贝数据给网卡发送出去。否则先在磁盘读数据到 OS Cache 然后再拷贝到网卡。最优方案所有partition的数据都存在 OS Cache ,但是内存是昂贵的。一般保证 25% 左右的数据在 OS Cache 中就可以了。
上面都是基于partition来评估,后来和业务方沟通得知:200 左右个topic,每个topic设置12个partition。总共 2400 个partition。默认 segment 都是 1G 大小。
每台机内存
OS Cache:2400 partition * 1G segment * 0.25 缓存 / 3台主机 = 200G
JVM: 6G
每台主机预估是 256G 的内存
Kafka容量评估之存储
-
磁盘使用ssd还是HDD?
Kafka是顺序读写,ssd和hdd磁盘在顺序读写性能差不远。资金充裕可以使用ssd性能更优。性价比推荐使用hdd盘即可
-
磁盘容量
上面 需求场景分析 得知,一天需要 5.6T 的空间,需要保留 3 天的消息。整个集群总共需要 5.6T * 3 = 16.8T,每台主机需要存 5.6T 消息。还有其他存储,其他存储需要预占 20% ,则 5.6T + 5.6T*0.2 = 6.7T 的数据盘即可
Kafka容量评估之网卡
服务器网卡通常是 千兆网卡(1Gbits/s), 万兆网卡(10Gbits/s) 选择。网卡通常跑不满带宽的,一般能 70% 左右,即是(700MB/s 和 7Gbits/s)
QPS峰值 30000 QPS,集群使用3台物理机,每台承载 10000 QPS,消息体是大约在 10k。
每台主机每秒接受 10000 QPS * 10k = 97MB 报文。加上2副本数据拉取同步(97MB*2=294MB/s)。
这里评估千兆网卡已经可以承受住该需求。

浙公网安备 33010602011771号