Kafka 的特点:
- 高并发,通过分区实现负载均衡
- 支持消息有序性
- 强大的数据复制机制,通过副本保证数据一致性
- 高吞吐率和低延迟
选择 Kafka 场景:
- 大量数据的实时处理
- 实时流式数据传输
- 高并发下的实时消息消费
Kafka 架构:
- **分区**:实现负载均衡,提高并发度
- **消费者**:高效消费消息
消息有序性:
- 每个分区内的消息顺序写入
- 单个分区由单一消费者消费,保证顺序性
- 分区间消息不保证有序
Kafka Producer 执行过程:
1. 生产消息
2. 找到分区的 Leader
3. 推送消息
4. 通过 ISR 列表通知 Follower
5. Follower 拉取消息,发送 ACK
6. Leader 收到所有副本的 ACK,更新 Offset
Kafka Consumer 线程模型:
- **Thread-Per-Consumer**:利用主题分分区机制,每个线程有自己的 Consumer 实例,消费多个分区
- **并行性**:线程间独立,无同步和通信需求
数据一致性原理:
- Leader 和 Follower 间数据一致
- ISR 列表确保一致性,避免数据丢失
ISR、OSR、AR:
- **ISR**:副本同步队列,Leader 同步数据给 Follower
- **OSR**:出同步副本,超过阈值的 Follower
- **AR**:所有副本集合
LEO、HW、LSO、LW:
- **LEO**:日志文件中下一条消息的位置
- **HW**:消费位置的标识
- **LSO**:事务中第一条消息的位置或完成事务时与 HW 相同
- **LW**:AR 集合中最小的日志文件起始位置
数据传输事务:
- **最多一次**:消息最多传输一次,可能不传输
- **最少一次**:消息不会被漏掉,可能重复
- **精确一次**:确保消息不重复、不遗漏传输
Kafka 消费指定分区消息:
- 消费者通过 offset 控制,可回滚重读
消息传输模式:
- **Pull**:消费者主动从 Broker 拉取消息,灵活批量控制
- **Push**:Broker 推送消息至消费者,受限于消费速率
高效文件存储设计:
- **分割大文件**:定期清理已消费文件,减少磁盘占用
- **索引优化**:快速定位消息,控制响应大小
- **内存映射**:减少磁盘 I/O 操作
- **稀疏存储**:降低索引文件元数据空间需求
Kafka 分区分配:
- 副本数量不超过 Broker 数量
- 首分区随机分配
- 其他分区依次循环分配
再均衡过程:
- 消费者组成员请求加入
- Leader 分配消费方案
- 方案广播至所有成员
高吞吐率实现:
- 分布式存储,优化读写性能
- 大文件分割,灵活数据管理
- 并发消费机制,提升处理速度
Kafka 缺点:
- 较高的系统开销
- 配置复杂度
- 需要较大量存储资源
新旧消费者区别:
- **旧消费者**:简单消费者,功能有限
- **新消费者**:支持消费者组,再均衡机制
分区调整限制:
- **增加分区**:使用命令支持
- **减少分区**:不支持,逻辑复杂,可能导致数据丢失或破坏有序性
通过上述内容,可以清晰地看到 Kafka 在设计上的核心优势和应用场景,以及其在消息处理、数据存储、系统管理等方面的关键机制和特性。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。