pulsar源码--3-官方文档杂技

消息队列中间件会保存消息,直到收到消费者消费成功并确认,在此之后消息便可以删除,不过什么时候删除,由中间件自己决定

ack消息会一直储存,直到现有的所有订阅都确认了这条消息,在此之后如果要继续保存则需要配置消息保留策略。(所以ack消息默认是写到bookie,只有bookie写失败才会尝试写元数据库)

累积确认不能在 Shared 或 Key_shared 订阅类型中使用,因为 Shared 或 Key_Shared 订阅类型涉及多个有权访问同一订阅的消费者。在共享订阅类型中,消息是单独确认的

除了确认,消费者也可以发送否定确认,即告诉broker某条消息消费失败

!!!确认与否定确认,在不同的订阅模式中起作用或者不起作用,比如灾备模式和独占模式下,累积确认只会确认/否定最后一条消息,默认再次之前的所有消息都否定了,而共享模式下则只能单独确认/否定,详情看文档:https://pulsar.apache.org/docs/3.3.x/concepts-messaging/

如果启用批处理,则一批中的所有消息都会重新发送给消费者。
与确认超时相比,否定确认更可取。首先,超时值很难设置。其次,当消息处理时间超过确认超时时,代理会重新发送消息,但这些消息可能不需要重新使用。

消费者会自动订阅重试队列,如果超过一定次数后还是无法消费成功,那么该消息会被放入死信队列。不过自动订阅retry默认是关闭的,需要启用

!!!pulsar文档说retry队列由消费者管理。这个不太懂。比如消费者消费一条消息,然后返回否定确认,然后又没有开启重试,那么该消息会被怎么处理,开重试又会怎么处理。看文档说如果是否定确认的话则由broker重新投递,超过一定次数丢到死信队列,而开起重试则由消费者把消息发送到重试队列。不过有疑问:消费者发送到重试队列,然后重试队列再发送给消费者,这不多此一举吗?不过客户端是有缓存的。重试队列目前在共享模式下可以用(文档里有代码说是消费者把消息发送给broker,然后broker过一段时间再发送给消费者,即reconsumerLater)

死信主题的功能由消费者实现。您可以决定如何处理死信主题中的消息。

总之这一块疑问很多。

backlog 大小代表的是批次总数,而不是消息总数。

batch消息:一批消息要么都成功,如果一批消息收到一个否定,那么这批消息都会重发。所以最新的pulsar版本增加了批量索引确认,即确认一批消息内的部分消息,全部确认完毕后就认为这批消息成功处理了。同样,批量索引默认是关闭的

chunking 不能与批处理同时启用。在启用分块之前,您需要禁用批处理。

分块消息由消费者端sdk自动进行组装,maxPendingChunkedMessage参数指定用于分块消息的缓存的最大值

游标是持久的,它保留消息并保留当前位置。
如果broker从故障中重新启动,它可以从持久存储(BookKeeper)中恢复游标,以便可以从上次消费的位置继续消费消息

!!!在Apache Pulsar中,puslar怎么实现一个subscription订阅多个topic?我记得dispatcher里面有个根据消费者类型来分发消息,这个地方可以看一下,另外一个cursor对应一个topic,cursor和consumer以及dispatcher以及多个topic之间的关系可以考虑一下

默认情况下没有任何持久订阅的主题的消息将被标记为已删除。如果您想防止消息被标记为已删除,您可以为此主题创建持久订阅。在这种情况下,只有已确认的消息才会被标记为已删除。

非持久主题是 Pulsar 主题,其中消息数据永远不会持久存储到磁盘,仅保存在内存中。

系统主题用于实现某些功能并消除对第三方组件的依赖,例如事务、心跳检测、主题级策略和资源组服务。系统主题使这些功能的实现变得简单、依赖且灵活。以心跳检测为例,您可以利用系统主题进行健康检查,内部让生产者/读取者在heartbeat命名空间下生产/消费消息,从而可以检测当前服务是否还活着。

