Kafka资源估算

需求场景分析

业务方反馈有 5 个要求:

  • 每天请求量有3亿左右
  • QPS峰值大约在3万左右并发量
  • 消息体平均不超过10k
  • 副本最少2个
  • 消息保留3天

一天总数据量:3亿请求 x 10k消息体 x 2个副本 = 6000000000kb ≈ 5722G ≈ 5.6T

QPS峰值:30000qps

Kafka容量评估之主机数量

  1. 首先选择物理机还是虚拟机?

    尽量选择物理机,才能做到更优高吞吐、高并发的场景。

  2. 服务器数量。

    通常每台物理机承载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 网络架构及线程数计算

img

我们评估下 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 写磁盘流程及内存分析

img

Kafka 读写数据的流程主要都是基于 OS Cache。所以,基本上 Kafka 都是基于内存来进行数据流转的。这样的话要分配尽可能多的内存资源给 OS Cache

Kafka 的核心源码基本都是用 ScalaJava(客户端)写的,底层都是基于 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容量评估之存储

  1. 磁盘使用ssd还是HDD?

    Kafka是顺序读写,ssd和hdd磁盘在顺序读写性能差不远。资金充裕可以使用ssd性能更优。性价比推荐使用hdd盘即可

  2. 磁盘容量

    上面 需求场景分析 得知,一天需要 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)。

这里评估千兆网卡已经可以承受住该需求。

posted @   jiaxzeng  阅读(1367)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示