kafka的处理的一些问题 消费延迟

news2025/2/25 16:36:59

kafka的处理的一些问题

  • 消费者客户端不但没有背压而且内存充足,但产生的消费延迟越来越大
  • 在Kafka的Leader副本宕机时

消费者客户端不但没有背压而且内存充足,但产生的消费延迟越来越大

在这里插入图片描述

比如我们这个kakfa集群一共有3个Broker节点

TOp1有5个分区,P0、P1、P2、P3、P4,这些分区分布在3个不同Broker节点上,而我们创建了包含两个消费者的消费者组。

消费者1同时消费P0、P1和P4分区的数据。
消费者2消费P2和P3分区的数据
看到消费延迟,大家想去就是增加消费者数量和分区数量,让我消费者数量增加到和Partition的数量一样多,这样每个消费者就可以仅仅消费一个分区的数据,可以达到消费能力1最大化 。

了解消费者背后的执行原理。该如何优化消费者消费数据的吞吐量。

在这里插入图片描述

消费者在调用poll()方法到远端的Broker节点拉去数据时。优先从nextInLineFetch中获取数据,这个nextInLineFetch就是数据接收缓冲区,
如果数据接收缓冲区中没有待消费的数据,这个时候才会调用SendFetches方法,到Broker端拉去数据,

kafka是向响应的Broker节点发送拉取数据的网络请求,我们都知道网路请求对于内存请求是比较慢的,因此这些拉取数据的网络请求是由Broker端异步执行的,异步执行拉取数据请求,就必须通过future监听数据是否已经准备好,当数据准备好之后,会异步将数放到数据接收缓存completedFetches中,

在这里插入图片描述
这是因为IO请求比较耗时,所以尽量一次批量拉取更多的数据放到缓存中,这样就可以降低发起网络的IO次数,进而提升消费能力,现在缓冲区completedFetches中已经有数据了,就会把completedFetches中队头的数据解析到nextInLineFetch中

在这里插入图片描述
解析成消费者可以消费的数据格式,然后清除completedFetches中队头的元素

在这里插入图片描述
随后如果有消费调用poll()方法拉取数,就会优先从nextInLineFetch中获取数据,注意,消费者客户端每次获取的数据量是由参数 max.poll.records控制的,默认值是500。 相当于每次从nextInLineFetch获取500条数据并返回给消费者。

在这里插入图片描述
当消费者消费完500条数据之后,会再次调用poll()方法,
在这里插入图片描述
再拉取500条数据 ,当消费者把nextlnLineFetch缓存的数据都消费完之后,相当于再调用poll()方式时,nextInLineFetch已经咩有待消费的数据了,这个时候,就会把completedFetch的新的队头元素解析解析成nextInLineFetch。可以适当的将该参数增加到16KB或者32KB

而参数fetch.max.bytes标识每次poll操作,从Broker端最多拉取数据量,默认值时50MB,如果我们内存资源充足,建议增大fetch.max.bytes增加到200MB以上.参数max.partition.fetch.bytes的默认值是1MB。表示每次poll返回的,每个Broker节点上每个分区的最大字节数。因此我们再回头看这个例子。

那么每次从Broker-102上最多能拉取到的数据也就是1MB。数据量未免太小了,有的时候刚消费完1MB,就得再次经过一次网络IO拉取下一批数据,这可能是造成消费延迟的主要原因。大家可以根据自己的Topic的实际分区数,来合理设置每个分区每次拉取数据的大小,因此建议可以将每个分区每次拉取数据的大小设置成10MB以上。 max.partition.fetch.bytes增加到10MB以上

但有的时候只是提高每个分区每次最大拉取到的数量也是不够的,因为每个Broker最多返回的最大字节数由参数fetch.max.bytes控制,这个参数的默认值是50MB,有时候也可以适当的提升这个参数的默认值,比如增加到200MB
这样就能再本地尽量缓存更多的数据,以提升消费者消费数据的能力,降低消费延迟,主要适用于内存充足,你消费能力不足的场景

消费客户端根本不能修改啦这个参数,因为设置了静态的
在这里插入图片描述

在Kafka的Leader副本宕机时

在这里插入图片描述

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

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

相关文章

计算机网络技术基础:3.计算机网络的拓扑结构

网络拓扑结构是指用传输媒体互连各种设备的物理布局,即用什么方式把网络中的计算机等设备连接起来。将工作站、服务站等网络设备抽象为点,称为“节点”;将通信线路抽象为线,称为“链路”。由节点和链路构成的抽象结构就是网络拓扑…

Vue3源码笔记阅读1——Ref响应式原理

本专栏主要用于记录自己的阅读源码的过程,希望能够加深自己学习印象,也欢迎读者可以帮忙完善。接下来每一篇都会从定义、运用两个层面来进行解析 定义 运用 例子:模板中访问ref(1) <template><div>{{str}}</div> </template> <script> impo…

STM32F407寄存器点灯

背景描述&#xff1a; 最近用32开发遇到问题不得不看寄存器了&#xff0c;就回顾了一下寄存器手册的查看方式和寄存器的使用方法&#xff1b; 上一次这么细致的记录还是在刚学习STM32的时候&#xff0c;之前觉得看寄存器手册以及配置寄存器是有点难度的事情&#xff0c;现在回头…

2024年12月11日Github流行趋势

项目名称&#xff1a;maigret 项目维护者&#xff1a;soxoj, kustermariocoding, dependabot, fen0s, cyb3rk0tik项目介绍&#xff1a;通过用户名从数千个站点收集个人档案信息的工具。项目star数&#xff1a;12,055项目fork数&#xff1a;870 项目名称&#xff1a;uv 项目维护…

Halcon中histo_2dim(Operator)算子原理及应用详解

