Kafka 核心组件解析
1. 基础架构图解
┌─────────┐ ┌─────────┐ ┌─────────┐
│Producer │───▶ │ Broker │ ◀─── │Consumer │
└─────────┘ └─────────┘ └─────────┘│ ▲ │▼ │ ▼
┌───────────────────┐ │ ┌───────────────────┐
│ Topic │ │ │ Partition │
│ (逻辑消息分类) │ │ │ (物理存储分片) │
└───────────────────┘ │ └───────────────────┘│┌──────────┐│ZooKeeper ││ (协调服务)│└──────────┘
2. 组件功能详解
组件名称 | 核心作用 | 技术特性 |
---|---|---|
Producer | 消息生产者,负责发布消息到指定Topic | 支持异步批量发送、消息压缩(snappy/gzip) |
Consumer | 消息消费者,通过订阅Topic获取数据 | 支持消费者组负载均衡、位移(offset)管理 |
Broker | Kafka服务节点,处理读写请求并持久化数据 | 通过副本机制(Replica)保障高可用,单个Broker可处理数十万并发连接 |
Topic | 逻辑消息分类单元,类似数据库表的概念 | 支持多分区分布式存储,每个Topic可配置独立的消息保留策略 |
Partition | Topic的物理分片,每个Partition是顺序不可变的消息队列 | 通过分区键(Key)控制消息路由,单个Partition的写入顺序严格保障 |
ZooKeeper | 集群元数据管理与协调服务(注:新版Kafka正逐步移除ZK依赖) | 维护Broker注册信息、Topic配置、Consumer位移等元数据,实现Leader选举等协调功能 |
3. 代码级交互示例
// Producer发送消息到指定Partition
ProducerRecord<String, String> record = new ProducerRecord<>("order_topic", 0, // 显式指定Partition 0"order_123", "{\"amount\":99.9}"
);
producer.send(record);// Consumer指定消费Partition
TopicPartition partition0 = new TopicPartition("order_topic", 0);
consumer.assign(Collections.singletonList(partition0));
consumer.seekToBeginning(Collections.singletonList(partition0));
4. 关键配置参数
# Broker配置示例
num.partitions=3 # 默认分区数
default.replication.factor=2 # 默认副本数
log.retention.hours=168 # 消息保留时间# Producer配置优化
compression.type=snappy # 消息压缩
linger.ms=5 # 批量发送等待时间
max.in.flight.requests=5 # 最大在途请求数# Consumer配置优化
max.poll.records=500 # 单次拉取最大记录数
fetch.min.bytes=1024 # 最小抓取字节数
5. 新版架构演进(KRaft模式)
传统架构 KRaft模式
┌──────────┐ ┌──────────┐
│ZooKeeper │ │ Controller │
└──────────┘ │ (内置元数据)││ └──────────┘▼ │
┌──────────┐ ┌──────────┐
│ Broker │ │ Broker │
└──────────┘ └──────────┘
注:Kafka 3.0+ 开始支持去ZooKeeper的KRaft模式,通过内置元数据控制器提升集群稳定性