Kafka消息队列笔记
一、Kafka 核心架构
-
四大组件
-
Producer:发布消息到指定 Topic。
-
Consumer:订阅 Topic 并消费消息(支持消费者组并行)。
-
Broker:Kafka 服务器节点,存储消息,处理读写请求。
-
ZooKeeper/KRaft:集群元数据管理(旧版依赖 ZooKeeper,新版 Kafka 3.0+ 使用 KRaft 模式去 ZooKeeper)。
-
-
核心概念
-
Topic:消息逻辑分类(如
user_events
)。 -
Partition:Topic 的分区(物理分片),消息存储与并行处理的基本单位。
-
每个 Partition 内消息有序(全局无序)。
-
消息通过
offset
唯一标识(分区内自增 ID)。
-
-
Replica:分区副本(Leader 处理读写,Follower 同步备份)。
-
Consumer Group:
-
组内消费者共同消费一个 Topic,每条消息仅被组内一个消费者处理。
-
不同组独立消费同一 Topic(广播场景)。
-
-
二、消息存储机制
-
写操作:
-
消息追加到 Partition 尾部(顺序写磁盘 → 高性能)。
-
存储文件按时间/大小分片(
segment
=.log
+.index
)。
-
-
读操作:
-
通过
offset
直接定位文件位置(index
文件加速查找)。 -
零拷贝(Zero-Copy):减少内核态到用户态数据复制,提升吞吐。
-
三、生产者关键特性
-
消息分发策略
-
默认:
key
的哈希值决定 Partition(相同 Key 发到同一分区 → 保序)。 -
自定义:实现
Partitioner
接口。
-
-
可靠性保证
-
ACKs 机制:
-
acks=0
:不等待确认(可能丢失)。 -
acks=1
:Leader 写成功即确认(默认)。 -
acks=all
:所有 ISR(In-Sync Replicas)副本确认(强一致)。
-
-
重试机制:可配置重试次数(避免网络抖动)。
-
四、消费者关键特性
-
消费模式
-
Pull 模型:消费者主动拉取消息(可控速率)。
-
消费位移(Offset)管理:
-
提交到 Kafka 内部 Topic
__consumer_offsets
。 -
支持自动提交(可能重复消费) vs 手动提交(
commitSync/commitAsync
)。
-
-
-
重平衡(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)。
-
事件驱动架构:微服务间解耦通信。
-
消息缓冲:应对流量峰值(削峰填谷)。
七、性能优化要点
-
吞吐量提升
-
生产者:批量发送(
batch.size
)、压缩(compression.type=lz4
)。 -
消费者:增加分区数(上限受限于 Broker 资源)。
-
-
延迟降低
-
生产者:减少
linger.ms
(非零可提升吞吐但增加延迟)。 -
消费者:减小
fetch.min.bytes
(更快响应,但增加请求次数)。
-
八、常见问题
-
消息重复消费
-
原因:消费者提交 Offset 失败后重试。
-
方案:消费逻辑幂等处理(如数据库唯一键)。
-
-
消息乱序
-
场景:单分区内保序,跨分区不保序。
-
方案:相同 Key 发到同一分区(业务层保序需求)。
-
-
Rebalance 频繁
-
优化:调大
session.timeout.ms
、heartbeat.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
相关文章:
Kafka消息队列笔记
一、Kafka 核心架构 四大组件 Producer:发布消息到指定 Topic。 Consumer:订阅 Topic 并消费消息(支持消费者组并行)。 Broker:Kafka 服务器节点,存储消息,处理读写请求。 ZooKeeper/KRaft&a…...
机器人变量类型与配置
机器人变量类型与配置 机器人变量类型与配置知识 1. 变量类型 1.1 按创建位置分类 程序变量: 仅适用于当前运行程序程序停止后变量值丢失可在赋值程序节点中直接创建 配置变量: 可用于多个程序变量名和值在机器人安装期间持续存在需预先在配置变量界面…...
nssm配置springboot项目环境,注册为windows服务
NSSM 的官方下载地址是:NSSM - the Non-Sucking Service Manager1 使用powershell输入命令,java项目需要手动配置和依赖nacos .\nssm.exe install cyMinio "D:\minio\启动命令.bat" .\nssm.exe install cyNacos "D:\IdeaProject\capacity\nacos-s…...

