pulsar存在大量消费未ack的原因

news2024/11/28 2:48:32

问题起源:

某产品灰度上线后,从pulsar服务端监控发现存在一种现象:消费但未ack的信息不断增加,直到3000左右就稳定下来了且消费速度为0,但不清楚这3000是怎么来的,因为代码是消费到立马ack的;

 msg = self.consumer.receive()
self.consumer.acknowledge(msg)

根因定位:

查python的pulsar说明文档:https://pulsar.apache.org/api/python/2.10.x/pulsar.html#Client.subscribe
在这里插入图片描述

GPT4的回答:
在Python中,receiver_queue_size参数通常与消息队列或者异步处理场景中出现。具体到Apache Pulsar这种分布式消息传递和流处理平台,receiver_queue_size参数在消费者(Consumer)的配置中定义了客户端用于接收来自Pulsar broker的消息的队列的大小。

receiver_queue_size的作用如下:

  • 消息缓冲:这个队列作为缓冲区,存储了已经从Pulsar broker拉取但尚未被应用程序处理的消息。这允许消费者预先从broker拉取多个消息,以便在处理当前消息时,下一个消息已经准备好了,这样可以提高处理效率。

  • 流量控制:通过限制队列的大小,客户端可以控制其从broker接收消息的速率,从而避免因为消费者处理能力不足而导致内存溢出或其他资源问题。

  • 性能调优:根据消费者的处理能力和应用程序的需求,可以调整receiver_queue_size的大小以优化性能。较小的队列可能会减少内存占用并减少消息积压,但可能会导致增加从broker拉取消息的频率。较大的队列可以减少拉取次数,但增加了消息延迟和内存使用的风险。

  • 背压管理:如果消费者处理慢于消息到达的速率,receiver_queue_size可以帮助管理背压(backpressure)。一旦队列满了,Pulsar客户端会停止从broker拉取新消息,直到队列中有了空位。

举例来说,如果你设置receiver_queue_size=100,那么消费者客户端会在其内部队列中缓存最多100条消息。如果消费者处理消息的速度跟不上消息到达的速率,队列可能会很快填满,此时客户端不会再从broker接收更多消息,直到已缓存的消息被处理并从队列中清除。

调整receiver_queue_size参数需要根据具体情况权衡,因为它会直接影响应用程序的吞吐量和响应能力。

案例

import pulsar

# Pulsar 服务地址
service_url = 'pulsar://localhost:6650'
# 要订阅的主题
topic_name = 'persistent://public/default/my-topic'
# 订阅名称
subscription_name = 'my-subscription'

# 创建 Pulsar 客户端
client = pulsar.Client(service_url)

# 创建消费者,设置 receiver_queue_size
consumer = client.subscribe(topic=topic_name,
                            subscription_name=subscription_name,
                            receiver_queue_size=10)

try:
    while True:
        # 阻塞等待接收消息
        msg = consumer.receive()
        try:
            print(f"Received message: '{msg.data()}'")
            # 确认消息,以便它不会被再次传递
            consumer.acknowledge(msg)
        except Exception as e:
            # 如果处理消息时发生异常,未确认的消息可能会被重新传递
            print(f"Failed to process message: {e}")
            consumer.negative_acknowledge(msg)
finally:
    # 关闭客户端
    client.close()

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

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

相关文章

格雷希尔G10系列L150A和L200A气动快速连接器,在新能源汽车线束线缆剥线后的气密性测试密封方案

线束线缆在很多用电环境都有使用,比如说新能源汽车,从电池包放电开始,高低压、通讯都开始进行工作,线束在连接的地方需要具有较高的气密性和稳定性,才能保证车辆在不同环境下能够正常的运行。 线束在组装铜鼻子前需要剥…

