随笔 - 191, 文章 - 1, 评论 - 0, 阅读 - 33459
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Kafka - 08容量评估

Posted on   Kingdomer  阅读(823)  评论(0编辑  收藏  举报

Kafka - 08容量评估

一、需求分析

评估要求: 每天的请求量、 每条消息的大小; 参考二八原则

  • 假设有每天10亿请求
    • 凌晨0-8点请求量较小,其余16小时处理80%的请求。 而 16小时的20%时间处理 8亿请求的80%数据。
    • 高峰时间段 QPS = (8亿 * 80%) / (16 * 20%) = 5.5万。
  • 每条数据50kb, 每天数据量 10亿 * 50kb = 46T。
    • 分区的副本数为2, 则存储量为 46T *2 = 92T。
    • 如果数据保存的时间周期为3天, 则需要磁盘空间为 92T * 3 = 276T。

二、资源评估

2.1 服务器数量

  • 物理机还是虚拟机。 生产环境使用物理机。
  • 按照高峰值的4倍评估, 集群处理20万QPS。 5台物理机,每台承受4万请求。

2.2 磁盘选择

  • SSD固态硬盘还是机械硬盘。 Kafka顺序写,使用普通机械硬盘即可。
  • 每台服务器的硬盘数量: 5台机器存储276T,每台60T左右。 每台服务器 11个 7TB 的SAS硬盘。

2.3 内存评估

  • Kafka读写数据,都是基于os cache。分配尽可能多内存给os cache。
  • Kafka核心代码是scala写,客户端代码是java写的,都是基于jvm。预留内存给JVM。
    • Kafka没有把很多数据结构都放在JVM内存中,配置10G足够。
  • 假设有 100个topic, 100 topic * 5 patition * 2 replica = 1000 partitions。
    • 保证1000 个partition 最新的log数据文件 都在内存中, 1000 * 1G = 1000G。
    • 只需要保证 log数据的 25%最新数据在内存里,则需要内存250G。
    • 每台服务器 50G内存 存储最新数据。
  • 服务器总内存: 10G(Kafka服务) + 50G(os cache) + 4G(操作系统) = 64G。
  • 选择64GB 或者 128GB内存。

2.4 CPU压力

  • 计算服务里有多少线程。Kafka服务启动后,一般会有一百多个线程。
    • Acceptor线程   1个
    • processor线程  3    6~9个
    • 处理请求线程    8个  32个线程
    • 定期清理线程、拉取数据线程、定期检查ISR列表的线程等。
  • cpu core = 4个, 几十个线程会将CPU跑满。
  • cpu core = 8个, 可以轻松支持几十个线程。
  • 16个cpu core 或 32个cpu core, 支持 100-200个线程。

2.5 网络需求

  • 服务器:千兆网卡(1Gbits/s), 万兆网卡(10Gbits/s)
  • 峰值5.5万QPS, 5台服务器, 每台 1万 * 50KB = 488MB, 每台接收500M数据。
  • 加上副本数据拉取同步, 488M * 2 = 976MB/s = 7.8Gbits/s。
  • 选择万兆网卡。

 

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示