RocketMQ架构05:CommitLog深度剖析 - 顺序写的艺术

引言:顺序写的魔力 CommitLog 是 RocketMQ 高性能的核心秘密。它用顺序写实现了: 单机 10 万+ TPS:远超数据库的随机写 亚毫秒级延迟:消息写入延迟 < 1ms 零拷贝读取:MMAP 直接访问磁盘文件 今天我们从源码级别剖析 CommitLog 的实现细节。 一、为什么顺序写这么快? 1.1 随机写 vs 顺序写 ┌──────────────────────────────────────────┐ │ 磁盘写入性能对比 │ ├──────────────────────────────────────────┤ │ │ │ 随机写(数据库): │ │ ┌───┐ ┌───┐ ┌───┐ │ │ │ A │ → │ C │ → │ B │ │ │ └───┘ └───┘ └───┘ │ │ 磁盘块100 磁盘块500 磁盘块200 │ │ │ │ 问题: │ │ - 磁头需要频繁移动 │ │ - IOPS 约 100-200/s │ │ │ ├──────────────────────────────────────────┤ │ │ │ 顺序写(RocketMQ): │ │ ┌───┬───┬───┬───┬───┐ │ │ │ A │ B │ C │ D │ E │ ... │ │ └───┴───┴───┴───┴───┘ │ │ CommitLog 文件 │ │ │ │ 优势: │ │ - 磁头连续移动 │ │ - 吞吐量 约 600MB/s(机械硬盘) │ │ - 吞吐量 约 2GB/s(SSD) │ │ │ └──────────────────────────────────────────┘ 性能差距: ...

2025-11-14 · maneng

Kafka架构与原理:高吞吐分布式日志系统

为什么Kafka能达到百万级TPS?为什么Kafka使用分区而不是队列?为什么Kafka适合大数据场景? 本文深度拆解Kafka的核心设计,揭示高性能的秘密。 一、Kafka核心架构 1.1 核心概念 Producer → Broker (Partition 0, 1, 2...) → Consumer Group ↓ 磁盘存储(Segment文件) 核心组件: Producer(生产者):发送消息到Topic的Partition Broker(代理服务器):Kafka集群的节点,存储消息 Topic(主题):消息的逻辑分类 Partition(分区):Topic的物理分片,提升并行度 Consumer Group(消费者组):多个Consumer组成的组,负载均衡消费 Offset(偏移量):消息在Partition中的位置 1.2 为什么Kafka使用分区? 对比设计: // RabbitMQ模型:Queue(单队列) Queue: order.queue ├─ Message 1 ├─ Message 2 ├─ Message 3 ... 限制: - 单队列吞吐量受限(单机磁盘IO) - 无法水平扩展 // Kafka模型:Topic + Partition(分区) Topic: order ├─ Partition 0 → Broker 1 │ ├─ Message 1 │ ├─ Message 4 │ ... ├─ Partition 1 → Broker 2 │ ├─ Message 2 │ ├─ Message 5 │ ... └─ Partition 2 → Broker 3 ├─ Message 3 ├─ Message 6 ... 优势: - 并行处理:多个Partition可以并行读写 - 水平扩展:增加Partition可以提升吞吐量 - 负载均衡:Partition分布在不同Broker 核心洞察: ...

2025-11-03 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...