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

Kafka 生产者工作流程详解

以下是 Kafka 生产者工作流程的清晰分步解释,结合关键机制与用户数据:


1. 生产者初始化与数据发送

  • 主线程创建生产者对象,调用 send(ProducerRecord) 发送消息。

    • 拦截器(可选):可添加自定义逻辑(如日志、过滤),但默认不启用。


2. 数据预处理

  • 序列化(Serializer)
    将消息的 Key 和 Value 转换为字节流(如使用 StringSerializer 或自定义序列化器)。

    java

    producer.send(new ProducerRecord<>("topic", "key", "value"));
  • 分区器(Partitioner)
    决定消息写入 Topic 的哪个分区:

    • 规则:若指定 Key,按 Key 哈希值分配分区;若未指定 Key,采用轮询或粘性分区策略(Kafka 2.4+ 默认粘性)。

    • 目的:确保相同 Key 的消息进入同一分区,支持顺序消费。


3. 数据缓存(RecordAccumulator)

  • 核心组件

    • 双端队列(Deque):每个分区对应一个队列,存放 ProducerBatch(批次)。

    • 批次(ProducerBatch):默认 16KB(batch.size),装满后立即发送;若未满,等待 linger.ms(默认 0ms,立即发送)。

    • 总缓存大小:默认 32MB(buffer.memory),若缓存满则阻塞发送线程。


4. Sender 线程发送数据

  • Sender 线程独立运行,从 RecordAccumulator 拉取就绪批次。

  • 网络请求封装

    • NetworkClient 将批次按 Broker 分组,封装为 ProducerRequest

    • InFlight Requests 控制:每个 Broker 最多允许 5 个未确认请求(max.in.flight.requests.per.connection)。

      • 作用:防止生产者压垮 Broker,保证网络负载均衡。

      • 示例:若向 Broker1 发送的 5 个请求未收到 ACK,后续请求需等待。


5. 请求重试与 ACK 确认

  • ACK 机制acks 参数):

    • acks=0:不等待确认,吞吐量最高,可能丢失数据。

    • acks=1:Leader 副本写入即成功,平衡可靠性与性能。

    • acks=all:所有 ISR 副本同步成功,可靠性最高,延迟较高。

  • 重试机制retries 参数):

    • 默认不重试(retries=0),需根据业务需求配置(如 retries=3)。


6. 数据写入 Kafka 集群

  • Broker 处理

    • 将数据写入对应分区的 Leader 副本。

    • 若 acks=all,Follower 副本从 Leader 拉取数据完成同步。

  • 分区分布

    • 一个 Topic 的分区分布在多个 Broker 上(如用户示例的 13 个分区可能分布在 Broker1、Broker2 等)。


关键纠正与易混淆点

  1. InFlight Requests 与分区的区别

    • InFlight 限制的是每个 Broker 的未确认请求数,与分区无关。

    • 例如:Broker1 有分区1、分区2,但向 Broker1 发送的请求总数不能超过 5。

  2. 分区选择逻辑

    • 分区由分区器在发送时确定,不会因 Broker 负载高而自动切换

    • 若某分区的 Leader Broker 请求队列已满,生产者会等待,而不是发送到其他分区。

  3. 批次合并优化

    • Sender 线程会合并同一分区的多个小批次,减少网络请求次数,提升吞吐量。


全流程总结图

[Main线程]  ↓ 创建生产者对象  ↓ 调用 send() → 拦截器 → 序列化 → 分区器  ↓ 写入 RecordAccumulator(缓存批次)  |  |(批次满或时间到)  ↓  
[Sender线程]  ↓ 拉取批次 → 按 Broker 分组  ↓ NetworkClient 封装请求 → 发送至 Broker  |  |(等待 ACK 或重试)  ↓  
[Kafka集群]  ↓ Broker 接收请求 → 写入 Leader 副本  ↓ 副本同步(acks=all 时) → 返回 ACK

相关文章:

Kafka 生产者工作流程详解

以下是 Kafka 生产者工作流程的清晰分步解释&#xff0c;结合关键机制与用户数据&#xff1a; 1. 生产者初始化与数据发送 主线程创建生产者对象&#xff0c;调用 send(ProducerRecord) 发送消息。 拦截器&#xff08;可选&#xff09;&#xff1a;可添加自定义逻辑&#xff08…...

完整卸载 Fabric Manager 的方法

目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖&#xff08;可选&#xff09; 4️⃣ 检查是否卸载成功 ✅ 补充&#xff08;仅清除服务&#xff0c;不删包&#xff09; ✅ 完整卸载 Fabric Mana…...

地下停车场调频广播无线覆盖系统:融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台

地下停车场调频广播无线覆盖系统&#xff1a;融合精准选频光纤传输均匀覆盖于一体的创新型地下车库广播无线覆盖平台 北京海特伟业科技有限公司任洪卓发布于2025年5月16日 在现代城市建设中&#xff0c;地下停车场已成为商业综合体、写字楼、住宅区及交通枢纽的标配设施。然而…...

【Linux】进程间通信(一):认识管道

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲进程间通信——认识管道 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础&a…...

