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

Kafka【九】如何实现数据的幂等性操作

为了解决Kafka传输数据时,所产生的数据重复和乱序问题,Kafka引入了幂等性操作,所谓的幂等性,就是Producer同样的一条数据,无论向Kafka发送多少次,kafka都只会存储一条。注意,这里的同样的一条数据,指的不是内容一致的数据,而是指的不断重试的数据

默认幂等性是不起作用的,所以如果想要使用幂等性操作,只需要在生产者对象的配置中开启幂等性配置即可。

配置项配置值说明
enable.idempotencetrue开启幂等性
max.in.flight.requests.per.connection小于等于5每个连接的在途请求数,不能大于5,取值范围为[1,5]
acksall(-1)确认应答,固定值,不能修改
retries>0重试次数,推荐使用Int最大值

【1】kafka实现幂等性的流程

① 数据增加唯一性标识

开启幂等性后,为了保证数据不会重复,那么就需要给每一个请求批次的数据增加唯一性标识。kafka中,这个标识采用的是连续的序列号数字sequencenum。但是不同的生产者Producer可能序列号是一样的,仅仅靠seqnum还无法唯一标记数据,所以还需要同时对生产者进行区分。

Kafka采用申请生产者ID(producerid)的方式对生产者进行区分。在发送数据前,我们就需要提前申请producerid以及序列号sequencenum

在这里插入图片描述

② 记录生产者的生产状态

Broker中会给每一个分区记录生产者的生产状态:采用队列的方式缓存最近的5个批次数据。队列中的数据按照seqnum进行升序排列。这里的数字5是经过压力测试,均衡空间效率和时间效率所得到的值,所以为固定值,无法配置且不能修改。

在这里插入图片描述

③ 判重

判断Borker当前新的请求批次数据在缓存的5个旧的批次中是否存在相同的,如果有相同的,那么说明有重复,当前批次数据不做任何处理。

在这里插入图片描述

④ 判断序列号是否连续

如果Broker当前的请求批次数据在缓存中没有相同的,那么判断当前新的请求批次的序列号是否为缓存的最后一个批次的序列号加1:

  • 如果是,说明是连续的,顺序没乱,那么继续。
  • 如果不是,那么说明数据已经乱了,发生异常。

在这里插入图片描述

⑤ 重试

Broker根据异常返回响应,通知Producer进行重试。Producer重试前,需要在缓冲区中将数据重新排序,保证正确的顺序后再进行重试即可。

⑥ 更新数据

如果请求批次不重复,且有序,那么更新缓冲区中的批次数据。将当前的批次放置再队列的结尾,将队列的第一个移除,保证队列中缓冲的数据最多5个。

在这里插入图片描述

⑦ 缺陷

从上面的流程可以看出,Kafka的幂等性是通过消耗时间和性能的方式提升了数据传输的有序和去重,在一些对数据敏感的业务中是十分重要的。但是这种幂等性还是有缺陷的:

  • 幂等性的producer仅做到单分区上的幂等性,即单分区消息有序不重复,多分区无法保证幂等性。
  • 只能保持生产者单个会话的幂等性,无法实现跨会话的幂等性,也就是说如果一个producer挂掉再重启,那么重启前和重启后的producer对象会被当成两个独立的生产者,从而获取两个不同的独立的生产者ID,导致broker端无法获取之前的状态信息,所以无法实现跨会话的幂等。要想解决这个问题,可以采用后续的事务功能。

【2】跨会话的幂等性

对于幂等性的缺陷,kafka可以采用事务的方式解决跨会话的幂等性。基本的原理就是通过事务功能管理生产者ID,保证事务开启后,生产者对象总能获取一致的生产者ID。

为了实现事务,Kafka引入了事务协调器(TransactionCoodinator)负责事务的处理,所有的事务逻辑包括分派PID等都是由TransactionCoodinator负责实施的。TransactionCoodinator 会将事务状态持久化到该主题中。

事务基本的实现思路就是通过配置的事务ID,将生产者ID进行绑定,然后存储在Kafka专门管理事务的内部主题 __transaction_state中,而内部主题的操作是由事务协调器(TransactionCoodinator)对象完成的,这个协调器对象有点类似于咱们数据发送时的那个副本Leader。

