在物理机内存充裕的情况下,建议将 Kafka Broker 的 JVM 堆内存限制在 6GB - 8GB 左右,这是由 Kafka 的底层架构设计和 Java 垃圾回收机制(GC)的特性共同决定的。 具体原因可以归结为以下四个核心维度: 1. Kafka 极度依赖操作系统的 Page Cache(页缓存) 这是最根本的原因。Kafka 的设计哲学是“将内存管理的重任交给操作系统”。 读写机制:Kafka 处理消息时,实际上是在做磁盘的顺序读写。当生产者写入数据时,Kafka 只是将数据写入到了操作系统的 Page Cache 中,然后由操作系统异步刷盘(Flush)到物理磁盘。当消费者读取数据时,如果数据还在 Page Cache 中,就直接从内存返回,不碰磁盘。 内存争抢:物理机的内存是固定的(比如 128GB)。如果你给 JVM 分配了 64GB,那么留给操作系统 Page Cache 的内存就变少了。限制 JVM 内存,是为了把绝大部分物理内存留给操作系统的 Page Cache,从而极大提升 Kafka 的读写吞吐量。 2. 零拷贝技术(Zero-Copy)让数据绕过 J...