← 返回文章列表

Kafka核心原理(七):高性能设计原理

2020-06-08·6 分钟阅读

Kafka核心原理(七):高性能设计原理

前言

Kafka 以其卓越的性能著称,单节点可达百万级 TPS。本章将深入剖析 Kafka 高性能设计的底层原理,理解其如何通过顺序写、零拷贝、页缓存等技术实现极致性能。

性能概览

性能指标

┌─────────────────────────────────────────────────────────────────────────┐
│                    Kafka 性能基准                                        │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  典型性能指标(单 Broker):                                             │
│  ├── 写入吞吐量:100万+ TPS(1KB消息)                                  │
│  ├── 读取吞吐量:100万+ TPS(1KB消息)                                  │
│  ├── 写入延迟:1-5ms(P99)                                             │
│  ├── 读取延迟:1-10ms(P99)                                            │
│  └── 磁盘带宽利用率:90%+                                               │
│                                                                         │
│  性能对比:                                                              │
│  ┌───────────────────────────────────────────────────────────────┐     │
│  │                    写入性能    读取性能    延迟                │     │
│  │  Kafka              极高        极高       毫秒级              │     │
│  │  RabbitMQ           中等        中等       微秒级              │     │
│  │  ActiveMQ           较低        较低       毫秒级              │     │
│  └───────────────────────────────────────────────────────────────┘     │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

高性能设计要点

Kafka 高性能设计核心:
├── 存储层
│   ├── 顺序写磁盘
│   ├── Page Cache 利用
│   ├── 零拷贝技术
│   └── 日志段分段管理
│
├── 网络层
│   ├── NIO 多路复用
│   ├── 批量处理
│   └── 消息压缩
│
├── 并行处理
│   ├── 分区并行
│   ├── 批量拉取/发送
│   └── 异步非阻塞
│
└── 内存管理
    ├── 批量缓冲
    ├── 内存池
    └── 对象复用

顺序写磁盘

原理分析

┌─────────────────────────────────────────────────────────────────────────┐
│                    磁盘 IO 性能对比                                       │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  机械硬盘(HDD)性能:                                                   │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  随机写:                                                       │    │
│  │  ├── 需要寻道和旋转等待                                         │    │
│  │  ├── 平均延迟:10-15ms                                          │    │
│  │  ├── 性能:100-200 IOPS                                         │    │
│  │  └── 吞吐量:几 MB/s                                            │    │
│  │                                                                 │    │
│  │  顺序写:                                                       │    │
│  │  ├── 磁头连续移动,无寻道开销                                   │    │
│  │  ├── 平均延迟:0.1ms                                            │    │
│  │  ├── 性能:接近带宽上限                                         │    │
│  │  └── 吞吐量:100-200 MB/s                                       │    │
│  │                                                                 │    │
│  │  性能差距:顺序写 ≈ 100倍 随机写                                │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  SSD 性能:                                                              │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │  随机写:50000+ IOPS                                           │    │
│  │  顺序写:100000+ IOPS                                          │    │
│  │  顺序写仍有 2-5 倍优势                                         │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

Kafka 顺序写实现

┌─────────────────────────────────────────────────────────────────────────┐
│                    Kafka 日志追加写入                                    │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  日志结构:                                                              │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  Partition Log File                                            │    │
│  │  ┌─────────────────────────────────────────────────────────┐  │    │
│  │  │ Offset    Key      Value      Timestamp                  │  │    │
│  │  ├─────────────────────────────────────────────────────────┤  │    │
│  │  │ 0         key1     value1     2024-01-01 00:00:01      │  │    │
│  │  │ 1         key2     value2     2024-01-01 00:00:02      │  │    │
│  │  │ 2         key3     value3     2024-01-01 00:00:03      │  │    │
│  │  │ 3         key4     value4     2024-01-01 00:00:04      │  │    │
│  │  │ ...                     ↓                                  │  │    │
│  │  │                  追加写入位置                               │  │    │
│  │  └─────────────────────────────────────────────────────────┘  │    │
│  │                                                                 │    │
│  │  写入方向:← 从左向右追加,永远只写入文件末尾                  │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  与传统消息队列对比:                                                    │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  传统消息队列(如 RabbitMQ):                                  │    │
│  │  ├── 消息分散存储在多个文件                                    │    │
│  │  ├── 删除消息产生文件空洞                                      │    │
│  │  └── 导致随机写入                                              │    │
│  │                                                                 │    │
│  │  Kafka:                                                        │    │
│  │  ├── 所有消息追加写入单个日志文件                              │    │
│  │  ├── 不修改已写入的数据                                        │    │
│  │  ├── 删除通过删除整个日志段实现                                │    │
│  │  └── 保证纯顺序写入                                            │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

