聊聊Kafka的生产者消费者确认机制

news2024/11/6 7:08:41

一、生产者确认机制

消息从生产者客户端发送至broker服务端topic,需要ack确认。acksmin.insync.replicas是两个配置参数.其中acks是producer的配置参数,min.insync.replicas是Broker端的配置参数,这两个参数对于生产者不丢失数据起到了很大的作用

ISR

In-sync replica(ISR)称之为同步副本,ISR中的副本都是与Leader进行同步的副本,所以不在该列表的follower会被认为与Leader是不同步的。该同步副本的列表是一个动态的,根据副本与leader同步的情况动态增删。

acks确认机制

acks参数指定了必须要有多少个分区副本收到消息,生产者才认为该消息是写入成功的。

  • acks=0,表示生产者在成功写入消息之前不会等待任何来自服务器的响应. 换句话说,一旦出现了问题导致服务器没有收到消息,那么生产者就无从得知,消息也就丢失了.

  • acks=1,表示只要集群的leader分区副本接收到了消息,就会向生产者发送一个成功响应的ack,此时生产者接收到ack之后就可以认为该消息是写入成功的. 一旦消息无法写入leader分区副本(比如网络原因、leader节点崩溃),生产者会收到一个错误响应。

  • acks =all,表示只有所有参与复制的节点(ISR列表的副本)全部收到消息时,生产者才会接收到来自服务器的响应. 这种模式是最高级别的,也是最安全的,可以确保不止一个Broker接收到了消息. 该模式的延迟会很高.

对于消息的发送,支持同步阻塞、异步回调两种方式,一般建议是使用后者,提高应用的吞吐量。

二、消费者确认机制

在Kafka中,消费者确认是通过消费者位移的提交实现的。类似RabbitMQ的ACK机制。

消费者位移

每个 consumer 实例都会为它消费的分区维护属于自己的位置信息来记录当前消费了多少条消息。这在 Kafka 中有一个特有的术语:位移(offset)。

相比较将offset保存在服务器端(broker),这样虽然简单,但是有如下的问题:

  1. broker变成了有状态的,增加了同步成本,影响伸缩性。

  2. 需要引入应答机制来确定消费成功。

  3. 由于需要保存众多consumer的offset,可能需要引入复杂的数据结构,对资源有一定的浪费。

在Kafka中,消费者组(Consumer Group)负责管理分发消费消息,因此将offset保存在消费者组中是比较合适的选择。其数据格式只需要是特定格式的整形数据即可。

offset 对于 consumer 非常重要,因为它是实现消息交付语义保证(message delivery semantic)的基石。

消息交付语义即最多一次、最少一次、精确一次。

位移提交

consumer客户端需要定期地向Kafka集群汇报自己消费数据的进度,这一过程被称为位移提交(offset commit)。位移提交这件事情对于 consumer 而言非常重要,它不仅表征了consumer 端的消费进度,同时也直接决定了 consumer 端的消费语义保证。

新版的Kafka由topic管理提交的位移,该topic是__consumer_offsets。默认是有50个分区,编号从0到49。

每个位移提交请求都会往__consumer_offsets 对应分区上追加写入一条消息。消息的 key 是group.id、topic和分区的元组,而 value就是位移值。

提交方式

默认情况下,consumer是自动提交位移的,自动提交间隔是5秒。这就是说若不做特定的设置,consumer程序在后台自动提交位移。通过设置auto.commit.interval.ms参数可以控制自动提交的间隔。

手动位移提交就是用户自行确定消息何时被真正处理完并可以提交位移。在一个典型的 consumer 应用场景中,用户需要对 poll 方法返回的消息集合中的消息执行业务级的处理。用户想要确保只有消息被真正处理完成后再提交位移。如果使用自动位移提交则无法保证这种时序性,因此在这种情况下必须使用手动提交位移。设置使用手动提交位移非常简单,仅仅需要在构建 KafkaConsumer 时设置enable.auto.commit=false,然后调用 commitSync 或commitAsync方法即可。

两者的区别与优劣如下:

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/983659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PMP证书续费是否真的有必要呢?(内附续证流程)

PMP项目管理专业人士资格认证是由项目管理协会(Project Management Institute,简称PMI)发起的。PMP作为世界级的项目管理认证证书,拥有着先进的项目管理知识体系,它严格评估项目管理人员知识技能是否具有高品质的资格认…

Android图片一直在另一张图的下边

因为之前开发的时候,头像设置了高度属性android:elevation"2px",导致同一父布局中另一张图一直就是显示在下方,如下图: 方法一:大家可以注意下也加上这个属性,这个属性值大于上边这个图的值就能在这张图的上…

KubeSphere Namespace 数据删除事故分析与解决全记录

作者:宇轩辞白,运维研发工程师,目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。 前言 2023 年 7 月 23 日在项目上线前夕,K8s 生产环境出现故障,经过紧急修复之后,K8s 环境恢复正常&#…

nodejs-处理http请求

文章目录 前言node 处理 get 请求node 处理 post 请求总结 前言 使用nodejs搭建后端代理服务,处理http请求,理解nodejs是如何处理get、post请求的 node 处理 get 请求 使用 http 模块创建代理服务器使用 querystring 模块解析请求参数req.end 方法发送…

UOS系统下fastdeploy推理

Cmake安装 apt install build-essential zlib1g-dev libssl-dev wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz tar -zxvf cmake-3.23.2.tar.gz cd cmake-3.23.2 ./bootstrap make make install cmake --version在Github或者gitee 查…

IDEA中启动类是灰色,重启idea启动类自动消失解决方法

问题描述: idea中启动多个服务会在services中展示服务的信息和控制台,但是经常有一些启动类会变成灰色的,而且重启idea后经常会自动消失,下次启动时需要手动再去启动,很麻烦。如下图所示: 解决方法&…

智能配电管理系统

智能配电管理系统是按用户的需求,遵循配电系统的标准规范而二次开发的一套具有专业性强、自动化程度高、易使用、高性能、高可靠等特点的适用于低压配电系统的电能管理系统。 智能配电管理系统包括监控管理层、网络通信层、现场采集层、用电保护层和受控设备层&…

基于javaweb的网上图书销售系统(servlet+jsp)

系统简介 本项目采用eclipse工具开发,jspservletjquery技术编写,数据库采用的是mysql,navicat开发工具。 角色: 管理员普通用户 模块简介 管理员: 登录用户管理图书分类管理图书管理图书订单管理图书评论管理数据统…

视频云存储/安防监控/AI分析/视频AI智能分析网关:垃圾满溢算法

随着我国科技的发展和城市化进程加快,大家对于生活环境以及空气质量更加重视,要求越来越严格。城市街道垃圾以及生活区垃圾满溢已经成为城市之痛。乱扔垃圾,垃圾不入桶这些行为已经严重影响到了城市的美化问题。特别是炎热的夏日和雨水季节&a…

应用在汽车新风系统中消毒杀菌的UVC灯珠

在病毒、细菌的传播可以说是一个让人敏感而恐惧的事情。而对于车内较小的空间,乘坐人员流动性大,更容易残留细菌病毒。车内缺少通风,残留的污垢垃圾也会滋生细菌,加快细菌的繁殖。所以对于车内消毒就自然不容忽视。 那么问题又来…

软件提示vcruntime140_1.dll丢失的解决方法,以及丢失的原因总结

在运行某些程序时,可能会出现“vcruntime140_1.dll 丢失”的错误提示。这是因为 vcruntime140_1.dll 是 Visual C Redistributable 的一部分,它通常被安装在 Windows 操作系统上。如果该文件丢失或无法找到,可能会导致程序无法正常运行。在我…

华为云使用脚本初始化Linux数据盘

初始化新挂载的磁盘 登录云服务器,执行以下命令获取自动初始化磁盘脚本。 wget https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/datadisk/LinuxVMDataDiskAutoInitialize.sh 说明: 若回显异常,请检查云服务器是否绑定弹性公…

vue-cli搭建一个新项目及基础配置

vue-cli搭建一个新项目及基础配置 一、安装步骤二、main.js配置三、router下的index.js 一、安装步骤 1.安装node环境:下载地址:Node.js 2.安装脚手架:npm install -g vue/cli 3.创建vue项目:vue create 项目名 4.进入项目&…

什么耳机音质最好又不伤耳朵,什么耳机好用耳朵不疼

如果你还在疑问什么耳机好用并且用了耳朵不痛的话,那你就应该看完本片文章了! 近年来,骨传导耳机在市场上的热度可谓是飙升不止,走在街头,你会发现无数人戴着这种科技神器。相较于传统的真无线蓝牙耳机,骨传…

奇葩招聘:招程序员,限45岁以上,不加班,薪资还不低……

咱就是说,这年头,谁还不想找一份“越老越吃香”的工作呀? 但是在多金的互联网,却一直充斥着“35岁焦虑”的话题,弄得人心惶惶。焦虑归焦虑,越老越吃香的工作还是有滴~这不,日前,便有…

关于火绒邮件监控引起的扫描任意IP会有25和110端口反馈

之前测试过公司的外网IP,因为之前一直很注意对外映射的端口,都限制了可以访问的IP地址和端口,所以之前扫描的时候是一个端口都扫描不出来的。最近闲的无事,想着再扫描试试,结果发现居然开放了25和110端口,我…

idea中删除断点与删除所有断点

如下如所示,debug执行后,选中第一步 然后在弹出的弹窗中,勾选全部断点(默认已勾选) ,点击减号即可,最后Done关闭弹窗

【运维日常】infiniband网络架构,容器间跨机器不同网段通信

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

AutoDock Vina多配体对接 (Simultaneous Multiple Ligand Docking)

1. 多配体分子对接简介 多配体分子对接(Simultaneous Multiple Ligand Docking, SMLD)或(Multiple Ligand Simultaneous Docking, MLSD)是一种分子对接技术,用于将多个配体(小分子药物候选物)同…

问道管理:底部渐渐抬高 今年反弹时刻或已来临

快速探底后,两市呈现分解走势。 沪指周三低开震动,指数在20日均线取得支撑后小幅上升,最终以红盘报收。深成指走势弱于沪指,尽管午后指数有所上升,但最终未能翻红。到收盘,沪指报收3158.08点,上…