当前位置: 首页 > 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
http://www.dtcms.com/a/231327.html

相关文章:

  • 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实战
  • Webpack搭建本地服务器
  • Solidity 开发指南:构建你的第一个 DApp
  • 《校园生活平台从 0 到 1 的搭建》第一篇:创建项目与构建目录结构
  • 【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac
  • 【原理解析】为什么显示器Fliker dB值越大,闪烁程度越轻?
  • (LeetCode 每日一题)3403. 从盒子中找出字典序最大的字符串 I (贪心+枚举)
  • SOC-ESP32S3部分​​​​​​​:29-乐鑫组件库的使用
  • 【DVWA系列】——Brute Force(暴力破解)——low
  • 1. 数据库基础
  • C++修炼:C++11(一)