零拷贝技术

传统数据传输

┌─────────────────────────────────────────────────────────────────────────┐
│                    传统数据传输流程                                      │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  场景:从磁盘读取数据并发送到网络                                       │
│                                                                         │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  磁盘        内核缓冲区        用户缓冲区        内核缓冲区     │    │
│  │    │             │               │               │            │    │
│  │    │── read() ──►│               │               │            │    │
│  │    │    DMA      │               │               │            │    │
│  │    │             │── CPU拷贝 ──►│               │            │    │
│  │    │             │               │               │            │    │
│  │    │             │               │── write() ──►│            │    │
│  │    │             │               │   CPU拷贝     │            │    │
│  │    │             │               │               │── 网络 ──►│    │
│  │    │             │               │               │   DMA     │    │
│  │    │             │               │               │            │    │
│  │    └─────────────┴───────────────┴───────────────┴────────────┘    │
│  │                         │                                         │    │
│  │                    用户空间                                       │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  数据拷贝次数:4 次                                                      │
│  ├── DMA:磁盘 → 内核读缓冲区                                           │
│  ├── CPU:内核读缓冲区 → 用户缓冲区                                     │
│  ├── CPU:用户缓冲区 → 内核写缓冲区                                     │
│  └── DMA:内核写缓冲区 → 网卡                                          │
│                                                                         │
│  上下文切换:4 次                                                        │
│  ├── read():用户态 → 内核态                                            │
│  ├── read()返回:内核态 → 用户态                                        │
│  ├── write():用户态 → 内核态                                           │
│  └── write()返回:内核态 → 用户态                                       │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

sendfile 零拷贝

┌─────────────────────────────────────────────────────────────────────────┐
│                    sendfile 零拷贝流程                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  磁盘        内核缓冲区        Socket缓冲区       网卡          │    │
│  │    │             │               │               │            │    │
│  │    │── sendfile() ─────────────────────────────────────────►  │    │
│  │    │    DMA      │               │               │            │    │
│  │    │             │── CPU拷贝 ──►│               │            │    │
│  │    │             │   (元数据)    │── DMA ──────►│            │    │
│  │    │             │               │               │            │    │
│  │    │             │               │               │            │    │
│  │    └─────────────┴───────────────┴───────────────┴────────────┘    │
│  │                                                                 │    │
│  │  Linux 2.1+ sendfile:                                          │    │
│  │  ├── 数据不经过用户空间                                         │    │
│  │  ├── 减少一次 CPU 拷贝                                          │    │
│  │  └── 减少 2 次上下文切换                                        │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  Linux 2.4+ sendfile + DMA Scatter/Gather:                    │    │
│  │                                                                 │    │
│  │  磁盘        内核缓冲区                           网卡          │    │
│  │    │             │                                 │            │    │
│  │    │── sendfile() ─────────────────────────────────►│           │    │
│  │    │    DMA      │                                 │            │    │
│  │    │             │────── DMA Scatter/Gather ──────►│            │    │
│  │    │             │         (直接传输描述符)         │            │    │
│  │    │             │                                 │            │    │
│  │    │                                                                 │
│  │  真正的零拷贝:                                                 │    │
│  │  ├── 数据完全在内核空间传输                                     │    │
│  │  ├── 零次 CPU 拷贝                                             │    │
│  │  ├── 仅 2 次上下文切换                                         │    │
│  │  └── 数据直接从 Page Cache 到网卡                              │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

Kafka 零拷贝应用

// Kafka 使用 FileChannel.transferTo 实现零拷贝
public class FileRecords {
    
    public long writeTo(GatheringByteChannel channel, long position, int length) throws IOException {
        // 使用 transferTo 实现 zero-copy
        FileChannel fileChannel = this.fileRecords.getFileChannel();
        return fileChannel.transferTo(position, length, channel);
    }
}

// 消费者 Fetch 请求处理流程:
// 1. 消费者发送 FetchRequest
// 2. Broker 从 Page Cache 读取数据
// 3. 使用 transferTo 直接发送到网卡
// 4. 数据不经过用户空间,零拷贝完成

