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

Kafka 从原理到实践:分区副本机制、生产消费可靠性、以及如何避开那些年踩过的坑

前言Kafka 用起来不难但要真正用好对底层机制的理解和线上运维经验都有要求。会用和用好之间隔着消息丢失、重复消费、ISR 抖动、集群雪崩这些问题。这些问题出的时候往往是对 Kafka 某块机制理解不够深入或者配置调优没做到位。这篇文章分两部分一块是 Kafka 核心原理涵盖分区与副本机制、日志存储结构、Controller 选举、生产者幂等性、消费者位移管理另一块是部署和实践CentOS 7 上的 JDK 环境安装、Kafka 3.9 单机部署、ZooKeeper 配置、生产者和消费者 Topic 操作、cpolar 穿透实现异地调试。适用人群刚接触 Kafka 想打基础的开发者、负责生产环境稳定的 SRE、想系统了解消息队列原理的同学。整体偏深度入门选手需要对照文档边看边操作。本文将深入Kafka的核心原理——从分区与副本机制、日志存储结构、Controller选举到生产者幂等性、消费者位移管理并结合多年线上实践经验总结出一套高可用、高性能、易运维的Kafka最佳实践。无论你是刚接触Kafka的开发者还是负责生产环境稳定性的SRE都能从中获得可落地的参考方案真正打造出稳定、可靠、高效的消息中间件系统。1.安装前准备1.1 操作系统要求Kafka可以在多种 [Linux 发行版](https://so.csdn.net/so/search?qLinux 发行版spm1001.2101.3001.7020)上运行本文以CentOS 7为例其他发行版步骤类似只需调整包管理命令。1.2 java环境要求Kafka基于Java开发需安装JDK 8 或以上版本java-version1.3 安装JDK下载 JDKOracle 官网或 OpenJDK 官网下载 Linux 版本示例OpenJDK 8wgethttps://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz解压安装包mkdir-p/usr/local/javatar-zxvfopenjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz-C/usr/local/java配置环境变量在 /etc/profile 末尾追加exportJAVA_HOME/usr/local/java/jdk1.8.0_41exportPATH$PATH:$JAVA_HOME/bin使配置生效source/etc/profile验证安装java-version2.安装 Kafka2.1 下载 Kafka官网下载示例版本3.6.2linux系统可以直接命令一键安装wgethttps://downloads.apache.org/kafka/3.9.1/kafka_2.13-3.9.1.tgztar-xzfkafka_2.13-3.9.1.tgzmvkafka_2.13-3.9.1 kafka2.2 创建数据日志目录在kafka解压目录同一路径下创建一个kafka_data用于装kafka和zookeeper的log和数据等mkdir-p/opt/kafka_datamkdir-p/opt/kafka_data/zookeepermkdir-p/opt/kafka_data/logmkdir-p/opt/kafka_data/log/kafkamkdir-p/opt/kafka_data/log/zookeeper2.3 配置Kafka配置文件编辑这个文件broker.id0port9092host.nameiplog.dirs/opt/kafka_data/log/kafkazookeeper.connectlocalhost:21812.4 配置zookeeper配置文件dataDir/opt/kafka_data/zookeeperdataLogDir/opt/kafka_data/log/zookeeperclientPort2181maxClientCnxns100tickTimes2000initLimit10syncLimit53.启动与停止Kafka3.1开启ZooKeeper开启ZooKeeper./zookeeper-server-start.sh../config/zookeeper.properties3.2启动Kafka./kafka-server-start.sh../config/server.properties验证是否启动成功jps输出应包含QuorumPeerMain Kafka3.3停止zookeeper./zookeeper-server-stop.sh../config/zookeeper.properties3.4停止kafkfa./kafka-server-stop.sh../config/server.properties4.创建生产者topic和消费者topic简单示例在一个终端执行创建生产者 (推消息到shan)cd/opt/bin/#进入kafka目录./kafka-console-producer.sh --broker-list192.168.42.140:9092--topicwd_test#wd_test你要建立的topic名在一个终端执行创建消费者 从shan上消费消息)cd/opt/bin/#进入kafka目录./kafka-console-producer.sh --broker-list192.168.42.140:9092--topicwd_test#消费shan中topic消息查看效果 一个终端不断输入推送的消息另一个终端则消费这个消息查看当前主题./kafka-topics.sh--zookeeperlocalhost:2181--list你正在家里远程办公突然接到任务需要验证一个新业务模块的消息生产与消费逻辑。但Kafka集群部署在公司内网测试环境没有公网IP防火墙也不开放9099/9092端口——你既无法连接Broker创建Topic也无法从本地启动生产者或消费者进行调试。传统的做法是提交代码到CI/CD触发部署慢求运维临时开防火墙麻烦或干脆去公司不现实有没有更敏捷的方式有借助内网穿透工具我们可以将内网Kafka的9092端口安全暴露到公网。只需一条隧道命令你的本地开发机就能像在内网一样通过 kafka-topics.sh 创建测试 Topic用 kafka-console-producer.sh 发送消息用 kafka-console-consumer.sh 实时消费验证整个过程无需改动 Kafka 配置、无需网络权限审批5 分钟打通内外网让开发调试回归高效。跟我一起来操作吧~5.安装cpolar内网穿透工具cpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。6.配置公网地址通过配置你可以在本地 WSL 或 Linux 系统上运行 SSH 服务并通过 Cpolar 将其映射到公网从而实现从任意设备远程连接开发环境的目的。隧道名称可自定义本例使用了:zookeeper注意不要与已有的隧道名称重复协议tcp本地地址2181端口类型随机临时TCP端口地区China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用任意一个地址在终端中访问即可。tcp 表示使用的协议类型2.tcp.cpolar.top是 Cpolar 提供的域名13917是随机分配的公网端口号通过Cpolar提供的公网地址和端口Kafka就能从本地启动生产者或消费者进行调试啦生产./kafka-console-producer.sh --broker-list2.tcp.cpolar.top:13917--topicshan消费./kafka-console-consumer.sh --bootstrap-server2.tcp.cpolar.top:13917--topicshan7.保留固定TCP公网地址使用cpolar为其配置TCP地址该地址为固定地址不会随机变化。选择区域和描述有一个下拉菜单当前选择的是“China Top”。右侧输入框用于填写描述信息。保留按钮在右侧有一个橙色的“保留”按钮点击该按钮可以保留所选的TCP地址。列表中显示了一条已保留的TCP地址记录。地区显示为“China Top”。地址显示为“26.tcp.cpolar.top:13166”。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道Kafka点击右侧的编辑。修改隧道信息将保留成功的TCP端口配置到隧道中。端口类型选择固定TCP端口预留的TCP地址填写保留成功的TCP地址点击更新。创建完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的TCP地址。最后就可以使用命令测试啦总结Kafka 本身的核心能力体现在三个方面高吞吐低延迟、可持久化存储、水平扩展性。但真正跑在生产环境里可靠性才是最核心的追求——消息不丢、不重、顺序正确这些都需要对分区副本机制、ISR 动态集合、ack 策略有清晰认知才能做到。搭建一套稳定的消息中间件系统光靠默认配置远远不够。副本数量、分区策略、acks 级别、消费位移管理这些细节决定了系统在故障时的实际表现。文章里这套部署流程和最佳实践是过去踩过不少坑之后总结出来的经验参考价值在于帮后来者绕开同样的问题。

相关文章:

Kafka 从原理到实践:分区副本机制、生产消费可靠性、以及如何避开那些年踩过的坑

前言 Kafka 用起来不难,但要真正用好,对底层机制的理解和线上运维经验都有要求。"会用"和"用好"之间,隔着消息丢失、重复消费、ISR 抖动、集群雪崩这些问题。这些问题出的时候,往往是对 Kafka 某块机制理解不…...

Spring的三级缓存机制详解及深度剖析其必要性

一、Spring为什么需要三级缓存源码剖析 Spring采用三级缓存机制来处理单例Bean的循环依赖,主要是为了解决一个核心难题:当循环依赖遇上AOP(面向切面编程)时,如何保证最终注入到其他Bean的,是且仅是唯一的代…...

抖音内容智能采集工具:轻松实现视频、图集与音乐的高效下载

抖音内容智能采集工具:轻松实现视频、图集与音乐的高效下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …...

前端传19位雪花ID给后端,为啥总查不到数据?手把手教你用Jackson搞定JS精度丢失

19位雪花ID在前端传递中的精度陷阱:从原理到解决方案的完整指南 最近在前后端分离项目中遇到一个诡异的问题:前端通过API传递的19位雪花ID,到了后端却总是查不到对应数据。经过排查发现,这背后隐藏着JavaScript数值精度限制的经典…...

STM32H750实战:用MPU给LCD屏和SDRAM划个安全区,解决屏幕闪烁和DMA数据错乱

STM32H750实战:MPU精准配置解决LCD闪烁与DMA数据错乱 1. 问题现象与根源分析 在STM32H750这类高性能MCU的开发过程中,工程师们经常会遇到一些令人困扰的现象:LCD屏幕出现随机闪烁、显示花屏,或者通过DMA传输的数据出现错乱。这些看…...

新手如何通过Taotoken快速获得第一个可用的AI大模型API Key

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 新手如何通过Taotoken快速获得第一个可用的AI大模型API Key 对于希望将大模型能力集成到应用中的开发者而言,获取一个稳…...

HugeJsonViewer:专为GB级JSON大文件设计的专业查看解决方案

HugeJsonViewer:专为GB级JSON大文件设计的专业查看解决方案 【免费下载链接】HugeJsonViewer Viewer for JSON files that can be GBs large. 项目地址: https://gitcode.com/gh_mirrors/hu/HugeJsonViewer 在当今数据驱动的时代,开发者和数据分析…...

Day10_开源鸿蒙_Flutter_for_OpenHarmony_离线笔记_全量备份导出导入

开源鸿蒙 Flutter for OpenHarmony:离线笔记收官(全量备份导出/导入) 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 离线笔记做到 Day9,单条笔记已经能导出/导入(二维码复制文…...

从一条竖线到芯片级故障:记录一次Camera ISP模块的深度硬件debug之旅

从一条竖线到芯片级故障:记录一次Camera ISP模块的深度硬件debug之旅 当产线上百万分之一的故障率遇上工程师的直觉,往往能碰撞出最精彩的技术侦探故事。这次遇到的是一条看似简单的图像竖条纹——在百万台设备中仅出现一例,却意外揭开了芯片…...

告别连线噩梦:用SystemVerilog接口(interface)重构你的模块通信(附modport与时钟块实战)

告别连线噩梦:用SystemVerilog接口(interface)重构你的模块通信(附modport与时钟块实战) 在数字电路设计的进阶之路上,每个工程师都会遇到那个令人头疼的时刻——当模块间的信号连线从最初的几条膨胀到几十条,密密麻麻…...

AI 模型本地化部署

一、什么是 AI 模型本地化部署? 就是:把大模型 / AI 程序从云端服务器,搬到你自己的电脑、服务器、设备上运行。 特点: 不联网也能用数据不上传,隐私安全速度更快、无费用可完全自定义 常见用途: 本地…...

HMCL启动器跨平台架构深度解析:多系统兼容性实现与性能优化技术对比

HMCL启动器跨平台架构深度解析:多系统兼容性实现与性能优化技术对比 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecra…...

GD32F103VET6替换STM32F103VET6实战:ADC+DMA读取内部温度传感器,从-400℃到正常值的排查全记录

GD32F103VET6替换STM32F103VET6实战:从ADC异常到LIN引脚干扰的深度排查 最近在将产品从STM32F103VET6迁移到GD32F103VET6时,遇到了一个令人困惑的问题:内部温度传感器读数异常,显示为-400℃左右的离谱数值。这个问题看似简单&…...

QKeyMapper终极指南:Windows平台全设备按键映射与虚拟手柄模拟的完全解决方案

QKeyMapper终极指南:Windows平台全设备按键映射与虚拟手柄模拟的完全解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄…...

DeepSeek V4模型的Agent能力实测

DeepSeek V4 系列发布之后,关于它能不能用、好不好用的讨论很多,但大部分评测还停留在普通对话或编码上。CowAgent 作为一个开源中立的 Agent 框架,则更关心模型在 Agent 链路中的真实表现,包括任务规划、复杂编码、长期记忆、浏览…...

终极指南:3步实现Unity游戏实时翻译,打破语言障碍

终极指南:3步实现Unity游戏实时翻译,打破语言障碍 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款专为Unity游戏设计的智能翻译插件,让你无…...

QueryExcel:如何在5分钟内从上百个Excel文件中找到你需要的数据?

QueryExcel:如何在5分钟内从上百个Excel文件中找到你需要的数据? 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 在日常工作中,你是否曾经面对过这样的困境&#xf…...

Linux RT 调度器的 rt_mutex:实时互斥锁的优先级继承

简介在工业控制、自动驾驶、航天嵌入式、工控网关等硬实时场景中,Linux 原生普通互斥锁mutex存在致命短板:无法规避经典的优先级反转问题。低优先级任务持有锁阻塞中高优先级实时任务,高优先级任务又被普通分时任务抢占,系统实时响…...

从金融到政务:运维智能体行业落地实战与价值证明

最好的技术,一定能在真实场景中创造可量化价值。 Lerwee运维智能体已在金融、交通、制造、政务等行业规模化落地,服务 1000 客户,覆盖核心业务与关键基础设施。 本文选取四大标杆案例,还原真实痛点、架构设计、落地过程与价值成果…...

FigmaCN中文界面插件:3分钟免费实现Figma界面全中文化的终极指南

FigmaCN中文界面插件:3分钟免费实现Figma界面全中文化的终极指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?专业术语看不懂…...

类脑计算融合物理机理,镜像视界实现孪生高效落地

类脑计算融合物理机理,镜像视界实现孪生高效落地——镜像视界新一代高效可信镜像孪生技术白皮书前言当前数字孪生与视频孪生行业,深陷落地成本高、建模周期长、算法不可信、规模化无望的深层困境,传统技术路线始终无法突破数据驱动黑盒、重型…...

3个步骤快速生成Beyond Compare 5密钥:完整授权激活终极方案

3个步骤快速生成Beyond Compare 5密钥:完整授权激活终极方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否正在寻找一个简单可靠的方法来解除Beyond Compare 5的30天试用限制…...

终极硬件调优指南:如何用Universal x86 Tuning Utility轻松解锁Intel/AMD设备性能

终极硬件调优指南:如何用Universal x86 Tuning Utility轻松解锁Intel/AMD设备性能 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tunin…...

《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》032、Bootloader设计——从Flash加载到固件升级

OpenClaw系列032:Bootloader设计——从Flash加载到固件升级 一、一次现场升级失败的血泪史 去年冬天,某客户现场设备批量变砖。现象很统一:上电后LED狂闪三次,然后死寂。远程抓日志,发现Bootloader在CRC校验阶段直接跳到了错误处理——0x1FFF0000的复位向量被读成了全0x…...

2026届最火的五大降重复率工具实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低AI生成文本的检测率,关键之处在于让内容展现出人类写作的典型特征&#xf…...

Python基础操作

基本操作方法 快捷键 ctrlK,ctrlC/U:注释以及解除注释 ctrl,:进入设置 ctrl~:打开命令行...

《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》031、设备树与硬件描述:从寄存器到设备模型的映射

031、设备树与硬件描述:从寄存器到设备模型的映射 一次让我熬夜到凌晨三点的设备树调试 去年做一款基于i.MX6ULL的工业控制器,外挂了一个SPI接口的ADC芯片——AD7689。硬件设计没问题,原理图确认了三遍,PCB打样回来焊接完,上电。结果呢?SPI读回来的数据全是0xFF。 我第…...

告别手动抢购!用Python+Selenium写一个淘宝/京东秒杀脚本(附完整代码和避坑指南)

PythonSelenium电商秒杀脚本实战:从环境搭建到精准执行的完整指南 每次电商大促时,手动抢购总让人手忙脚乱?作为Python开发者,我们可以用Selenium这个强大的浏览器自动化工具来提升效率。本文将带你从零开始构建一个合规、高效的…...

科技巨头隐私博弈:从商业模式到技术架构的十年演进

1. 从一篇旧文看科技巨头的“隐私游戏”:一场持续十余年的博弈2012年1月,Brian Bailey在EE Times上发表了一篇题为《What were they thinking: Google is at it again》的评论文章。这篇文章的核心,并非探讨某个具体的芯片设计工具或半导体工…...

AI赋能科研:构建模块化工作流,打造你的“第二大脑”

1. 项目概述:当AI成为科研的“第二大脑”如果你是一名科研工作者,无论是学生、研究员还是工程师,大概率都经历过这样的场景:面对海量的文献,感觉无从下手;处理复杂的实验数据,被重复性劳动消耗大…...