第二章 核心概念与架构 v1.0
第一部分 核心架构
一、整体架构
Kafka集群由多个Broker组成,每个Broker是一个Kafka服务器实例。
1.Broker
Kafka集群中的服务器节点称为Broker,负责接收和存储消息,处理消费者请求。
主要功能:
- 消息存储:将消息持久化到磁盘
- 消息转发:处理消费者的拉取请求
- 副本管理:维护分区的副本同步
2.Zookeeper
Kafka使用Zookeeper管理集群元数据,包括Broker注册、Topic配置、分区Leader选举等。
主要功能:
- Broker注册:记录Broker的存活状态
- 配置管理:存储Topic、分区等配置信息
- Leader选举:分区Leader故障时选举新Leader
二、核心概念
1.Topic
消息的逻辑分类,生产者将消息发送到特定Topic,消费者从Topic消费消息。
特点:
- 一个Topic可以有多个分区
- 分区分布在不同的Broker上
- 支持配置副本数
2.Partition
Topic的物理分区,每个Partition是一个有序的、不可变的消息序列。
特点:
- 消息在分区内有序
- 分区之间无序
- 支持水平扩展
3.Offset
每条消息在Partition中的唯一标识,是一个递增的整数。
特点:
- 消费者通过Offset记录消费位置
- 支持按Offset查询消息
- 支持重置消费位点
4.Replication
每个Partition可以有多个副本,分布在不同的Broker上。
副本类型:
- Leader:负责读写的主副本
- Follower:从Leader同步数据的备份副本
ISR机制:
- In-Sync Replicas:与Leader保持同步的副本集合
- 只有ISR中的副本才有资格成为新Leader
- 如果Follower同步延迟超过阈值,会被移出ISR
第二部分 消费者组
一、消费者组概念
1.定义
多个消费者组成一个消费者组,共同消费一个Topic的消息。
2.特点
- 同一消费者组内的消费者分摊消息
- 不同消费者组独立消费
- 每个分区只能被同一组内的一个消费者消费
二、分区分配策略
1.RangeAssignor(默认)
按范围分配分区,可能导致分区分配不均。
2.RoundRobinAssignor
轮询分配分区,分配更均匀。
3.StickyAssignor
粘性分配,尽量保持分配稳定,减少分区重分配。
4.CooperativeStickyAssignor
协作式粘性分配,支持增量重平衡。
三、重平衡(Rebalance)
1.触发条件
- 消费者加入或退出消费者组
- Topic分区数变化
- 消费者心跳超时
2.重平衡影响
- 暂停消费
- 重新分配分区
- 可能导致重复消费
3.优化建议
- 增加会话超时时间
- 增加心跳间隔
- 使用增量重平衡
第三部分 Spring Boot集成
一、添加依赖
xml
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>二、配置文件
yaml
spring:
kafka:
bootstrap-servers: localhost:9092
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
retries: 3
batch-size: 16384
buffer-memory: 33554432
consumer:
group-id: my-group
auto-offset-reset: earliest
enable-auto-commit: false
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
listener:
ack-mode: manual_immediate三、生产者配置说明
| 配置项 | 说明 | 默认值 |
|---|---|---|
| retries | 重试次数 | 0 |
| batch-size | 批量发送大小 | 16384 |
| buffer-memory | 缓冲区大小 | 33554432 |
| acks | 确认机制 | 1 |
四、消费者配置说明
| 配置项 | 说明 | 默认值 |
|---|---|---|
| group-id | 消费者组ID | - |
| auto-offset-reset | 位点重置策略 | latest |
| enable-auto-commit | 自动提交 | true |
| max-poll-records | 单次拉取最大记录数 | 500 |