默认情况下:pulsar立即删除已经被确认的消息以及持久化存储未被确认的消息,但是可以可以配置,不过只能在namespace级配置

如果对未确认消息启用了TTL,随着消息过期(如底部所示),某些消息即使尚未得到确认,也会被删除,因为根据应用于命名空间的 TTL,它们已过期(例如,因为已应用 5 分钟的 TTL,并且消息尚未得到确认,但已过去 10 分钟)。

消息去重是broker实现的,消息去重对精准一次很重要

broker两个组成部分:dispatcher:分发消息;http服务器,帮助producer和consumer找到topic

一个cluster包括zk(或etcd等其他元数据库)、bookie、broker,每个cluster的zk叫做local zk,所有集群还共用一个global zk

cursor也会持久化道bookie中

!!!!pulsar开发的managedLedger包含一个唯一的writer以及多个用于读取的cursor,一个cursor对应一个消费流即一个订阅,也就是说一个ManagedLedger对应一个topic,同时负责对该topic的读写。

分布式系统中client与服务器访问有两种方式:1:client通过serverA获取serverB的地址,然后client直接和serverB通讯,这种情况下client必须可以直接访问serverB的地址,否则会报错;2:clinet要访问serverB,然后client把请求发给serverA,serverA再去serverB,再把结果返回个client,这样client就无须和serverB通信。方式2就是proxy的方式

!!!client,不管是consumer还是producer,第一步都是发一个lookup消息给broker,来获取topic对应的broker的地址

flow默认1000

每当创建一个新的订阅时,默认情况下,该订阅会被定位在主题的末尾。

!!!pulsar除了consumer,还有reader。consumer模型由pulsar来自动管理游标,而reader模型则是由客户端自己控制游标,即pulsar只负责提供消息,而不负责管理游标。

在内部,阅读器接口被实现为消费者,使用对具有随机分配名称的主题的独占、非持久订阅。

与订阅/消费者不同,读取器本质上是非持久性的,并且不会阻止主题中的数据被删除,因此强烈建议配置数据保留。

pulsar负载均衡:核心是pulsar的topic是基于段的,也就是说一个topic分为多个partition,每个partition分为多个seg。1:存储层。一个topic的多个seg会均匀分布到多个bookie节点上,这是bookie层面提供的功能,pulsar只需要调用即可。2:server层(即broker)。broker是无状态的,所以把一个seg调度到另一个broker上时先关掉所有连接,然后转移,然后客户端重新连接。

bundle:一个namespace会被划分成多个bundle,每个bundle都包含多个partition(topic只是一个抽象的概念,partition才是底层真正的topic。)

之所bundle在namespace之下,topic之上,是因为这是一个这种,既保留了必要的信息,又不会需要太大的存储空间。

bundle:一个namespace创建的时候就会被划分成多个bundle,一个topic创建时会被分配到某个bundle。这里的topic是指非分区topic或者分区topic的一个分区

当一个bundle负载过大或者包含的topic过多的时候会导致该bundle进一步被切分为多个bundle。支持自动和手动

bundle有赋值、切分、卸载三个主要流程

采用的是hash,实际的bundle便表示一个区间,topic的hash值位于同一个区间,就属于同一个bundle
bin/pulsar-admin namespaces bundles public/default{"boundaries" : [ "0x00000000", "0x08000000", "0x10000000", "0x20000000", "0x30000000", "0x40000000", "0x50000000", "0x60000000", "0x70000000", "0x80000000", "0x90000000", "0xa0000000", "0xb0000000", "0xc0000000", "0xd0000000", "0xe0000000", "0xf0000000", "0xffffffff" ],"numBundles" : 17
}

更换负载均衡插件:通过配置项,就是说它是通过反射来实现通过配置动态加载类,他就直接去找找这个类路径

pulsar多集群赋值:指a向集群1写一条数据,该数据会被自动复制到指定的集群,支持同步(只有所有指定的集群都返回复制成功后才向客户端返回成功或者指定数量集群写成功)或者异步复制

