【Kafka】线上集群部署(案例)

209 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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. 物理机数量估算和相关配置

  1. 物理机数量:一般根据 qps 来计算 / 带宽
  • 已知:一般一台机器大概抗并发 4万左右
  • 高峰 qps 为 5.5万
  • 评估机器的时候,是按照高峰期的 4倍,那么集群的能力要准备到 20万 qps
  • 计算公式:机器数量 = 集群总 qps / 机器 qps
  • 所以,大概需要 6 台物理机
  1. 内存评估:一般 Kafka 自身 JVM 堆内存 6G
  • 了解 Kafka 原理:Kafka 收到数据 -> 采用紧凑的二进制数据格式 -> 写入 os cache -> 写入磁盘文件

  • Kafka 堆内存:那么 KafkaJVM 堆内存不需要分配过大的空间,默认 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 机器内存就够了。
  1. 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