20-项目部署(Docker)
在昨天的课程中,我们学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目。大家想一想自己最大的感受是什么? 我相信,除了个别天赋异禀的同学以外,大多数同学都会有相同的…...
Python学习(6) ----- Python2和Python3的区别
Python2 和 Python3 是两个主要版本的 Python 编程语言,它们之间有许多重要的区别。Python3 是对 Python2 的一次重大升级,不完全兼容旧版本。以下是它们的主要区别: 🧵 基本语法差异 1. 打印语法 Python2:print 是一…...

零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南
零基础安装 Python 教程:从下载到环境配置一步到位(支持 VSCode 和 PyCharm)与常用操作系统操作指南 本文是一篇超详细“Python安装教程”,覆盖Windows、macOS、Linux三大操作系统的Python安装方法与环境配置,包括Pyt…...

SAP学习笔记 - 开发18 - 前端Fiori开发 应用描述符(manifest.json)的用途
上一章讲了 Component配置(组件化)。 本章继续讲Fiori的知识。 目录 1,应用描述符(Descriptor for Applications) 1), manifest.json 2),index.html 3),Component.…...
分类与逻辑回归 - 一个完整的guide
线性回归和逻辑回归其实比你想象的更相似 😃 它们都是所谓的参数模型。让我们先看看什么是参数模型,以及它们与非参数模型的区别。 线性回归 vs 逻辑回归 线性回归:用于回归问题的线性参数模型。逻辑回归:用于分类问题的线性参数模型。参数回归模型: 假设函数形式 模型假…...

一键试衣,6G显存可跑
发现一个好玩的一键换衣的工作流,推荐给大家。 https://github.com/chflame163/ComfyUI_CatVTON_Wrapper 作者参考的是开源项目,做成了工作流形式。 https://github.com/Zheng-Chong/CatVTON 先来看下效果,使用动画人物也可换衣ÿ…...
跟着deepseek浅学分布式事务(2) - 两阶段提交(2PC)
文章目录 一、核心角色二、流程详解三、关键示例四、致命缺点五、改进方案六、适用场景七、伪代码1. 参与者(Participant)2. 协调者(Coordinator)3. 模拟运行(Main Class)4. 关键问题模拟 八、待改进问题总…...
【仿生机器人软件架构】通过整合认知系统实现自主精神性——认知系统非常具有可执行性
来自Claude 4.0 pro深度思考 仿生机器人软件架构:通过整合认知系统实现自主精神性 要创建具有真正情感深度的、完全自主的仿生机器人,需要超越基于规则的系统,转向能够实现涌现行为、自适应个性和类似意识处理的架构。根据截至2024年初的现…...

20250602在Ubuntu20.04.6下修改压缩包的日期和时间
rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 5月 23 10:23 Android13.0地面站.tgz* rootrootrootroot-X99-Turbo:~$ touch 1Android13.0地面站.tgz rootrootrootroot-X99-Turbo:~$ ll -rwxrwxrwx 1 rootroot rootroot 36247187308 6月…...
Fullstack 面试复习笔记:项目梳理总结
Fullstack 面试复习笔记:项目梳理总结 之前的笔记: Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结 这篇笔记主自用,系统地梳理一下最近…...

星闪开发之Server-Client 指令交互控制OLED灯案例
系列文章目录 星闪开发之Server-Client 指令交互控制OLED灯案例 文章目录 系列文章目录前言一、核心流程服务端客户端 二、图片资源三、源代码四、在Hispark Studio中配置将sle_oled-master文件夹下的相sle_oled放在peripheral文件夹下。peripheral目录下的 Kconfig文件中添加…...

MySQL补充知识点学习
书接上文:MySQL关系型数据库学习,继续看书补充MySQL知识点学习。 1. 基本概念学习 1.1 游标(Cursor) MySQL 游标是一种数据库对象,它允许应用程序逐行处理查询结果集,而不是一次性获取所有结果。游标在需…...
《前端面试题:CSS有哪些单位!》
CSS单位大全:从像素到容器单位的前端度量指南 精通CSS单位是构建响应式、灵活布局的关键技能,也是面试中的必考知识点 一、CSS单位的重要性与分类 在网页设计中,CSS单位是控制元素尺寸、间距和定位的基础。不同的单位提供了不同的计算方式和…...

[ctfshow web入门] web80
信息收集 过滤了php和data if(isset($_GET[file])){$file $_GET[file];$file str_replace("php", "???", $file);$file str_replace("data", "???", $file);include($file); }else{highlight_file(__FILE__); }解题 大小写…...