【Oracle篇】expdp/impdp高效完成全部生产用户的全库迁移(第四篇,总共四篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️…

基于SpringBoot的游戏商城系统的设计与实现(论文+源码)_kaic

目录 1前言 1.1研究的背景及意义 1.2国内外的研究状况和发展趋势 2需求分析 2.1系统需求分析 2.1.1技术可行性 2.1.2经济可行性 2.1.3操作可行性 2.2系统的开发环境 2.2.1 Springboot框架 2.2.2 数据库Mysql 2.2.3 IntelliJ IDEA平台 2.2.4 Mybatis和MyBatis-plus 2.2.5 前端框…

火鸟门户同城模块

同城活动 同城活动是指在同一城市举办的活动,可以是多种类型,例如: 聚会:朋友聚会、同学聚会、兴趣爱好聚会等。展览:艺术​​展览、科技展览、文化展览等。演出节目:演唱会、音乐会、戏剧表演等。比赛项…

JumpServer 堡垒主机

JumpServer 堡垒机帮助企业以更安全的方式管控和登陆各种类型的资产 SSH:Linux/Unix/网络设备等Windows:Web方式连接/原生RDP连接数据库:MySQL、Oracle、SQLServer、PostgreSQL等Kubernetes:连接到K8s集群中的PodsWeb站点&#x…

Backend - gitea 首次建库(远端本地)

目录 一、建立远端储存库 1. 进入新增画面 2. 填写储存库名称(如book),点击“建立”即可 二、本地关联远端储存库 1. 本地初始化储存库代码 (1)新建文件夹 (2)获取远端储存库 2. 本地编写…

前端学习<二>CSS基础——14-CSS3属性详解:Web字体

前言 开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。 支持程度比较好,甚至 IE 低版本的浏览器也能…

HTML期末作业-香水网站,逐步讲解

知名品牌 CHANEL I wear nothing but a few drops of Chanel No.5. 了解更多 GIVENCHY 纪梵希香水几乎就是赫本本人的化身——经典、优雅、高贵、简洁、女性化 了解更多 DIOR Dior Addict the now fragrance from Dior. 了解更多 BURBUEEY The good things in life neve…

大数据技术之 Apache Doris(一)

第 1 章 Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后,更名为 Doris ),在百度内部,有超过 200 个产品线在使用,部署机器超过 10…

抽象类和接口(2)(接口部分)

❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…

微信公众号账号迁移主体怎么变更?

公众号迁移有什么作用?只能变更主体吗?大家都知道,公众号是不支持直接变更主体的;但是很多情况下,我们又不得不进行账号主体的更换;这时候,我么就可以通过账号迁移功能,将A公众号的粉…

MySQL使用技巧,高级Java开发必看

insert into tab(col1,col2…) select … 5、活用正则表达式 regexp ^ $ . * | 6、关联查询比子查询效率快,优先使用join关联查询 7、if(exp,v1,v2) if()函数的使用 exp:表达式 v1:exp为真时返回的值 v2:exp为假时返回的值 8、case when… then… else… en…

广和通发布基于高通高算力芯片的具身智能机器人开发平台Fibot

3月29日,为助力机器人厂商客户快速复现及验证斯坦福Mobile ALOHA机器人的相关算法,广和通发布具身智能机器人开发平台Fibot。作为首款国产Mobile ALOHA机器人的升级配置版本,开发平台采用全向轮底盘设计、可拆卸式训练臂结构,赋予…

AI如何影响装饰器模式与组合模式的选择与应用

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》《MYSQL应用》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章:设计模式深度解析:AI如何影响…

[C/C++] -- 二叉树

1.简介 二叉树是一种每个节点最多有两个子节点的树结构,通常包括:根节点、左子树、右子树。 满二叉树: 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k&a…

10、电科院FTU检测标准学习笔记-双遥信及变位优先验证

———————————————————————————————————— 作者简介: 本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验 在配电自动化验收测试以及电科院测试中,本人全程参…

电脑win10系统更新后开机很慢,更新win10后电脑开机怎么变慢了

很多用户反映,更新win10后电脑开机怎么变慢了呢?现在动不动就要30几秒,以前都是秒开机的,要怎么设置才能提高开机速度?小伙伴们别着急,主要原因可能是关机设置中没有勾选启用快速启动,或者是开机启动设置的问题,针对开机变慢的情况,小编整理了2个处理方法,接下来,我…

U盘PE引导-系统安装操作

U盘PE引导-系统安装操作 1. U盘接入电脑,开机按F12(DELL)选择U盘引导,按回车,如图2.选择进入PE 系统3.进入PE 系统后,运行 WinNTSetup 安装器, 具体 设置如下图 1. U盘接入电脑,开机…

C语言键盘输入与屏幕输出——数据的格式化键盘输入

目录 数据的格式化键盘输入 输入数据的格式控制 scanf()的格式字符 scanf()的格式修饰符 数据的格式化键盘输入 格式 scanf(格式控制字符串,输入地址表); 输入数据的格式控制 格式 scanf(…

深度学习:AIGC重塑金融大模型驱动金融变革

作者:林建明 来源:IT阅读排行榜 本文摘编自《AIGC重塑金融:AI大模型驱动的金融变革与实践》,机械工业出版社出版这是最好的时代,也是最坏的时代。尽管大模型技术在金融领域具有巨大的应用潜力,但其应用也面…