其实这种设计是很巧妙的,因为kafka将事务ID和生产者ID看成了消息数据,然后将数据发送到一个内部主题中。这样,使用事务处理的流程和咱们自己发送数据的流程是很像的。

接下来,我们就把这两个流程简单做一个对比。

① 普通数据发生流程

在这里插入图片描述

② 事务数据发送流程

在这里插入图片描述

通过两张图可以看到,基本的事务操作和数据操作是很像的。不过要注意,我们这里只是简单对比了数据发送的过程,其实它们的区别还在于数据发送后的提交过程。普通的数据操作,只要数据写入了日志,那么对于消费者来讲。数据就可以读取到了,但是事务操作中,如果数据写入了日志,但是没有提交的话,其实数据默认情况下也是不能被消费者看到的。只有提交后才能看见数据。

更为详细的可以参考下图:

在这里插入图片描述

相关文章:

Kafka【九】如何实现数据的幂等性操作

为了解决Kafka传输数据时,所产生的数据重复和乱序问题,Kafka引入了幂等性操作,所谓的幂等性,就是Producer同样的一条数据,无论向Kafka发送多少次,kafka都只会存储一条。注意,这里的同样的一条数…...

JavaScript知识点1

目录 1.JavaScript中常用的数组方法有哪些? 2.JavaScript的同源策略? 3.JavaScript中的 NaN 是什么? 4.JavaScript中的split、slice、splice函数区别? 1.JavaScript中常用的数组方法有哪些? 在 JavaScript 中&…...

51单片机个人学习笔记11(AT24C02-I2C总线)

前言 本篇文章属于STC89C52单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 [1-1] 课程简介_哔哩…...

创建Java项目,可实现main方法运行,实现对性能数据的处理

1、Android Studio无法执行Java类的main方法问题及解决方法 Android Studio无法执行Java类的main方法问题及解决方法_delegatedbuild-CSDN博客 D:\workspaces\performanceTools\.idea 文件夹下&#xff0c;gardle.xml ,添加依赖 <option name"delegatedBuild"…...

JavaWeb(后端)

MVC MVC 就是 Model View Controller 的缩写&#xff0c;属于一种软件架构设计模式一种思想&#xff0c;把我们的项目分为控制器&#xff08;Controller&#xff09;、模型&#xff08;Model&#xff09;、视图&#xff08;view&#xff09;三个部分&#xff0c;model就是处理…...

828华为云征文 | 华为云Flexusx实例,高效部署Servas书签管理工具的优选平台

前言 华为云Flexus X实例&#xff0c;Servas书签管理工具部署的优选平台&#xff01;828节日特惠&#xff0c;让高效管理您的知识宝藏触手可及。Flexus X实例以其卓越的算力、灵活的资源配置和智能调优技术&#xff0c;为Servas提供了稳定、高效的运行环境。无论是快速访问、安…...

分治法和动态规划法

一、分治法&#xff08;Divide and Conquer&#xff09; 定义 分治法是一种将大问题分解成若干个小问题&#xff0c;递归地解决这些小问题&#xff0c;然后将这些小问题的解合并起来得到原问题的解的算法策略。&#xff08;子问题之间相互独立&#xff09; 基本步骤 1.分解…...

【FreeRL】我的深度学习库构建思想

文章目录 前言参考python环境效果已复现结果 综述DQN.py&#xff08;主要&#xff09;算法实现参数修改细节实现显示训练&#xff0c;保存训练 Buffer.pyevaluate.pylearning_curves 前言 代码实现在:https://github.com/wild-firefox/FreeRL 欢迎star 参考 动手学强化学习e…...

Docker部署nginx容器无法访问80端口

问题说明 在阿里云ECS服务器上部署一台CentOS服务器&#xff0c;然后在里面安装了docker服务。用docker部署了nginx&#xff0c;开启docker中的nginx服务&#xff0c;映射宿主机端口80 把阿里云服务器上面的安全组放开了80端口 但是还是无法访问nginx的80web界面 问题分析 查…...

