Kafka 在 Linux 上占用的内存没有一个固定值,主要取决于部署模式、数据量、配置参数和是否和 ZooKeeper 同机。下面给你一个清晰的范围和说明。
一、Kafka 本身(Broker)内存占用
1️⃣ 最低运行(测试 / 小流量)
- JVM 堆内存:默认约 1GB
- 实际进程占用(RES):约 1.2 ~ 1.5 GB
✅ 适合:
2️⃣ 生产环境常见配置
- JVM 堆:
- 小集群:2 ~ 4 GB
- 中大型集群:4 ~ 8 GB
- 实际内存占用(RES):
⚠️ 注意:
Kafka 依赖 Page Cache(操作系统缓存),不是全靠 JVM 堆
二、非常重要的点:Page Cache(最容易被忽略)
Kafka 读消息主要来自 OS 的 Page Cache,不是 JVM 堆。
推荐内存规则(官方建议):
- 机器内存 = 堆内存 + Page Cache
- Page Cache 建议:
- 至少能缓存 最近几小时的消息
- 常见:
- 16 GB 机器:堆 4G + 缓存 12G
- 32 GB 机器:堆 8G + 缓存 24G
✅ 所以:
Kafka 机器“内存越大越好”
三、ZooKeeper 内存(如果用老版本 Kafka)
如果你用的是:
- Kafka < 3.0(依赖 ZooKeeper)
那么还要加:
- ZooKeeper:
- 堆:512MB ~ 2GB
- 实际占用:1 ~ 3 GB
四、常见部署内存参考表
| 场景 |
Kafka 堆 |
总内存建议 |
| 本地测试 |
1G |
2G |
| 小生产 |
2~4G |
8~16G |
| 中型集群 |
4~6G |
16~32G |
| 大型集群 |
8G |
32G+ |
五、怎么看 Kafka 实际占多少内存?
ps -aux | grep kafka
或:
jmap -heap <pid>
free -h
六、一句话总结
Kafka 本身只占几 GB,但 Linux 上最好给它 16G 以上内存,因为它靠 Page Cache 吃饭。
如果你愿意,可以告诉我:
- Kafka 版本
- 是否用 KRaft
- 消息量 / 分区数
我可以帮你算一个精确内存配置。