// 性能提升:
// - 减少 CPU 使用率 50%+
// - 减少内存带宽占用
// - 提升吞吐量 2-3 倍

Page Cache 机制

工作原理

┌─────────────────────────────────────────────────────────────────────────┐
│                    Page Cache 工作原理                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                        应用程序                                 │    │
│  │                            │                                   │    │
│  │                            ▼                                   │    │
│  │  ┌─────────────────────────────────────────────────────────┐  │    │
│  │  │                    Page Cache                           │  │    │
│  │  │                   (操作系统管理的内存)                   │  │    │
│  │  │  ┌─────────────────────────────────────────────────┐   │  │    │
│  │  │  │ 热数据缓存 | 预读缓存 | 写缓冲 | 脏页           │   │  │    │
│  │  │  └─────────────────────────────────────────────────┘   │  │    │
│  │  └─────────────────────────────────────────────────────────┘  │    │
│  │                            │                                   │    │
│  │                            ▼                                   │    │
│  │  ┌─────────────────────────────────────────────────────────┐  │    │
│  │  │                       磁盘                               │  │    │
│  │  │                 (实际数据存储)                           │  │    │
│  │  └─────────────────────────────────────────────────────────┘  │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  Kafka 利用 Page Cache 的方式:                                         │
│  ├── 写入:先写入 Page Cache,异步刷盘                                  │
│  ├── 读取:优先从 Page Cache 读取                                      │
│  ├── 热数据:自动缓存,提高命中率                                       │
│  └── 预读:顺序读时自动预读后续数据                                     │
│                                                                         │
│  优势:                                                                  │
│  ├── 写入延迟从毫秒级降到微秒级                                         │
│  ├── 读取命中缓存时无磁盘 IO                                            │
│  ├── 自动管理缓存淘汰                                                   │
│  └── 进程重启后缓存仍然有效                                             │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

写缓冲与刷盘

┌─────────────────────────────────────────────────────────────────────────┐
│                    Kafka 写入与刷盘策略                                  │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  写入流程:                                                              │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  Producer                Broker                                │    │
│  │     │                       │                                  │    │
│  │     │────── send() ────────►│                                  │    │
│  │     │                       │                                  │    │
│  │     │                       │ 1. 写入 Page Cache              │    │
│  │     │                       │    (内存操作,极快)             │    │
│  │     │                       │                                  │    │
│  │     │◄─── ACK ─────────────│                                  │    │
│  │     │    (不等刷盘)         │                                  │    │
│  │     │                       │                                  │    │
│  │     │                       │ 2. 后台异步刷盘                 │    │
│  │     │                       │    (操作系统调度)               │    │
│  │     │                       │                                  │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  刷盘配置:                                                              │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │  # 基于消息数                                                   │    │
│  │  log.flush.interval.messages=10000                              │    │
│  │                                                                 │    │
│  │  # 基于时间                                                     │    │
│  │  log.flush.interval.ms=1000                                     │    │
│  │                                                                 │    │
│  │  # 注意:生产环境通常依赖操作系统默认刷盘                       │    │
│  │  # 强制刷盘会显著降低性能                                       │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  可靠性保障:                                                            │
│  ├── 多副本:即使单节点宕机,其他副本有数据                             │
│  ├── ISR 机制:acks=all 时确保多副本同步                                │
│  └── Page Cache 数据在故障时可能丢失,但副本保证可靠性                   │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

批量处理与压缩

批量处理

┌─────────────────────────────────────────────────────────────────────────┐
│                    批量处理机制                                          │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  生产者批量发送:                                                        │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │  单条发送 vs 批量发送                                           │    │
│  │                                                                 │    │
│  │  单条发送:                                                     │    │
│  │  ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐                              │    │
│  │  │Msg 1│ │Msg 2│ │Msg 3│ │Msg 4│                              │    │
│  │  └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘                              │    │
│  │     │       │       │       │    4次网络请求                   │    │
│  │     ▼       ▼       ▼       ▼                                   │    │
│  │  ──────────────────────────────► Broker                         │    │
│  │                                                                 │    │
│  │  批量发送:                                                     │    │
│  │  ┌───────────────────────────────┐                              │    │
│  │  │  Msg 1 │ Msg 2 │ Msg 3 │ Msg 4│                              │    │
│  │  └───────────────────────────────┘                              │    │
│  │                 │    1次网络请求                                 │    │
│  │                 ▼                                               │    │
│  │  ──────────────────────────────► Broker                         │    │
│  │                                                                 │    │
│  │  性能提升:                                                     │    │
│  │  ├── 网络请求次数减少 80%+                                      │    │
│  │  ├── 协议开销减少                                               │    │
│  │  └── 吞吐量提升 3-10 倍                                         │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  消费者批量拉取:                                                        │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │  max.poll.records=500        # 单次拉取最多 500 条             │    │
│  │  fetch.max.bytes=52428800    # 单次拉取最大 50MB               │    │
│  │  fetch.min.bytes=1           # 最小拉取字节数                  │    │
│  │  fetch.max.wait.ms=500       # 最大等待时间                    │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