Python语言开发学习之使用Python预测天气

什么是wttr&#xff1f; 使用Python预测天气的第一步&#xff0c;我们要了解wttr是什么。wttr.in是一个面向控制台的天气预报服务&#xff0c;它支持各种信息表示方法&#xff0c;如面向终端的ANSI序列(用于控制台HTTP客户端(curl、httpie或wget))、HTML(用于web浏览器)或PNG(…...

minio实现大文件断点续传

最近工作中遇到一个需求&#xff0c;用户需要上传大文件几百M&#xff0c;为了更好的用户体验&#xff0c;需要支持断点续传&#xff0c;秒传&#xff0c;上传进度条等功能。需求如下&#xff1a; 方案有两种&#xff1a; 第一种&#xff1a;前端直接将整个大文件丢到后端&…...

Qt绘制动态仪表(模仿汽车仪表指针、故障灯)

背景&#xff1a; 项目需要&#xff0c;可能需要做一些仪表显示。此篇除了介绍实现方法&#xff0c;还要说明心路历程。对我而言&#xff0c;重要的是心理&#xff0c;而不是技术。写下来也是自勉。 本人起初心里是比较抵触的&#xff0c;从业20多年了&#xff0c;深知所谓界…...

【视频教程】GEE遥感云大数据在林业中的应用与典型案例实践

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…...

【时时三省】c语言例题----华为机试题<字符串排序>

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 1&#xff0c;题目 HJ14 字符串排序 描述 给定 n 个字符串&#xff0c;请对 n 个字符串按照字典序排列。 数据范围&#xff1a; 1≤n≤1000 1≤n≤1000 &#xff0c;字符串长度满足 1≤l…...