pulsar通过一些系统topic来传递消息,比如在 Apache Pulsar 中,每个命名空间都有自己的 主题(topic),当配置变更或者有事件发生的时候就会往这个topic发送消息

主题压缩:对于同一个key,只保留最新的消息。

schema:数据以非结构化方式存储在磁盘上,producer和consumer处理时都只能发送和接受结构化的消息,所以就用一个schema来记录消息的类型,这样存储时就能把producer发来的结构化消息存储为非结构化的原始字段,然后consumer解码的时候就通过schema把原始字节翻译成指定结构

在这里插入图片描述

事务:https://pulsar.apache.org/docs/3.3.x/txn-how/

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

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

相关文章

为什么一些工业厂房的配电箱和供电线路要安装ALP?

1、什么是ALP? ALP 低压线路保护装置是一种智能型电气保护设备,适用于额定电压至 AC660V、额定电流至 AC400A、额定频率为 50/60Hz 的低压系统。集保护、测量、控制、总线通讯为一体,是低压馈线终端的智能化综合装置。 2、功能特点 ①能够…

如何让 AI 更懂你:提示词的秘密

目录 前言常见概念大语言模型(Large Language Model)大模型输入常见参数提示词工程的限制 战略思想效果评测复杂任务拆解提示词结构化加示例加要求加维度 提示词框架 前言 小册推荐:https://juejin.cn/book/7399064580883742774 评估响应内…

特征值分解原理和实战

特征值分解(Eigenvalue Decomposition)是线性代数中的一种重要技术,用于分析矩阵的内在属性。这种分解方法主要适用于方阵(即行数和列数相等的矩阵),用于将矩阵分解为其特征向量和特征值。 基本原理 假设 …

99人!关于第十八届中国青年科技奖拟表彰对象的公示!

本期精选SCI&EI ●IEEE 1区TOP 计算机类(含CCF); ●EI快刊:最快1周录用! 知网(CNKI)、谷歌学术期刊 ●7天录用-检索(100%录用),1周上线; 免费稿件评估 免费匹配…

cherno引擎课 -

感谢b站星云图形的翻译:【双语】【最佳游戏引擎教程实战】【入门】(1):Introducing the GAME ENGINE series!_哔哩哔哩_bilibili Introducing the GAMEENGINE series 希望:它是一个制作(互动)3D实时渲染应用程序的引…

【自然资源】吉林一号卫星有关知识,你要了解

吉林一号卫星有关知识,你要了解 吉林一号商业卫星是中国第一套自主研发的商用遥感卫星星座,由长光卫星技术有限公司研制。 “吉林一号”商业卫星组星包括1颗光学遥感卫星、2颗视频卫星和1颗技术验证卫星,工作轨道均为高约650公里的太阳同步轨…

博图与Factory I/O结合实现运料小车自动往返四次控制

一、示例要求 按照上图所示完成运料小车的往返控制,由于对虚拟工厂中零件应用不熟悉,所以料斗门和小车底门都用M0.x代替完成;只对传送带有了解,因此此处借助传送带使得纸箱达到往返运动。 二、I/O分配表 类别元件I/O端口编号备注…

扩散模型和重新照明的未来

重新照明(relighting)是在给定输入场景的情况下,在指定的目标照明条件下渲染场景的任务。这是计算机视觉和图形学中的关键任务。然而,这是一个不适定问题,因为场景中物体的外观是由光源、几何形状和表面材料属性等因素…

想学习海量数据的管理方法?听这节课就够了

在大模型时代,由于模型规模的升级,需要处理的数据量也大幅增加,因此对数据管理提出了更高的要求。 首先,分布式存储系统对于企业来说至关重要,将数据分散存储在多个节点上,可以提高数据的访问速度和处理能…

Works With线上开发者大会将提供物联网行业深入的专业知识和技能

Silicon Labs2024年Works With线上开发者大会定于11月20日至21日举行,将汇集全球各地的物联网开发人员、设备制造商、无线技术专家、工程师和商业领袖,观众可免费注册参加。同时,为了方便中文观众,所有在线视频均配有中文字幕。 芯…