消息压缩

┌─────────────────────────────────────────────────────────────────────────┐
│                    消息压缩对比                                          │
├──────────────┬────────────┬────────────┬────────────┬──────────────────┤
│ 压缩类型     │ 压缩率     │ 压缩速度   │ 解压速度   │ 推荐场景         │
├──────────────┼────────────┼────────────┼────────────┼──────────────────┤
│ none         │ 1.0x       │ 最快       │ 最快       │ 低带宽要求       │
│ gzip         │ 3-4x       │ 慢         │ 慢         │ 高压缩比优先     │
│ snappy       │ 2x         │ 快         │ 快         │ 平衡性能         │
│ lz4          │ 2.5x       │ 最快       │ 最快       │ 高吞吐量优先     │
│ zstd         │ 3-4x       │ 中等       │ 快         │ 新场景首选       │
└──────────────┴────────────┴────────────┴────────────┴──────────────────┘

压缩层级:
┌─────────────────────────────────────────────────────────────────────────┐
│                                                                         │
│  Producer 压缩 → Broker 存储 → Consumer 解压                           │
│                                                                         │
│  Kafka 2.1+ 支持端到端压缩:                                            │
│  ├── Producer 压缩:compression.type=lz4                               │
│  ├── Broker 透传:不解压,直接存储压缩数据                              │
│  └── Consumer 解压:读取时自动解压                                      │
│                                                                         │
│  批量压缩优势:                                                          │
│  ├── 批量消息一起压缩,压缩率更高                                       │
│  ├── 网络传输数据量减少 50-70%                                          │
│  └── 磁盘存储空间节省 50-70%                                            │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

配置示例:
// 生产者压缩配置
props.put("compression.type", "lz4");
props.put("batch.size", 65536);  // 64KB 批次配合压缩
props.put("linger.ms", 10);      // 等待更多消息一起压缩

网络优化

NIO 多路复用

┌─────────────────────────────────────────────────────────────────────────┐
│                    Kafka 网络模型                                        │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  Reactor 模式架构:                                                      │
│  ┌────────────────────────────────────────────────────────────────┐    │
│  │                                                                 │    │
│  │                       SocketServer                              │    │
│  │                           │                                     │    │
│  │       ┌───────────────────┼───────────────────┐               │    │
│  │       │                   │                   │               │    │
│  │       ▼                   ▼                   ▼               │    │
│  │  ┌─────────┐        ┌─────────┐        ┌─────────┐           │    │
│  │  │Acceptor │        │Processor│        │Processor│           │    │
│  │  │ Thread  │        │   #1    │        │   #N    │           │    │
│  │  │         │        │         │        │         │           │    │
│  │  │ 1个线程 │        │ N个线程 │        │ N个线程 │           │    │
│  │  │ 接受连接│        │ NIO选择 │        │ NIO选择 │           │    │
│  │  └─────────┘        └─────────┘        └─────────┘           │    │
│  │       │                   │                   │               │    │
│  │       │              ┌────┴────┐         ┌────┴────┐         │    │
│  │       │              │Selector │         │Selector │         │    │
│  │       │              └─────────┘         └─────────┘         │    │
│  │       │                   │                   │               │    │
│  │       └───────────────────┼───────────────────┘               │    │
│  │                           │                                   │    │
│  │                           ▼                                   │    │
│  │                    RequestChannel                             │    │
│  │                    (请求队列)                                  │    │
│  │                           │                                   │    │
│  │                           ▼                                   │    │
│  │                KafkaRequestHandlerPool                        │    │
│  │                (处理线程池)                                    │    │
│  │                                                                 │    │
│  └────────────────────────────────────────────────────────────────┘    │
│                                                                         │
│  关键参数:                                                              │
│  ├── num.network.threads=3     # Processor 线程数                      │
│  ├── num.io.threads=8          # Handler 线程数                        │
│  ├── socket.send.buffer.bytes  # 发送缓冲区                            │
│  └── socket.receive.buffer.bytes # 接收缓冲区                          │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘

