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

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.lryc.cn/news/2401007.html

相关文章:

  • 机器人变量类型与配置
  • nssm配置springboot项目环境,注册为windows服务
  • 20-项目部署(Docker)
  • Python学习(6) ----- Python2和Python3的区别
  • 零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
  • SAP学习笔记 - 开发18 - 前端Fiori开发 应用描述符(manifest.json)的用途
  • 分类与逻辑回归 - 一个完整的guide
  • 一键试衣,6G显存可跑
  • 跟着deepseek浅学分布式事务(2) - 两阶段提交(2PC)
  • 【仿生机器人软件架构】通过整合认知系统实现自主精神性——认知系统非常具有可执行性
  • 20250602在Ubuntu20.04.6下修改压缩包的日期和时间
  • Fullstack 面试复习笔记:项目梳理总结
  • 星闪开发之Server-Client 指令交互控制OLED灯案例
  • MySQL补充知识点学习
  • 《前端面试题:CSS有哪些单位!》
  • [ctfshow web入门] web80
  • 【设计模式-4.5】行为型——迭代器模式
  • C++_核心编程_继承中的对象模型
  • 使用cephadm离线部署reef 18版并配置对接openstack
  • Redis最佳实践——性能优化技巧之缓存预热与淘汰策略
  • 2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序
  • 3D Gaussian splatting 06: 代码阅读-训练参数
  • QT聊天项目DAY13
  • Web3如何重塑数据隐私的未来
  • 【鸿蒙】HarmonyOS NEXT之如何正常加载地图组件
  • 前端框架进化史
  • “轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)
  • day63—回溯—全排列(LeetCode-46)
  • (二)stm32使用4g模块(移远ec800k)连接mqtt
  • 防火墙iptables项目实战