在Halcon中&#xff0c;histo_2dim算子是一个用于计算双通道灰度值图像的直方图的工具。以下是对该算子的原理及应用的详细解释&#xff1a; 一、原理 histo_2dim算子的函数原型为&#xff1a;histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )。 输入参数&#xff…

mysql免安装版配置教程

一、将压缩包解压至你想要放置的文件夹中&#xff0c;注意&#xff1a;绝对路径中要避免出现中文 二、在解压目录下新建my.ini文件&#xff0c;已经有的就直接覆盖 my.ini文件内容 [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 basedirD:\\tools\\mysql-8.1.0-win…

(六)- DRM驱动开发(qcom)

一&#xff0c;Linux Android Display 1&#xff0c;Linux Android Display Software Subsystem 密 2&#xff0c;Linux Android Display Architecture 密 二&#xff0c;DRM/KMS Adreno DPU 1&#xff0c;硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

手眼标定工具操作文档

1.手眼标定原理介绍 术语介绍 手眼标定&#xff1a;为了获取相机与机器人坐标系之间得位姿转换关系&#xff0c;需要对相机和机器人坐标系进行标定&#xff0c;该标定过程成为手眼标定&#xff0c;用于存储这一组转换关系的文件称为手眼标定文件。 ETH&#xff1a;即Eye To …

CTFshow-文件上传(Web151-170)

CTFshow-文件上传(Web151-170) 参考了CTF show 文件上传篇&#xff08;web151-170&#xff0c;看这一篇就够啦&#xff09;-CSDN博客 Web151 要求png&#xff0c;然后上传带有一句话木马的a.png&#xff0c;burp抓包后改后缀为a.php&#xff0c;然后蚁剑连接&#xff0c;找fl…

基于YOLOv8模型监控视频中的车辆检测与识别应用

1.摘要 该项目旨在通过技术手段加强交通纪律&#xff0c;提供一种更为人性化和智能化的交通监控方法。具体而言&#xff0c;通过利用PyQt5、YOLOv8和TensorFlow等技术栈&#xff0c;实现了对车辆的高效检测与识别&#xff0c;主要实现车辆类型识别以及速度监测等功能&#xff0…

CISC RISC

CISC&#xff1a;设计目标是通过复杂的指令来提高代码密度&#xff0c;减少指令数量&#xff0c;适合内存资源较为有限的系统。CISC处理器的硬件复杂度较高&#xff0c;但在某些应用场合&#xff08;如桌面计算机&#xff09;能够提供足够的性能。 RISC&#xff1a;设计目标是…

AI Agent与MEME:技术与文化融合驱动Web3创新

AI Agent如何引领Web3新时代&#xff1f; 随着Web3与区块链技术的迅速发展&#xff0c;AI Agent作为人工智能与区块链的交汇点&#xff0c;正在逐步成为推动去中心化生态的重要力量。同时&#xff0c;MEME文化凭借其强大的社区驱动力和文化渗透力&#xff0c;在链上生态中扮演着…

前端的知识(部分)

11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能

【鸿睿创智开发板试用】移植OpenCV 4到OpenHarmony 4.1

目录 目录 引言 编译系统镜像 (1) 下载代码后解压SDK (2) 下载docker镜像   (3) 编译OH 编译OpenCV 下载OpenCV源代码 构建编译配置文件 执行编译命令 安装库和头文件 测试 结语 引言 最近有个需求是在基于RK3568的OpenHarmony 4.1系统中使用OpenCV&#xff0c…

二分查找【Lecode_HOT100】

文章目录 1.搜索插入位置No.352.搜索二维矩阵No.743.在排序数组中查找元素的第一个和最后一个位置No.344.搜索旋转排序数组No.335.寻找旋转排序数组中的最小值No.153 1.搜索插入位置No.35 class Solution {public int searchInsert(int[] nums, int target) {int l 0;int r n…

蜂窝结构机械超材料

本研究设计了两种蜂窝结构机械超材料&#xff0c;具有可变的、依赖于拉伸或压缩的正负泊松比&#xff0c;并通过NOKOV度量动作捕捉验证了超材料的形变特性。 研究人员以《Mechanical Metamaterials with Discontinuous and Tension/Compression-Dependent Positive/Negative Po…

JAVA入门:使用IDE开发

JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加方便。 IDEA 业界公认最好用的JAVA IDE 安装IDEA 打开IDEA官…

opencv # Sobel算子、Laplacian算子、Canny边缘检测、findContours、drawContours绘制轮廓、外接矩形

一、Sobel算子 案例图片 cv2.Sobel(src, ddepth, dx, dy, ksize3, scale1, delta0, borderTypeNone) 功能&#xff1a;用于计算图像梯度&#xff08;gradient&#xff09;的函数 参数&#xff1a; src: 输入图像&#xff0c;它应该是灰度图像。 ddepth: 输出图像的所需深度&am…

CEF127 编译指南 MacOS 篇 - 拉取 CEF 源码(五)

1. 引言 在完成了所有必要工具的安装和配置后&#xff0c;我们进入到获取 CEF 源码的阶段。对于 macOS 平台&#xff0c;CEF 的源码获取过程需要特别注意不同芯片架构&#xff08;Intel 和 Apple Silicon&#xff09;的区别以及版本管理。本文将详细介绍如何在 macOS 系统上获…

C# OpenCV机器视觉:图像平滑

在一个寒冷的冬日&#xff0c;阿强窝在家里的沙发上&#xff0c;裹着厚厚的毛毯&#xff0c;手里捧着一杯热巧克力。他的朋友们约他一起去滑雪&#xff0c;但阿强却更喜欢待在温暖的家中&#xff0c;享受这份宁静。突然&#xff0c;他的手机响了&#xff0c;是朋友们发来的滑雪…