中大型水闸安全监测系统解决方案

一、方案概述 中大型水闸作为水利工程的重要组成部分&#xff0c;承担着调节水位、控制水流、防洪排涝等多重功能&#xff0c;在防洪减灾、水资源配置、生态环境改善等方面发挥着巨大作用。然而&#xff0c;由于历史原因&#xff0c;许多水闸存在建设标准偏低、质量较差、配套设…...

蓝桥杯12届国B 123

题目描述 小蓝发现了一个有趣的数列&#xff0c;这个数列的前几项如下&#xff1a; 1,1,2,1,2,3,1,2,3,4,⋯ 小蓝发现&#xff0c;这个数列前 1 项是整数 1&#xff0c;接下来 2 项是整数 1 至 2&#xff0c;接下来 3 项是整数 1 至 3&#xff0c;接下来 4 项是整数 1 至 4&…...

Harmony开发 List、Grid拖动自定义排序实现

1. Harmony开发 List、Grid拖动自定义排序实现 1.1. List拖动功能 本示例基于显式动画、List组件实现了ListItem的上下拖动、ListItem切换以及ListItem插入的效果。   实现思路:List手势拖动 @Entry @Component struct ListDragPage {@State private arr: string[] = [0, …...

迅龙3号基于兆讯MH22D3适配CST328多点触摸驱动开发笔记

MH22D3芯片是兆讯公司新推出的基于cortex-M3内核的新一代芯片&#xff0c;专注于显示应用&#xff0c;其主频高达216Mhz&#xff0c;64KB SRAM&#xff0c;512KB Flash&#xff0c;开发UI应用游刃有余。详细介绍请看&#xff1a;MH22D3新一代显控应用性价比之王 新龙微基于MH22…...

【001】.so文件分析之 ELF格式符号

.so 文件的结构标识主要依据 ELF 格式&#xff08;Executable and Linkable Format&#xff09; 一个 .so 文件其实是一个 ELF&#xff08;可执行与可链接格式&#xff09; 文件&#xff0c;里面包含多个结构标识符和段&#xff08;Sections&#xff09;用于支持动态加载、符号…...

QT之LayOut布局

文章目录 QFormLayoutQGridLayoutQFormLayout、QGridLayout、QHBoxLayout、QVBoxLayout综合案例用QFormLayout 代替 界面左边部分的QGridLayout QFormLayout #include "widget.h"#include <QFormLayout> #include <QLineEdit>Widget::Widget(QWidget *p…...

无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用

一、背景 弱电箱和电视柜只预留了一根网线&#xff0c;路由器放在电视柜&#xff0c;想实现既可以上网又可以正常观看iptv&#xff0c;本文提供了一种方法。 二、准备工作 1、带iptv功能的路由器&#xff1b;2、水星sg105pro网管交换机&#xff1b;3、网线若干&#xff1b; …...

C++类与对象--1 特性一:封装

C面向对象三大特性&#xff1a; &#xff08;1&#xff09;封装&#xff1b;&#xff08;2&#xff09;继承&#xff1b;&#xff08;3&#xff09;多态&#xff1b; C认为万物皆是对象&#xff0c;对象上有对应的属性&#xff08;数据&#xff09;和行为&#xff08;方法&…...

Linux:计算机的层状结构

1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本、台式机。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系结构。 CPU&#xff1a;运算器和控制器组成。运算器主要工作是做算术运算和逻辑运算。控制器主要工作是协调设备之间信息流动的…...

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时&#xff0c;在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定&#xff0c;如下&#xff1a; 那么当我运行时报错了错误&#xff0c;报错信息如下&#xff1a; 因为我数据库表的书类表名是book&#xff0c;MP在匹配时使用了表名前…...

AI 赋能防艾宣传:从创意到实践,我的 IP 形象设计之旅

在数字技术飞速发展的今天&#xff0c;如何让严肃的健康传播变得更有温度、更具吸引力&#xff1f;作为一名参与防艾宣传实践的学生&#xff0c;我尝试通过 AI 工具构建专属 IP 形象&#xff0c;让防艾知识从 "被动接受" 转化为 "主动探索"。这篇文章将分享…...

Redis 事务与管道:原理、区别与应用实践

在现代分布式系统开发中&#xff0c;Redis 作为高性能的内存数据库&#xff0c;其事务处理和管道技术是开发者必须掌握的核心知识点。本文将深入探讨 Redis 事务和管道的实现原理、使用场景、性能差异以及最佳实践&#xff0c;帮助开发者根据实际需求选择合适的技术方案。 一、…...

每日算法刷题Day9 5.17:leetcode定长滑动窗口3道题,用时1h

9. 1652.拆炸弹(简单&#xff0c;学习) 1652. 拆炸弹 - 力扣&#xff08;LeetCode&#xff09; 思想 为了获得正确的密码&#xff0c;你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k > 0 &#xff0c;将第 i 个数字用 接下来 k 个数字之和替换。如果 k < 0…...

手机打电话时如何将通话对方的声音在手机上识别成文字

手机打电话时如何将通话对方的声音在手机上识别成文字 --本地AI电话机器人 上一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音应答&#xff08;一&#xff09; 下一篇&#xff1a;手机打电话时由对方DTMF响应切换多级IVR语音应答&#xff08;二&#xff09; 一、…...

重排序模型解读:gte-multilingual-reranker-base 首个GTE系列重排模型诞生

模型介绍 gte-multilingual-reranker-base 模型是 GTE 模型系列中的第一个 reranker 模型&#xff0c;由阿里巴巴团队开发。 模型特征&#xff1a; Model Size: 306MMax Input Tokens: 8192 benchmark 关键属性&#xff1a; 高性能&#xff1a;与类似大小的 reranker 模型…...

C++学习:六个月从基础到就业——C++11/14:列表初始化

C学习&#xff1a;六个月从基础到就业——C11/14&#xff1a;列表初始化 本文是我C学习之旅系列的第四十三篇技术文章&#xff0c;也是第三阶段"现代C特性"的第五篇&#xff0c;主要介绍C11/14中的列表初始化特性。查看完整系列目录了解更多内容。 引言 在C11之前&a…...

SQL语句执行问题

执行顺序 select [all|distinct] <目标列的表达式1> AS [别名], <目标列的表达式2> AS [别名]... from <表名1或视图名1> [别名],<表名2或视图名2> [别名]... [where <条件表达式>] [group by <列名>] [having <条件表达式>] [ord…...

2025系统架构师---选择题知识点(押题)

1.《计算机信息系统安全保护等级划分准则》(GB 17859-1999)由低到高定义了五个不同级别的计算机系统安全保护能力。 第一级:用户自主保护级---通过隔离用户与数据实现访问控制,保护用户信息安全; 第二级:系统审计保护级---实施更细粒度的访问控制,通过审计和隔离资源确…...

flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...

flutter run --verbose在运行flutter run 可以看到是卡在哪一步 最重要的就是自己查看日志&#xff0c;具体哪一步有问题flutter run --verbose使用这个&#xff0c;运行了项目会将错误信息放在控制台 可能原因 静态资源问题如果&#xff1a;图片、字体文件等没有在pubspec.yam…...

P5682 [CSP-J2019 江西] 次大值

P5682 [CSP-J2019 江西] 次大值 题目描述 Alice 有 n n n 个正整数&#xff0c;数字从 1 ∼ n 1 \sim n 1∼n 编号&#xff0c;分别为 a 1 , a 2 , … , a n a_1,a_2, \dots , a_n a1​,a2​,…,an​。 Bob 刚学习取模运算&#xff0c;于是便拿这 n n n 个数进行练习&…...

Elasticsearch 性能优化面试宝典

Elasticsearch 性能优化面试宝典 🚀 目录 设计调优 🏗️写入调优 ⚡查询调优 🔍综合设计 💎总结 📝设计调优 🏗️ 面试题1:索引设计优化 题目: 假设需要设计一个电商商品索引,日增数据量1TB,要求支持多维度查询(名称、分类、价格区间)。请说明索引设计的关…...

【论文阅读】人脸修复(face restoration ) 不同先验代表算法整理2

文章目录 一、前述二、不同的先验及代表性论文2.1 几何先验&#xff08;Geometric Prior&#xff09;2.2 生成式先验&#xff08;Generative Prior&#xff09;2.3 codebook先验&#xff08;Vector Quantized Codebook Prior&#xff09;2.4 扩散先验 &#xff08;Diffusion Pr…...

无监督学习在医疗AI领域的前沿:多模态整合、疾病亚型发现与异常检测

引言 人工智能技术在医疗领域的应用正经历着从辅助决策向深度赋能的转变。无监督学习作为人工智能的核心范式之一,因其无需大量标注数据、能够自动发现数据内在规律的特性,在医疗AI领域展现出独特优势。尤其在2025年,无监督学习技术在医疗AI应用中呈现出多模态整合、疾病亚…...

计算机操作系统概要

不谋万世者&#xff0c;不⾜谋⼀时。不谋全局者 &#xff0c;足谋⼀域 。 ——陈澹然《寤⾔》《迁都建藩议》 操作系统 一.对文件简单操作的常用基础指令 ls ls 选项 目录或⽂件名:罗列当前⽬录下的⽂件 -l&#xff1a;以长格式显示⽂件和⽬录的详细信息 -a 或 --all&…...

C语言进阶-数组和函数

C语言 一、数组 一维数组 通过数组&#xff0c;可以一次性的分配多个同类型的连续存储区 语法&#xff1a; 类型 数组名字[元素个数]; 例&#xff1a;int arr[6]; arr占用内存6个整型大小的连续存储空间 注意&#xff1a; 通过下标可以区分数组的每个…...

图片通过滑块小图切换大图放大镜效果显示(Vue3)

图片通过滑块小图切换大图放大镜效果显示 实现目标&#xff1a; 显示一组图片列表&#xff0c;鼠标进入小图记录当下小图下标&#xff0c;通过小图下标在数组中对应图片显示到大图位置&#xff1b; 鼠标进入大图位置时&#xff0c;带动滑块移动&#xff0c;并将放大两倍的大图…...