当前位置: 首页 > news >正文

Kafka消息队列笔记

一、Kafka 核心架构

  1. 四大组件

    • Producer:发布消息到指定 Topic。

    • Consumer:订阅 Topic 并消费消息(支持消费者组并行)。

    • Broker:Kafka 服务器节点,存储消息,处理读写请求。

    • ZooKeeper/KRaft:集群元数据管理(旧版依赖 ZooKeeper,新版 Kafka 3.0+ 使用 KRaft 模式去 ZooKeeper)。

  2. 核心概念

    • Topic:消息逻辑分类(如 user_events)。

    • Partition:Topic 的分区(物理分片),消息存储与并行处理的基本单位

      • 每个 Partition 内消息有序(全局无序)。

      • 消息通过 offset 唯一标识(分区内自增 ID)。

    • Replica:分区副本(Leader 处理读写,Follower 同步备份)。

    • Consumer Group

      • 组内消费者共同消费一个 Topic,每条消息仅被组内一个消费者处理。

      • 不同组独立消费同一 Topic(广播场景)。


二、消息存储机制

  • 写操作

    • 消息追加到 Partition 尾部(顺序写磁盘 → 高性能)。

    • 存储文件按时间/大小分片(segment = .log + .index)。

  • 读操作

    • 通过 offset 直接定位文件位置(index 文件加速查找)。

    • 零拷贝(Zero-Copy):减少内核态到用户态数据复制,提升吞吐。


三、生产者关键特性

  1. 消息分发策略

    • 默认:key 的哈希值决定 Partition(相同 Key 发到同一分区 → 保序)。

    • 自定义:实现 Partitioner 接口。

  2. 可靠性保证

    • ACKs 机制

      • acks=0:不等待确认(可能丢失)。

      • acks=1:Leader 写成功即确认(默认)。

      • acks=all:所有 ISR(In-Sync Replicas)副本确认(强一致)。

    • 重试机制:可配置重试次数(避免网络抖动)。


四、消费者关键特性

  1. 消费模式

    • Pull 模型:消费者主动拉取消息(可控速率)。

    • 消费位移(Offset)管理

      • 提交到 Kafka 内部 Topic __consumer_offsets

      • 支持自动提交(可能重复消费) vs 手动提交(commitSync/commitAsync)。

  2. 重平衡(Rebalance)

    • 触发条件:消费者加入/退出、Topic 分区数变化。

    • 问题:期间服务不可用(通过 Cooperative Sticky Assignor 策略减少影响)。


五、高可用与容灾

  • 副本同步(ISR)

    • Leader 维护 ISR 列表(同步中的 Follower)。

    • Follower 滞后超过阈值(replica.lag.time.max.ms)会被踢出 ISR。

  • Leader 选举

    • 从 ISR 中选举新 Leader(避免数据丢失)。

  • 数据保留策略

    • 基于时间(log.retention.hours=168)或大小(log.retention.bytes)。


六、适用场景

  • 日志收集:分布式系统日志聚合。

  • 流处理:实时计算(配合 Kafka Streams/Flink)。

  • 事件驱动架构:微服务间解耦通信。

  • 消息缓冲:应对流量峰值(削峰填谷)。


七、性能优化要点

  1. 吞吐量提升

    • 生产者:批量发送(batch.size)、压缩(compression.type=lz4)。

    • 消费者:增加分区数(上限受限于 Broker 资源)。

  2. 延迟降低

    • 生产者:减少 linger.ms(非零可提升吞吐但增加延迟)。

    • 消费者:减小 fetch.min.bytes(更快响应,但增加请求次数)。


八、常见问题

  1. 消息重复消费

    • 原因:消费者提交 Offset 失败后重试。

    • 方案:消费逻辑幂等处理(如数据库唯一键)。

  2. 消息乱序

    • 场景:单分区内保序,跨分区不保序。

    • 方案:相同 Key 发到同一分区(业务层保序需求)。

  3. Rebalance 频繁

    • 优化:调大 session.timeout.msheartbeat.interval.ms


九、生态工具

  • Kafka Connect:外部系统数据导入/导出(如 MySQL → Kafka)。

  • Kafka Streams:轻量级流处理库。

  • Schema Registry:管理 Avro/Protobuf 消息格式(解决兼容性)。


十、版本演进重点

  • Kafka 3.0+:KRaft 模式(取代 ZooKeeper,简化部署)。

  • KIP-500:Controller 自管理(提升集群稳定性)。


附:常用命令

# 创建 Topic
bin/kafka-topics.sh --create --topic test --partitions 3 --replication-factor 2# 生产者发消息
bin/kafka-console-producer.sh --topic test --bootstrap-server localhost:9092# 消费者收消息
bin/kafka-console-consumer.sh --topic test --group g1 --from-beginning# 查看消费者组位移
bin/kafka-consumer-groups.sh --describe --group g1

相关文章:

  • 10. MySQL索引
  • Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复
  • ​BEV和OCC学习-3:mmdet3d 坐标系
  • Spark实战能力测评模拟题精析【模拟考】
  • webpack打包学习
  • Webpack性能优化:构建速度与体积优化策略
  • 6.4本日总结
  • 大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT案例 详解
  • Three.js进阶之音频处理与展示
  • Apache APISIX
  • 多线程爬虫使用代理IP指南
  • 查找 Vue 项目中未使用的依赖
  • PR基本概念——2025填空题
  • JDK 8 到 JDK 24 新特性大全
  • 猎板硬金镀层厚度:新能源汽车高压系统的可靠性基石
  • WebFuture:启动数据库提示: error while loading shared libraries: libaio.so.1问题处理
  • 基于SpringBoot+Vue的在线音乐网站系统
  • Manus AI 现在可以生成短片了
  • 使用 systemctl 实现程序自启动与自动重启
  • 嵌入式分析利器:DuckDB与SqlSugar实战
  • 绍兴网站建设公司地址/阿里指数网站
  • 网站用哪些系统做的好处/网站建设开发公司
  • 武汉网站seo服务/注册域名后怎么建网站
  • 做销售的如何在网站/上海单个关键词优化
  • 时尚网站设计/自己做网站流程
  • 建设网站的公司哪个济南兴田德润怎么联系/中国万网登录入口