Kafka消息积压的典型场景及解决方案

news2024/9/19 10:55:34

Kafka消息积压的典型场景:

1.实时/消费任务挂掉

比如,我们写的实时应用因为某种原因挂掉了,并且这个任务没有被监控程序监控发现通知相关负责人,负责人又没有写自动拉起任务的脚本进行重启。
那么在我们重新启动这个实时应用进行消费之前,这段时间的消息就会被滞后处理,如果数据量很大,可就不是简单重启应用直接消费就能解决的。

>>>>  解决方案1: 

方案简述: 任务重新启动后直接消费最新的消息,对于"滞后"的历史数据采用离线程序进行"补漏"。

>>>>   具体操作1 :  消费者从最新的地方进行消费

  • 1、偏移量设置  默认位置是在 zookeeper 中设置的 
  • 2、设置消费者参数  auto.offset.reset  = latest 从最新消息开始消费
  • 3、给启动的消费组设置 动态的组ID=> 每次启动消费者重新生成一个随机的组ID保证从最新消息开始消费
  • 4、任务重启手动设置偏移量到最新的位置  。这可以通过查询Kafka的消费者API来完成。


>>>>  具体操作2 :   针对滞后的数据如何查漏补缺


Apache Kafka Connect:通过Kafka Connect可以快速实现大量数据进出Kafka,从而与其他源数据源或目标数据源进行交互。


Kafka ETL:这是一个开源的ETL工具,专门为处理Kafka数据而设计。它提供了一个简单易用的界面,使数据抽取、转换和加载变得更加容易。


Talend:这是一款功能强大的ETL工具,支持处理Kafka数据。它提供了可视化的界面,使您可以轻松地设计、部署和管理ETL作业。


Apache NiFi:这是一个用于数据集成和处理的开源软件框架,它提供了一个可视化的界面来设计ETL流程,并支持Kafka作为数据源和目标。


Logstash:这是一个开源的数据收集引擎,可以用来处理和转换Kafka数据。它提供了强大的过滤器和转换器,使您可以轻松地实现数据的抽取、转换和加载。

>>>>  解决方案2:(常用) 


方案简述: 创建新的topic并配置更多数量的分区,将积压消息的topic消费者逻辑改为直接把消息打入新的topic,将消费逻辑写在新的topic的消费者中。

-- 第一步 迁移topic数据  --> 历史数据迁移到新的Topic上
-- 第二部 使用新的消费者消费新的Topic 数据  

此方案不会缺失数据(新的消费者消费能力可以与原消费者保持一致)前提是允许延时处理一段时间才可以应用此方案


1. 创建新topic:首先,您需要创建一个新的topic。您可以使用Kafka提供的命令行工具或Kafka管理界面来创建新topic。确保新topic的partition数量与旧topic相同或更多。
2. 调整消费者配置:创建一个新的消费者,用于消费旧topic的数据。您需要设置消费者的配置,以便将数据从旧topic消费到新topic。这可以通过设置auto.offset.reset和topic.config参数来实现。
o auto.offset.reset参数用于指定消费者从哪个offset开始消费数据。您可以将其设置为earliest,以便从旧topic的开始处消费数据。
o topic.config参数可以用于设置新topic的配置。例如,您可以设置retention.ms参数来控制新topic的日志保留时间。
3. 复制数据:使用新消费者消费旧topic的数据,并将其写入新topic。确保在写入新topic时,消息的key和value与旧topic中的消息一致。这样,消息的顺序和偏移量将保持不变。
4. 验证数据:完成数据转移后,验证新topic中的数据是否与旧topic中的数据一致。您可以使用Kafka提供的工具或编写自定义脚本进行验证。
5. 删除旧topic:一旦您验证了新topic中的数据,并且确认可以删除旧topic,请将其删除以释放存储空间。请注意,在删除旧topic之前,确保所有数据都已成功迁移到新topic中。

2.Kafka分区数设置的不合理(太少)和消费者"消费能力"不足

Kafka单分区生产消息的速度qps通常很高,如果消费者因为某些原因(比如受业务逻辑复杂度影响,消费时间会有所不同),就会出现消费滞后的情况。
此外,Kafka分区数是Kafka并行度调优的最小单元,如果Kafka分区数设置的太少,会影响Kafka consumer消费的吞吐量。