内存池

// Kafka BufferPool 实现
public class BufferPool {
    
    private final long totalMemory;
    private final int poolableSize;
    private final Deque<ByteBuffer> free;
    private final Deque<Condition> waiters;
    private long availableMemory;
    
    public ByteBuffer allocate(int size, long maxTimeToBlockMs) {
        if (size == poolableSize && !free.isEmpty()) {
            // 从池中获取预分配的 Buffer
            return free.pollFirst();
        }
        
        if (size > availableMemory) {
            // 等待内存释放
            waitForMemory(size, maxTimeToBlockMs);
        }
        
        // 分配新 Buffer
        ByteBuffer buffer = ByteBuffer.allocate(size);
        availableMemory -= size;
        return buffer;
    }
    
    public void deallocate(ByteBuffer buffer, int size) {
        if (size == poolableSize) {
            // 放回池中复用
            buffer.clear();
            free.add(buffer);
        } else {
            // 直接释放
            availableMemory += size;
        }
        // 唤醒等待的线程
        notifyWaiters();
    }
}

// 配置
buffer.memory=33554432       # 总缓冲区 32MB
batch.size=16384             # 池化大小 16KB

// 优势:
// - 减少 GC 压力
// - 避免频繁内存分配
// - 提高内存利用率

性能调优实践

JVM 调优

# Kafka Broker JVM 配置
export KAFKA_HEAP_OPTS="-Xms6g -Xmx6g"
export KAFKA_JVM_PERFORMANCE_OPTS="
  -XX:+UseG1GC
  -XX:MaxGCPauseMillis=20
  -XX:InitiatingHeapOccupancyPercent=35
  -XX:+ExplicitGCInvokesConcurrent
  -XX:+ParallelRefProcEnabled
  -Djava.awt.headless=true
"

# 关键说明:
# 1. Heap 不宜过大,主要内存给 Page Cache
# 2. G1GC 适合大堆,低延迟目标
# 3. InitiatingHeapOccupancyPercent=35 提前 GC,避免 Full GC

操作系统调优

# 文件描述符
ulimit -n 100000

# 网络参数
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.core.netdev_max_backlog=16384

# 虚拟内存
sysctl -w vm.swappiness=1           # 尽量不用 swap
sysctl -w vm.dirty_ratio=80         # 脏页比例上限
sysctl -w vm.dirty_background_ratio=5  # 后台刷盘比例

# 文件系统
# XFS 挂载选项
mount -o noatime,nodiratime,logbufs=8,logbsize=256k /dev/sdb1 /kafka-logs

性能监控指标

关键性能指标:
├── 吞吐量
│   ├── BytesInPerSec(写入字节/秒)
│   ├── BytesOutPerSec(读取字节/秒)
│   ├── MessagesInPerSec(消息数/秒)
│   └── TotalProduceRequestsPerSec
│
├── 延迟
│   ├── RequestLatencyMs(请求延迟)
│   └── RemoteTimeMs(远程处理时间)
│
├── IO
│   ├── DiskReadBytes
│   ├── DiskWriteBytes
│   └── NetworkRead/WriteBytes
│
├── 内存
│   ├── PageCacheHitRate
│   └── BufferPoolWaitTime
│
└── 网络
    ├── RequestQueueSize
    ├── ResponseQueueSize
    └── NetworkProcessorAvgIdlePercent

小结

本章我们学习了:

  1. 顺序写磁盘:避免随机 IO,性能提升 100 倍
  2. 零拷贝技术:sendfile 减少数据拷贝,提升吞吐
  3. Page Cache:利用 OS 缓存,降低读写延迟
  4. 批量处理:减少网络请求,提升吞吐量
  5. 消息压缩:减少传输和存储开销
  6. 网络优化:NIO 多路复用,内存池复用

参考资料

  1. Kafka Performance
  2. Zero Copy in Linux
  3. Kafka Performance Tuning

下一章预告

在下一章《集群管理与运维》中,我们将深入探讨:

  • KRaft 模式部署与管理
  • 集群监控与告警
  • 性能调优实战
  • 故障排查与恢复

Kafka 核心原理系列持续更新中,欢迎关注!

分享: