《深入理解kafka》对于实际问题的理解

Q1:消息可靠性(不重不漏)

1.1 如何保证消息不丢

1.2 如何保证消息不重

Q2:积压/消费能力

2.1 线上积压排查思路

2.2 增加消费能力

Q1:消息可靠性(不重不漏)

理解可靠性前。介绍消息语义,即消息传递的标准

标准

丢失

重复

适用场景

At most once(至多一次)

会丢失

不会重复

高并发高吞吐,允许消息丢失,如日志收集

At least once(至少一次)

不会丢失

会重复

Exactly once(恰好一次)

不会丢失

不会重复

1.1 如何保证消息不丢

从各个层面分析

  • 参照:​《深入理解kafka-核心设计与实践原理》​第8.3章 + 自己理解

层面

事项

生产者(客户端)

  • 代码发送层面

    • ①发送消息Api的三种模式:发后即忘、同步和异步。发后即忘会丢失消息,后两者能知道是否发送成功

    • ②补发消息机制:客户端持久化消息,支持消息的补偿

  • 配置层面

    • ③生产者客户端参数(acks参数):acks= -1最可靠,其余两种都可能会丢失消息

    • ④重试参数(retries参数和retry.backoff.ms参数):对于可重试的异常(如网络抖动),通过失败重试机制重发消息

Broker服务端

服务端需要注意的都是配置参数层面

  • ①副本数(replication.factor参数) > 1

    • 越多的副本数越能够保证数据的可靠性,但副本太多会影响性能。应对宕机风险,通常设置为3就能满足大多数场景

  • ②ISR集合中的最小副本数(min.insync.replicas参数) >1

    • 用于辅助配合acks=-1来使用:leader副本的消息流入速度很快,而follower副本的同步速度很慢。在某个临界点时所有的follower副本都被剔除出了ISR集合,那么ISR最终只剩一个leader副本,导致acks=-1演变为acks=1的情形

    • 该值必须小于副本数,一个典型的配置是:replication.factor=3,min.insync.replicas=2

  • ③是否允许从非ISR中选举新leader(unclean.leader.election.enable参数) = false:默认为false,不允许

    • 非ISR集合中,可能还未同步所有消息,设置成true会造成消息丢失

  • 其他:log.flush.interval.messages和log.flush.interval.ms,是否开启同步刷盘(默认是不做控制而交由操作系统本身来进行处理)

    • 可能性分析:由于刷盘是操作系统控制,理论上讲会存在即使kafka写入成功,但由于机器宕机,操作系统未及时刷盘,丢失数据的风险

    • 但同步刷盘非常损耗性能,改成每次提交时手动同步刷盘对性能影响太大。这里不建议修改此配置,因为发生可能性很小

消费者(客户端)

①自动提交(enable.auto.commit参数) = false:默认为true,自动提交。不再介绍,见3.2.5节

  • 自动提交会带来重复消费和消息丢失的问题:消费者还未执行完业务流程,异步线程已对服务端发起了提交

  • 手动提交需遵守一个原则:如没有消费完,则不能提交

1.2 如何保证消息不重

消息重复无法避免,只能在消费者消费时过滤重复消息。可能的重复原因如下:

根因

生产者

业务方代码原因:对同一份消息内容发送了多次

网络问题:生产端发送消息后,服务端已经收到消息了,但是假如遇到网络问题,无法获得响应,生产端就无法判断该消息是否成功提交到了 Kafka,而我们一般会配置重试次数,但这样会引发生产端重新发送同一条消息,从而造成消息重复的发送

Broker服务端

服务端不会重复存储消息,如果有重复消息也应该是由生产端重复发送造成的

消费者

分区重分配引起

  • 在客户端实例变化、分区扩容、集群切换等场景会涉及到分区重分配,由于新老客户端感知分配结果不及时,可能出现两台机器短时间消费同一个分区的场景,造成重复消费

备注:分区重分配,与再均衡(rebalance)的区别

  • 重分配:作用在broker层面,是broker与partition间的分配;通常是为了管理优化集群手动触发
  • 再平衡:作用在消费组层面(新增/下线消费者),Rebalance的目的是确保分区在consumer group成员之间平均分配,以便每个consumer都有分区去消费;通常是Kafka协调器自动触发的

处理思路:幂等

从对系统的影响结果来说:At least once + 幂等消费 = Exactly once。

  1. 利用数据库的唯一约束实现幂等

  2. 记录消费结果并检查操作

Q2:积压/消费能力

2.1 线上积压排查思路

是什么引起的积压:

  • 先止损,快速定位积压的原因

    • 上游生产流量突增

    • 上游流量没变

      • 不消费了:

        • 消费者是否下线了?

        • 某一个partition的offset卡住了?

      • 还在消费:消费能力下降?

2.2 增加消费能力

搞清原因:什么导致【消费速率 < 生产速率】

生产速率

可能原因

解决方案

备注

生产速率不高

自身业务消费链路长,导致消费慢

优化消费链路

绝大多数情况

生产速率高

①消费者实例 < partition数量。一台机器消费多个partition的情况,并且机器负载较高

扩集群机器,一直到【消费者:partition=1:1】

影响可控

②消费者实例:partition = 1:1,但消费速率仍小于生产速率

扩partition。但一未扩partition会增加服务端负载

③partition本身已很多,但生产速率实在太大

增加单partiton并行消费线程数目(这种方式不保证消费顺序!!!

  • mafka和rocketmq支持,kafka与rabbitmq不支持

  • 总体思路:滑动窗口

是不是该考虑架构与技术选型的问题了?

④生产速率实在太大了

pushServer

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

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

相关文章

Redis-3 数据持久化

一.什么是数据持久化&#xff1f; redis是把数据存储在内存中的&#xff0c;而采用DRAM芯片存储的内存会面临断电导致数据丢失的问题&#xff0c;因此我们可以将redis在内存中的数据存储一份到磁盘中&#xff0c;用于内存数据丢失时的恢复&#xff0c;这个过程就叫做数据持久化…

完成单位投稿任务找投稿渠道不用精选10个1个就够了

在单位担任信息宣传员的这几年,我深刻体会到了“笔耕不辍”的艰辛与挑战。起初,面对单位的宣传需求,我遵循传统的投稿路径,即通过电子邮件的方式,一家接一家地向各大媒体投递稿件。那时的我,以为只要稿件质量上乘,自然能够获得青睐,却未曾料到,这是一条漫长而曲折的道路。 邮箱…

算法day03

第一题 179. 查找总价格为目标值的两个商品 本题采用前后指针和单调性规律可解&#xff1b; 解题思路如下&#xff1a; 1、设置前后指针 2、前后指针所指的两数之和大于目标数&#xff0c;右指针左移&#xff1b; 前后指针所指的两数之和小于目标数&#xff0c;左指针右移&…

“视频剪辑新境界:批量高效处理,画面虚化与播放速度调整一气呵成!“

在视频制作的广阔天地中&#xff0c;剪辑是赋予作品生命的关键环节。然而&#xff0c;面对大量的视频素材&#xff0c;如何高效地进行剪辑、调整&#xff0c;使每一帧画面都充满魅力&#xff0c;成为许多创作者面临的挑战。今天&#xff0c;我们为您带来一款颠覆性的视频剪辑工…

学习笔记:【QC】Android Q - IMS 模块

一、IMS init 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 二、IMS turnon 流程图 高清的流程图参考&#xff1a;【高清图&#xff0c;保存后可以放大看】 三、分析说明 1、nv702870 不创建ims apn pdp 2、nv702811 nv702811的时候才创建…

Objective-C的对象复制与拷贝选项

对象复制与拷贝 文章目录 对象复制与拷贝copy与mutablecopycopy与mutablecopy的简介示例&#xff1a;不可变对象的复制可变对象的复制 NSCopying和NSMutableCopying协议深复刻和浅复刻浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a;深拷贝&#xff08;Deep Copy&…

同步电机原理解析

同步电机 同步带年纪&#xff0c;顾名思义无论负载如何&#xff0c;都能以恒定的速度运转&#xff0c;它以高效率著称 这种恒速特性是通过恒定磁场和旋转磁场的相互作用实现的&#xff0c;与其他电机一样&#xff0c;同步电机由定子和转子组成&#xff0c;定子铁芯由硅片层叠而…

无人直播需要什么软件系统?最新AI实景自动无人直播软件:智能化引领直播拓客新时代

随着互联网的快速发展&#xff08;无人直播招商加盟&#xff1a;hzzxar&#xff09;直播行业已经成为商家品牌推广和商品销售的热门方式。近年来&#xff0c;人工智能技术的飞速发展&#xff0c;催生了一款令人惊叹的AI实景自动无人直播软件&#xff0c;为商家提供了全新的直播…

修改表空间的状态

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间有4种状态:联机、脱机、只读和读写。修改其中某一种状态的语句如下所示 设置表空间 tspace 为联机状态。 SQL>ALTER TABLESPACE space ONLINE: 设置表空间 tspa…

Node.js身份证实名认证接口、身份证识别API

翔云OCR身份证查验集合了身份证号核验&#xff0c;身份信息核验&#xff0c;身份核验。 基于翔云身份证识别接口的Node.js开发示例代码如下&#xff1a; var request require(request); var options {method: POST,url: https://netocr.com/api/recogliu.do,headers: {},fo…

google地图js,添加标记,以及infowindow信息弹窗

&#xff08;谷歌地图版本V3&#xff09; var contentString "<div classdevinfo><P>设备ID: BJ-20240507</p> <P>设备状态: 正常</p> <P>通讯信号: 89% </p> <P>设备位置: 中国</p> <P>剂量率: 988</p&…

鸿蒙开发接口Ability框架:【(StaticSubscriberExtensionAbility)】

StaticSubscriberExtensionAbility StaticSubscriberExtensionAbility模块提供静态订阅者扩展能力的类别的能力。 说明&#xff1a; 本模块首批接口从API version 9 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下…

SpringBoot之Zuul服务

概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记…

【退役之重学Java】如何保证从消息队列里拿到的消息顺序执行

一、场景 MySQL binlog 同步数据&#xff0c;比如大数据team。在MySQL中进行增删改查&#xff0c;将其 binlog 发送到 MQ 里面&#xff0c;到消费出来执行&#xff0c;这里就必须要保证其顺序执行&#xff0c;不然数据库就会错乱。 二、如何保证消息的顺序性呢&#xff1f; …

【python】模拟巴特沃斯滤波器

巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;&#xff0c;以其设计者斯蒂芬巴特沃斯&#xff08;Stephen Butterworth&#xff09;的名字命名&#xff0c;是一种具有平滑频率响应的滤波器。这种滤波器在频域中具有非常平坦的无波纹响应&#xff0c;直到它达到截止…

【springboot基础】如何搭建一个web项目?

正在学习springboot&#xff0c;还是小白&#xff0c;今天分享一下如何搭建一个简单的springboot的web项目&#xff0c;只要写一个类就能实现最基础的前后端交互&#xff0c;实现web版helloworld &#xff0c;哈哈&#xff0c;虽然十分简陋&#xff0c;但也希望对你理解web运作…

ssm115乐购游戏商城系统+vue

毕业生学历证明系统 设计与实现 内容摘要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统毕业生学历信息管理难…

构建跨平台应用的利器——UniApp

UniApp简介 UniApp的概念与特点 UniApp 是一款基于 Vue.js 的跨平台应用框架&#xff0c;它允许开发者使用相同的代码构建同时运行在多个平台&#xff08;如Web、iOS和Android&#xff09;的应用程序。UniApp 具有以下几个主要特点&#xff1a; 跨平台能力&#xff1a;UniApp …

iOS 17 / iPad OS 17屏蔽更新

iOS 17 / iPad OS 17屏蔽更新 1&#xff0c;进入屏蔽iOS更新的描述文件下载链接 下载链接 wx 搜索 Geek 前端发送屏蔽更新进行获取 2&#xff0c;复制这段链接&#xff0c;在Safari浏览器中打开&#xff0c;注意打开后别点击下载&#xff01;要先改时间&#xff01; 3&#…

感知机简介

感知机简介 导语感知机简单逻辑电路实现权重和配置与/或/与非与门实现与非门实现或门实现 线/非线性单/多层感知机异或 总结参考文献 导语 学习感知机有助于更好的理解深度学习的神经元、权重等概念&#xff0c;感知机的结构和概念很简单&#xff0c;只要学过基本线性代数、数…