>>>>   不同的情况分析及方案


1、kafka 消费能力不足: 
如果是Kafka消费能力不足,则可以考虑增加 topic 的 partition 的个数,同时提升消费者组的消费者数量,消费数 = 分区数 (二者缺一不可)
2、程序消费能力不足:
(拉取数据/处理时间 < 生产速度),使处理的数据小于生产的数据,也会造成数据积压。则提高每批次拉取的数量。
如果数据量很大,合理的增加Kafka分区数是关键。如果利用的是Spark流和Kafka direct approach方式,也可以对KafkaRDD进行repartition重分区,增加并行度处理。
3.Kafka消息的key不均匀,导致分区间数据不均衡

在使用Kafka producer消息时,可以为消息指定key,但是要求key要均匀,否则会出现Kafka分区间数据不均衡。可以在Kafka producer处,给key加随机后缀,使其均衡。

4、kafka数据有过期时间,一些数据就丢失了,主要是消费不及时 (消费不及时)

产生消息堆积,消费不及时,kafka数据有过期时间,一些数据就丢失了,主要是消费不及时
 
>>> 实战经验总结

  • 1、消费kafka消息时,应该尽量减少每次消费时间,可通过减少调用三方接口、读库等操作, 从而减少消息堆积的可能性。
  • 2、如果消息来不及消费,可以先存在数据库中,然后逐条消费  (还可以保存消费记录,方便定位问题)
  • 3、每次接受kafka消息时,先打印出日志,包括消息产生的时间戳。
  • 4、kafka消息保留时间(修改kafka配置文件, 默认一周)
  • 5、任务启动从上次提交offset处开始消费处理


 

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

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

相关文章

【Docker】构建Harbor仓库

下载软件包地址&#xff1a;https://github.com/goharbor/harbor/releases Harbor 是由vmware公司开源的企业级 Docker Registry 项目。 它提供了以下主要功能和特点&#xff1a; 1. 基于角色的访问控制&#xff08;RBAC&#xff09;&#xff1a;可以为不同的用户和用户组分…

告别繁琐!Xinstall地推码,让App安装统计变得更简单!

Xinstall地推码&#xff1a;开启App推广新篇章 在移动互联网时代&#xff0c;App推广的重要性不言而喻。然而&#xff0c;传统的推广方式往往伴随着繁琐的操作和难以精准统计的数据&#xff0c;让推广者头疼不已。幸运的是&#xff0c;Xinstall作为国内专业的App全渠道统计服务…

EmguCV学习笔记 VB.Net 6.6 图像的矩

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

【保姆级WebStorm安装!!!】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

记录|Form1中嵌套Form2时的频闪问题解决[不同于常见的三部曲]

目录 前言一、常见的解决方案二、自己创建渐变色组件GradientPanel三、最终效果展示更新时间 前言 参考文章&#xff1a; C#画图解决闪烁问题 [解决winform中重绘时控件闪烁的问题](panel1.GetType().GetProperty(“DoubleBuffered”,System.Reflection.BindingFlags.Instance …

试卷擦除,这几款软件擦得干干净净!

在现代教育中&#xff0c;电子化试卷已经成为一种趋势&#xff0c;然而随之而来的问题是如何有效地擦除试卷上的答案&#xff0c;以便进行反复使用试卷。为了解决这个问题&#xff0c;我们介绍了三款试卷答案清除方法&#xff0c;这些方法不仅简单易用&#xff0c;而且效果显著…

运维团队如何高效使用监控易

监控易作为一款功能强大的运维监控工具&#xff0c;能够为运维团队提供全面、实时的设备运行状态和性能指标。为了高效使用监控易&#xff0c;运维团队应遵循以下步骤和策略&#xff1a; 一、熟悉监控易界面与功能 深入了解监控易的仪表盘界面&#xff0c;包括设备运行状态、…

APP自动化测试思路整理,跟着步骤快速撸码...

