持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
案例模拟
10亿请求电商平台
需求:电商平台,每天 10 亿请求发送到 Kafka
集群。
1. QPS
估算
高峰期 qps
计算:6亿 / 3小时 = 5.5万/s
0点 ~ 8点这段时间没有多大数据量,可以先忽略。那么主要是剩下的 16小时。
根据 二八法则:80%的数据量在 16小时内处理,80%的数据量在 20% 的时间内完成。
- 数据量:
10亿 × 80% × 80% = 6亿
- 时间:
16 × 20% = 3小时
2. 物理机数量估算和相关配置
- 物理机数量:一般根据
qps
来计算 / 带宽
- 已知:一般一台机器大概抗并发 4万左右
- 高峰
qps
为 5.5万 - 评估机器的时候,是按照高峰期的 4倍,那么集群的能力要准备到 20万
qps
- 计算公式:机器数量 = 集群总
qps
/ 机器qps
- 所以,大概需要 6 台物理机
- 内存评估:一般
Kafka
自身JVM
堆内存 6G
-
了解
Kafka
原理:Kafka
收到数据 -> 采用紧凑的二进制数据格式 -> 写入os cache
-> 写入磁盘文件 -
Kafka
堆内存:那么Kafka
的JVM
堆内存不需要分配过大的空间,默认6G
就够了 -
os cache
分配:- 假设:
Kafka
集群有 100个topic
、每个topic
有 6个partition
、每个partition
有 2个 副本 leader partition
估算: 一共 100 × 6 = 600个,平均到 6 台机子上,每台 100 个partition
- 每个
partition
最新正在写的日志段文件的大小是:默认1GB
- 单台机器上,最新的正在写的日志段文件大小:
100个(
partition) * 1GB(日志段文件) * 6 = 600GB
- 最多有 1% - 10% 的数据被消费:
600 * (1% ~ 10%) = 6G ~ 60G
,那么大概64G
机器内存就够了。
- 假设:
CPU
压力评估:一般都建议是16核CPU,甚至32核CPU
-
CPU
4 核:一般来说就 几十个 线程,在高峰期容易把CPU
打满 -
CPU
8 核:富裕支持 几十个线程繁忙工作 -
CPU
16核:可以达到 一两百线程的工作broker
一般都会启动几十个甚至上百个线程。
4. 磁盘选择
SSD
磁盘的性能相比于机械硬盘:
- 磁盘随即写:
SSD
性能高 - 磁盘顺序写:都差不多
选择 机械硬盘 理由: Kafka
是基于 os cahce
和 磁盘顺序写机制
os cache
:是在内存中,跟磁盘无关- 磁盘顺序写机制:
SSD
和 机械磁盘在此场景下性能相等,相对 机械磁盘便宜
磁盘大小:2 块 1TB
的机械磁盘
- 每天 1 亿条
1KB
大小的消息,保存两份且留存两周的时间:那么总的空间大小就等于 1 亿 * 1KB * 2 / 1000 / 1000 = 200GB。 - 一般情况下
Kafka
集群除了消息数据还有其他类型的数据,比如索引数据等,故我们再为这些数据预留出 10% 的磁盘空间,因此总的存储容量就是 220GB。 - 既然要保存一周,那么整体容量即为 220GB * 7,大约 2TB 左右。
Kafka
支持数据的压缩,假设压缩比是 0.75,那么最后你需要规划的存储空间就是 0.75 * 2 = 1.5TB。
5. 网络带宽估算
一般限制
Kafka
每秒带宽资源就是300mb/s
。