【设计模式-4.5】行为型——迭代器模式
说明:本文介绍设计模式中,行为型设计模式之一的迭代器模式。 定义 迭代器模式(Iterator Pattern),也叫作游标模式(Cursor Pattern),它提供一种按顺序访问集合/容器对象元素的方法&…...

C++_核心编程_继承中的对象模型
继承中的对象模型 **问题:**从父类继承过来的成员,哪些属于子类对象中? * 结论: 父类中私有成员也是被子类继承下去了,只是由编译器给隐藏后访问不到 */ class Base { public:int m_A; protected:int m_B; private:int…...

使用cephadm离线部署reef 18版并配置对接openstack
源 curl --silent --remote-name --location https://download.ceph.com/rpm-squid/el9/noarch/cephadm chmod x cephadm./cephadm add-repo --release reef监视节点 离线下载 apt-get --download-only install ceph ceph-mon ceph-mgr ceph-commonmkdir /reef/mon mv /var/…...
Redis最佳实践——性能优化技巧之缓存预热与淘汰策略
Redis在电商应用中的缓存预热与淘汰策略优化 一、缓存预热核心策略 1. 预热数据识别方法 热点数据发现矩阵: 维度数据特征发现方法历史访问频率日访问量>10万次分析Nginx日志,使用ELK统计时间敏感性秒杀商品、新品上线运营数据同步关联数据购物车关…...

2024年数维杯国际大学生数学建模挑战赛D题城市弹性与可持续发展能力评价解题全过程论文及程序
2024年数维杯国际大学生数学建模挑战赛 D题 城市弹性与可持续发展能力评价 原题再现: 中国人口老龄化趋势的加剧和2022年首次出现人口负增长,表明未来一段较长时期内我国人口将呈现下降趋势。这一趋势必将影响许多城市的高质量和可持续发展,…...
3D Gaussian splatting 06: 代码阅读-训练参数
目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...

QT聊天项目DAY13
1. 重置密码 重置密码label也要实现浮动和点击效果,所以将忘记密码这个标签提升为ClickedLabel 1.1 ClickedLabel的复用 由于样式表(.qss) 文件中可以写入多个控件的状态UI,所以为了ClickedLabel能够复用,将成员变量的初始化方式修改为函数…...

Web3如何重塑数据隐私的未来
在这个信息爆炸的时代,数据隐私已成为我们不得不面对的严峻问题。Web3,作为下一代互联网的代表,以其去中心化、用户主权和数据安全等特点,正在重塑数据隐私的未来。它不仅仅是技术的革新,更是对个人隐私保护理念的一次…...

【鸿蒙】HarmonyOS NEXT之如何正常加载地图组件
1、不支持模拟器,需要真机! 2、Map地图需要在AGC上申请权限,需要在AGC上创建对应的项目 地址: AppGallery Connect 2.1 AGC中项目创建 2.1.1 添加项目 2.1.2 起个名字 2.1.3 添加应用: 2.1.4 选择HarmonyOS APP&…...

前端框架进化史
本内容是对 You’ll Never Manually Update the DOM Again // Here’s Why 内容的翻译与整理。 你再也不需要手工更新DOM, 以下是原因 现代 JavaScript 框架,如 React、Vue、Svelte、Solid、Quick,以及本周推出的其他 786 个框架,都试图做一些…...
“轻量应用服务器” vs. “云服务器CVM”:小白入门腾讯云,哪款“云机”更适合你?(场景、配置、价格对比解析)
更多云服务器知识,尽在hostol.com 当你第一次踏入腾讯云这个“数字百货大楼”,面对琳琅满目的“云产品”,是不是有点眼花缭乱,特别是看到“轻量应用服务器”和“云服务器CVM”这两位都号称能帮你“安家落户”的“云主机”时&…...
day63—回溯—全排列(LeetCode-46)
题目描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#x…...

(二)stm32使用4g模块(移远ec800k)连接mqtt
下面代码是随手写的,没有严谨测试仅供参考测试 uint8_t msgBuf[200]{"msg from mcu"}; uint8_t txBuf[250]{0}; uint16_t msgid0; uint16_t mqttTaskState0; uint16_t t100msCount0; uint8_t sendFlag10; uint8_t sendFlag20; void t100msTask1(void) { …...