前言 1、开发语言选择 通常用于自动化测试的编程语言有&#xff1a;Python、Java、Javascript、Ruby、C#、PHP等。 一般我们会选择自己熟悉的编程语言来编写自动化脚本&#xff0c;但对于编程基础基本为0的童鞋&#xff08;或者专注于做自动化测试的童鞋&#xff09;&#x…

ICT测试探针市场报告:前五大厂商占有大约26.0%的市场份额

ICT测试探针&#xff0c;即在线测试&#xff08;ICT&#xff09;探针&#xff0c;是专门用于电路板&#xff08;特别是PCBA&#xff09;电气测试的重要工具&#xff0c;通过这些探针接触PCB上的测试点&#xff0c;来检测电路板上元器件的连通性和电气性能&#xff0c;从而保证电…

视频超分辨率重建——AnimeSR网络测试教程(详细图文教程)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

2021CCPC网络赛:G - Function HDU - 7106

题意 定义g(x)为x的各数位之和 求该方程: 在给定x范围内的最小值 思路: 一个x对应一个g(x)&#xff0c;一个g(x)对应多个x 由于g(x)最多取到54,所以可以枚举所有的g(x)所以想到当取到g(x)的时候,只取能使原方程f(x)最小的那几个x 当枚举g(x)的时候,g(x)看作一个常数,此时方程…

干货分享:精选四大Win10录屏工具推荐!

无论你是制作教程视频、游戏实况分享还是日常办公中的演示记录&#xff0c;一款好的录屏软件都能让你事半功倍。Windows 10作为当下最流行的桌面操作系统之一&#xff0c;本文推荐几款优秀的win10录屏工具 福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 福昕录屏…

石油钻杆对直线度测量的需求

关键字&#xff1a;石油钻杆直线度测量仪&#xff0c;钻杆测量仪&#xff0c;钻杆直线度 石油钻杆对直线度测量的需求主要源于其在石油勘探和开发过程中的关键作用以及严苛的工作环境。以下是对这一需求的详细分析&#xff1a; 一、石油钻杆的功能与重要性 石油钻杆是石油钻探…

十五分钟速通Vue

绑值语法( {{}} ) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head…

热失控传感器在换电站消防安全解决方案中的应用

随着新能源技术的飞速发展&#xff0c;工程车辆行业正逐步向绿色化、电动化转型&#xff0c;作为这一转型过程中的关键设施&#xff0c;换电站的数量日益增多。作为电池集中储存与交换的核心区域&#xff0c;换电站的消防安全问题成为了不容忽视的重大挑战。特别是电池仓&#…

骑行适合戴的耳机?开放式耳机测评

当我们在享受骑行的乐趣时&#xff0c;音乐往往是不可或缺的伴侣。但选择耳机却是一门学问&#xff0c;尤其是在安全和听觉享受之间找到平衡。今天&#xff0c;我就来和大家探讨一下&#xff0c;在骑行时究竟是选择开放式耳机还是封闭式耳机。 骑行时选择耳机的考量因素 1.安全…

二手电脑配置给你不一样的成就感之三

近期和着了魔一样&#xff0c;一直在搜罗二手乐色&#xff0c;之前说过的推荐配置基本都试了一遍&#xff0c;今天来说下APU系列和E3系列&#xff0c;还是那个选择&#xff0c;主板30以下&#xff0c;cpu二十以下&#xff0c;这次有增加了二手风扇&#xff0c;二手固态&#xf…

vue part 5

生命周期 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>引出生命周期</title><!-- 引入Vue --><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js&quo…

filezilla使用教程(window下filezilla使用教程)

filezilla使用教程&#xff08;window下filezilla使用教程&#xff09; 一、安装与配置 首先&#xff0c;你需要从FileZilla的官方网站下载并安装适合你操作系统的版本。安装完成后&#xff0c;打开FileZilla&#xff0c;你将看到一个简洁的用户界面。 在FileZilla中&#x…

day-43 Z 字形变换

思路 只需要依次按照行进行遍历即可 解题过程 第一行位置&#xff1a;0 2*(numRows-1) 4*(numRows-1) 第二行位置&#xff1a;1 2*(numRows-1)-1 2*(numRows-1)1 。。。。。。 注意&#xff1a;当numRows为1时&#xff0c;直接返回s Code class Solution {public String con…