基于vue框架的城市体育运动交流平台15s43(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,赛事类型,近期赛事,比赛报名,器材类型,器材信息,自由约战,运动队伍 开题报告内容 基于Vue框架的城市体育运动交流平台开题报告 一、项目背景与意义 随着城市化进程的加速和居民健康意识的提升&#xff0c;城市体育运动已成为现代…...

2024年软件测试经典大厂面试题(全3套)【包含答案】

前言 金三银四即将过去&#xff0c;后面迎来的便是金九银十&#xff0c;一直想着说分享一些软件测试的面试题&#xff0c;这段时间做了一些收集和整理&#xff0c;下面共有三篇经典面试题&#xff0c;大家可以试着做一下&#xff0c;答案附在后面&#xff0c;希望能帮助到大家。…...

What is Node.JS and its Pros and Cons

What is Node.JS and its Pros and Cons JavaScript is a client-side development tool. Node.js is a server-side development tool. And it’s only a runtime environment based on Chrome V8 so we don’t write some code in Node.js. Pros: JavaScript on a server …...

TestCraft - GPT支持的测试想法生成器和自动化测试生成器

在当今快速变化的软件开发世界中&#xff0c;自动化测试已成为确保软件质量的关键环节。而随着AI技术的进步&#xff0c;越来越多的工具开始引入人工智能&#xff0c;来辅助生成测试用例和自动化测试脚本。其中&#xff0c;TestCraft&#xff0c;作为一款GPT支持的测试想法生成…...

FreeRTOS内部机制学习04(任务通知和软件定时器)

文章目录 何为任务通知&#xff1f;任务通知使用例子任务通知的优势以及劣势优势劣势 深入源码看看API函数内部干了什么函数的种类函数都做了啥&#xff1f; 软件定时器软件定时器的作用软件定时器内部到底做了什么实现了“闹钟”功能引入守护任务&#xff0c;守护任务做了啥&a…...

华为eNSP :WLAN的配置

一、WLAN的知识点&#xff1a; VLAN配置&#xff1a; VLAN&#xff1a;可以想象成一个大房子&#xff08;网络&#xff09;里划分的不同房间&#xff08;VLAN&#xff09;。每个房间可以有自己的功能&#xff0c;比如一个用于睡觉&#xff08;管理&#xff09;&#xff0c;另一…...

从GigE Vision到千兆UDP:FPGA图像采集系统的灵活升级与10G MAC预留设计

从GigE Vision到千兆UDP&#xff1a;FPGA图像采集系统的灵活升级与10G MAC预留设计 在工业视觉和机器视觉领域&#xff0c;图像采集系统的带宽需求正以惊人的速度增长。随着4K、8K高分辨率相机的普及&#xff0c;以及多相机同步采集场景的增多&#xff0c;传统的千兆以太网接口…...

Qwen3.5-27BGPU算力优化实践:FP16量化+梯度检查点+内存映射技术

Qwen3.5-27B GPU算力优化实践&#xff1a;FP16量化梯度检查点内存映射技术 1. 引言 在部署大型视觉多模态模型Qwen3.5-27B时&#xff0c;GPU显存和计算效率是两大关键挑战。本文将分享我们在4张RTX 4090 D 24GB显卡环境下&#xff0c;通过FP16量化、梯度检查点和内存映射三项…...

半导体放电管TSS选型避坑指南:从RS485到CAN接口的实战经验分享

半导体放电管TSS选型避坑指南&#xff1a;从RS485到CAN接口的实战经验分享 在工业通信设备的电路保护设计中&#xff0c;浪涌防护是一个不可忽视的关键环节。作为一名长期奋战在一线的硬件工程师&#xff0c;我深知半导体放电管&#xff08;TSS&#xff09;选型过程中的种种陷阱…...

用了Trae写业务系统,为什么上线前总要手动补依赖和权限?

发版前夜&#xff0c;测试跑穿才发现前端字段跟后端对不上&#xff0c;改到凌晨三点才勉强收口。这种场景在引入 AI Coding 后并不罕见&#xff0c;不少团队用了 Trae 写业务系统&#xff0c;速度是上去了&#xff0c;可上线前总得花半天专门查安全漏洞和依赖冲突。大家原指望 …...

UniHacker:Unity引擎功能探索的技术研究指南

UniHacker&#xff1a;Unity引擎功能探索的技术研究指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker 技术研究免责声明 本指南所述工具及方法仅用于技术…...

最大数(信息学奥赛一本通- P1549)(洛谷-P1198)

【题目描述】原题来自&#xff1a;JSOI 2008给定一个正整数数列 a1,a2,a3,⋯,an &#xff0c;每一个数都在 0∼p–1 之间。可以对这列数进行两种操作&#xff1a;添加操作&#xff1a;向序列后添加一个数&#xff0c;序列长度变成 n1&#xff1b;询问操作&#xff1a;询问这个序…...

OpenCore 辅助工具(OCAT):跨平台开源配置工具的零基础上手指南

OpenCore 辅助工具&#xff08;OCAT&#xff09;&#xff1a;跨平台开源配置工具的零基础上手指南 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore&#xff08;OCAT&#xff09; 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxili…...

Scala入门必修课:val与var的深度对比与选择指南

Scala入门必修课&#xff1a;val与var的深度对比与选择指南1. 引言&#xff1a;变量定义的灵魂拷问2. 基础概念&#xff1a;val与var的定义2.1 直观区别2.2 类型推导3. 深入理解&#xff1a;从编译到执行3.1 编译后的字节码差异3.2 内存与性能考量4. 实际应用&#xff1a;选择指…...

Qwen1.5-0.5B-Chat电商应用:商品咨询机器人搭建教程

Qwen1.5-0.5B-Chat电商应用&#xff1a;商品咨询机器人搭建教程 1. 引言&#xff1a;为什么需要一个轻量级商品咨询机器人&#xff1f; 想象一下&#xff0c;你经营着一家网店&#xff0c;每天有成百上千的顾客涌入。他们的问题五花八门&#xff1a;“这件衣服有L码吗&#x…...

M9A智能助手:为《重返未来:1999》玩家解放时间的自动化解决方案

M9A智能助手&#xff1a;为《重返未来&#xff1a;1999》玩家解放时间的自动化解决方案 【免费下载链接】M9A 1999 小助手 项目地址: https://gitcode.com/gh_mirrors/m9/M9A 在当今快节奏的游戏环境中&#xff0c;玩家常常需要在重复性日常任务上投入大量时间&#xff…...