当前位置: 首页 > 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.xdnf.cn/news/876403.html

相关文章:

  • 打包成windows exe
  • json 支持复杂结构预览、大模型服务部署体验优化|ModelWhale 版本更新
  • Ansible自动化运维全解析:从设计哲学到实战演进
  • 手写Promise中的实例方法catch
  • 如何做出更明智的选择:从吃馒头看经济学思维
  • 嵌入式学习Day32
  • 三维坐标转换
  • AXPM11584:颠覆传统,发现新可能
  • 灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试
  • Mask篇 (含引导层、不规则遮罩)
  • 深入解析Java17核心新特性(密封类、模式匹配增强、文本块)
  • Python 类型注释 - typing
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • Seata 分布式事务安装配置集成实战
  • Git忽略规则.gitignore不生效解决
  • 突破模型成本瓶颈:MoE如何让专业大模型更易用?​
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • PH热榜 | 2025-06-04
  • Facebook接入说明
  • JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 列出浏览器所有的启动参数,并解释说明每个参数的含义
  • 行为型-模板模式
  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • 电路图识图基础知识-直接启动/接触器启动(十四)
  • 分布式训练下的多进程环境
  • [Java 基础]枚举
  • NLP中的input_ids是什么?