2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享

一、背景特殊医学用途配方食品简称特医食品,是指为满足进食受限、消化吸收障碍、代谢素乱或者特定疾病状态人群对营养素或者膳食的特殊需要,专门加工配置而成的配方食品,包括0月龄至12月龄的特殊医学用途婴儿配方食品和适用于1岁以上的特殊医…

【日记】总感觉搞这些才回到了自己的老本行……(1179 字)

正文 前两天忘记写了几件事。 一是,周五晚上打开自己的博客,准备翻自己的笔记,然后…… 我发现,博客的子列表打不开了。我知道,完蛋了。Mdbook 它又双叒叕更新了。这次不知道又把 index.hbs 哪里给改了。 反正&#xf…

2024年11月11日历史上的今天大事件早读

700年11月11日宰相狄仁杰逝世 1821年11月11日《罪与罚》的作者陀思妥耶夫斯基诞辰 1844年11月11日清政府在五口通商口岸解除天主教禁 1851年11月11日御史王茂荫提出请变科举 1861年11月11日清皇太子载淳即皇帝位 1891年11月11日热河金丹教杨悦春发动反洋教起义 1918年11月…

【ESP】一小时速通入门笔记

【ESP】一小时速通入门笔记 前言: 之前上学时就用过一次esp32, 当时初次使用搭建编译环境费了老大功夫.在我第一篇esp32笔记中也有说明.以至于我好像忘记记录完整的入门笔记了.最近因为工作需要又开始接触esp32才发现,现在已经方便得多了.顺利的话一小时速通. 前排提醒: 本笔记…

海量小文件挑战下的CephFS:优化策略与实践探索

文章目录 1.背景2.基本概念2.1 CephFS IO流程2.2 Ceph-FUSE 3. 问题3.1 问题源起3.2 理论分析3.3 原因排查3.3.1 Ceph-FUSE日志分析3.3.2 提出猜想3.3.3 代码验证3.3.3.1 MDS端3.3.3.2 Ceph-FUSE端 3.4 小结 1.背景 随着大数据、人工智能技术的蓬勃发展,人类对于算…

团队发展与个人价值的共生

一、团队属性 团队的本质属性,在很大程度上表现为一种选择性和甄别性,即排外与排异。这意味着团队需要筛选出具有相同目标、价值观以及能力互补的成员,以达成高效的协作与共同进步。在团队运作的过程中,首要任务是明确并深入理解…

git命令及原理

git: 目录则被称之为“树” 文件被称作 Blob 对象. git help <command>: 获取 git 命令的帮助信息 git init: 创建一个新的 git 仓库&#xff0c;其数据会存放在一个名为 .git 的目录下 git status: 显示当前的仓库状态 git add <filename>: 添加文件到暂存区 git …

大模型的记忆困境:平衡持续学习与灾难性遗忘

1. 引言 持续学习是智能的关键方面。它指的是从非平稳数据流中增量学习的能力&#xff0c;对于在非平稳世界中运作的自然或人工智能体来说是一项重要技能。人类是优秀的持续学习者&#xff0c;能够在不损害先前学习技能的情况下增量学习新技能&#xff0c;并能够将新信息与先前…

实时高效,全面测评快递100API的物流查询功能

一、引言 你是否曾经在网购后焦急地等待包裹&#xff0c;频繁地手动刷新订单页面以获取最新的物流信息&#xff1f;或者作为一名开发者&#xff0c;正在为如何在自己的应用程序中高效地实现物流查询功能而发愁&#xff1f;其实&#xff0c;有一个非常好用的解决方案——快递10…

HR人才评价系统软件选择攻略

企业对人力资源管理价值的日益认同&#xff0c;人才评价系统软件市场迎来了蓬勃发展的春天。在数字化转型的浪潮中&#xff0c;企业对人才的多元化需求愈发明显&#xff0c;传统的评价手段已难以跟上时代的步伐。因此&#xff0c;人才评价系统软件应运而生&#xff0c;迅速成为…