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)。
这里评估千兆网卡已经可以承受住该需求。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)