Pulsar-架构与设计

Pulsar架构与设计

  • 一、背景和起源
  • 二、框架概述
    • 1.设计特点
    • 2.框架适用场景
  • 三、架构图
    • 1.Broker
    • 2.持久化存储(Persistent storage)
    • 3.Pulsar元数据(Metadata store)
  • 四、功能特性
    • 1.消息顺序性
    • 2.消息回溯
    • 3.消息去重
    • 4.消息重投递
    • 5.消息重试
    • 6.消息TTL
    • 7.延迟队列
    • 8.重试队列
    • 9.死信队列
    • 10.消息语义
  • 五、设计原理
    • 1.消息去重
    • 2.消息重试
    • 3.延迟队列
    • 4.消费订阅模式
      • 4.1 独享模式
      • 4.2 灾备模式
      • 4.3 共享模式
      • 4.4 Key共享模式
    • 5.生产访问模式
      • 5.1 共享模式
      • 5.2 独占模式
      • 5.3 独占屏蔽模式
      • 5.4 等待独占模式
  • 总结
  • 参考链接


一、背景和起源

随着云原生的兴起,对消息中间件的伸缩性和多租户隔离有了更高的要求。现有的消息中间件不支持多租户的隔离,但是有一定伸缩性,需要一定的迁移工具支持和手工操作。
Pulsar是下一代云原生分布式消息平台,采用存储和计算分离架构设计,支持弹性伸缩,支持多租户、持久化存储、多机房跨区域数据复制。

二、框架概述

1.设计特点

  • 下一代云原生分布式消息流平台
  • 单实例支持多集群,支持跨机房在集群间消息复制
  • 极低的发布延迟和端到端延迟
  • 支持超过百万的消息主题。
  • 支持多种消息订阅模式(独占、共享和故障转移)
  • 由BookKeeper 提供的持久化消息存储机制保证消息传递
  • 由轻量级的 serverless 计算框架 Pulsar Functions 实现流原生的数据处理。
  • 基于 Pulsar Functions 的 Server less connector 框架 Pulsar IO 使得数据更易移入、移出
    Apache Pulsar。
  • 支持冷热数据分级存储

2.框架适用场景

  • 适用于多租户、云服务场景
  • 适用于业务波动比较大、需要弹性伸缩场景

三、架构图

一个Pulsar实例有多个Pulsar Cluster组成,Pulsar Cluster之间可以进行消息复制。
Pulsar Cluster整体架构和组成如下,其中Broker为无状态服务,用于发布和消费消息,BookKeeper用于存储。

  • Broker集群:用于处理producer发出的消息;将消息存储到BookKeeper集群;将消息分配给consumer;处理集群协调任务。
  • BookKeeper集群:用于消息持久化存储。
  • Zookeeper集群:用于处理多个Pulsar集群之间的协调任务。
    在这里插入图片描述

1.Broker

主要包含以下部分:

  • HTTP服务器:主要是提供系统管理接口、topic查找接口
  • Dispatcher:异步TCP服务器,用于数据传输
  • Managed Ledger:用于缓存从BookKeeper读取的消息

Broker是无状态服务的计算节点;可以通过增加Broker来增加系统的吞吐量;某个Broker节点负载过高,可以将负载迁移到其他Broker节点。

2.持久化存储(Persistent storage)

Pulsar采用BookKeeper作为持久化存储组件。其中Bookie为数据的存储节点,采用分片机制。Bookie支持扩缩容,在扩容过程中不需要将已持久化数据迁移到新存储节点。

3.Pulsar元数据(Metadata store)

Pulsar元数据和BookKeeper元数据可以共享一个Zookeeper集群,也可以使用不同集群。Pulsar使用Zookeeper来进行元数据存储、集群配置和协调。

四、功能特性

1.消息顺序性

可以支持分区顺序性,生产者通过指定的key将消息发送到固定分区,消息订阅模式需要选择独享模式、灾备模式、key共享模式。

2.消息回溯

pulsar默认删除已经被所有Consumer确认消费完成消息,可以通过配置保留已经被消费完成的消息。

3.消息去重

通过服务器设置可以保证消息不会重复持久化存储,保证存储的幂等。

4.消息重投递

消息投递失败,会进行重新投递

5.消息重试

消息消费失败后消息会重新消费

6.消息TTL

支持消息生存期

7.延迟队列

支持任意时间延迟的消息

8.重试队列

重试队列是消费失败后,消息会重新投递到此队列,重试队列按照消费组进行设置的。

9.死信队列

重试次数达到一定次数后,会将消息投递此队列

10.消息语义

支持Exactly Once消息语义,消息确定被写入一次。producer保存发送失败消息再次发送,服务端保证重试多条消息只存储一次。

五、设计原理

1.消息去重

消息去重是指即使消息被Producer多次投递到Broker,也只会被持久化一次。Pulsar可以通过Broker配置开启消息去重功能,不需要应该代码去保证。
实现原理:

  • Producer每个消息都有一个递增的唯一SequenceId
  • Broker针对每个Producer保存已经接受到的最大SequenceId和已经持久化的最大SequenceId
  • Broker接收的消息中SequenceId大于以上SequenceId,则正常处理;如果小于或者等于则为重复消息,直接返回Ack确认

2.消息重试

如果消费组中设置消息主题可以重试,则会(以主题和消费组为度)创建重试队列和死信队列;其中重试队列名称格式为--RETRY;死信队列名称格式为--DLQ;
整体流程为:

  • 消费失败后,会将消息作为延迟消息重新投递到重试队列,利用延迟消息特性使Consumer延后一段时间重新消费
  • 如果重新投递到重试队列超过一定次数,则会把消息投递到死信队列

在这里插入图片描述

3.延迟队列

Broker针对topic每个分区,按照subscription维度维护了DelayedDeliveryTracker优先级队列,队列中以消息的延迟投递时间进行升序排列。

  • 延迟消息投递到Broker后,不用特殊处理直接持久化
  • 消费时,优先检测DelayedDeliveryTracker是否有消息需要消费(延迟投递时间已到);如有则消费;如果没有则消费正常队列消息
  • 消费正常队列消息,如果消息为延迟消息,则需要把消息索引存入到DelayedDeliveryTracker优先级队列
    在这里插入图片描述
    注意:只有在共享模式和key共享模式才支持延迟队列

4.消费订阅模式

pulsar总共有四种消费订阅模式:独享模式、灾备模式、共享模式和Key共享模式;
在这里插入图片描述

4.1 独享模式

此模式下,一个topic的某个消费组中只有一个消费者;即使topic进行了分区,所有分区也是共享同一个消费者。
此模式可以保证全局消息顺序性。

4.2 灾备模式

此模式下,一个topic可以对应多个消费者,但是只有master consumer可以消费,当master出现异常会由其他消费者进行消费。如果topic进行了分区,则每个分区都会对应一个master消费者和多个备用消费者。
此模式可以保证分区消息顺序性。

此模式下分区topic和master消费者之间分配图:
在这里插入图片描述

4.3 共享模式

此模式一个分区对应多个消费者,每个消费者处理分区中的一部分数据,消费者数量可以大于分区数量。此模式下可以通过增加消费者来提高消费速度。

4.4 Key共享模式

此模式一个分区对应多个消费者,每个消费者处理分区中的一部分数据,具有相同Key的消息会分派给相同Consumer处理。此模式下可以通过增加消费者来提高消费速度。
在这里插入图片描述

5.生产访问模式

pulsar总共有四种生产访问模式:共享模式、独占模式、独占屏蔽模式、等待独占模式;

5.1 共享模式

一个Topic可以有多个生产者

5.2 独占模式

一个Topic只能有一个生产者,新生产者连接到topic会直接报错

5.3 独占屏蔽模式

一个Topic只能有一个生产者,新生产者连接Topic,原有的生产者会被断开连接

5.4 等待独占模式

一个Topic只能有一个生产者,新的生产者连接topic会被挂起,直到生产者获取独占访问权。

总结

作为下一代云原生消息队列,Pulsar采用存储和计算分离的架构设计,具有很好的弹性伸缩能力。Pulsar单个实例可以部署多个Pulsar集群,支持多租户、持久化存储、多机房跨区域数据复制。本文主要是介绍一下Pulsar的架构和特性,后续还会对Pulsar进行近一步研读。


参考链接

1.Pulsar简介
2.Pulsar架构
3.Pulsar生产消费

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

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

相关文章

DTAN: Diffusion-based Text Attention Network for medical imagesegmentation

DTAN:基于扩散的医学图像分割文本关注网络 摘要 在当今时代,扩散模型已经成为医学图像分割领域的一股开创性力量。在此背景下,我们引入了弥散文本注意网络(Diffusion text - attention Network, DTAN),这是一个开创性的分割框架&#xff0c…

动态代理IP如何选择?

IP地址是由IP协议所提供的一种统一的地址格式,通过为每一个网络和每一台主机分配逻辑地址的方式来屏蔽物理地址的差异。根据IP地址的分配方式,IP可以分为动态IP与静态IP两种。对于大部分用户而言,日常使用的IP地址均为动态IP地址。从代理IP的…

报错405(errAxiosError: Request failed with status code 405)

errAxiosError: Request failed with status code 405 前端调用接口的方法跟后台定义接口的方法不一致

AB测试最小样本量

1.AB实验过程 常见的AB实验过程,分流-->实验-->数据分析-->决策:分流:用户被随机均匀的分为不同的组实验:同一组内的用户在实验期间使用相同的策略,不同组的用户使用相同或不同的策略。数据收集:…

Java+Vue+MySQL,国产动漫网站全栈升级

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

算法刷题:无重复字符的最长字串

无重复字符的最长字串 .题目链接题目详情算法原理题目解析滑动窗口定义指针进窗口判断出窗口更新结果 我的答案 . 题目链接 无重复字符的最长字串 题目详情 算法原理 题目解析 首先,为了使字符串遍历的更加方便,我们选择将字符串转换为数组 题目要求子串中不能有重复的字符…

Springboot+vue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的物流管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的物流管理系统,采用M(model)…

~汉诺塔~(C语言)~

引言 汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从上面开始按大小顺序重新摆放在…

C++之Easyx——图形库的基本准备工作

什么是Easyx? EasyX Graphics Library 是针对 Visual C 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 它比Red PandaDev C上的图形库功能要强…

BUGKU-WEB 变量1

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; flag In the variable !<?php error_reporting(0); include "flag1.php"; highlight_file(__file__); if(isset($_GET[args])){$args $_GET[args];if(!preg_match("/^\w$/",$args…

究极小白如何自己搭建一个自动发卡网站-独角数卡

首页 | 十画IOSID​shihuaid.cn/​编辑 如果你也是跟我一样,什么都不懂,也想要搭建一个自己的自动发卡网站,可以参考一下我的步骤,不难,主要就是细心,一步步来一定成功!! 独角数卡: 举个例子:独角数卡就是一个店面,而且里面帮你装修好了,而你要做的就是把开店之…

Netty面试题

NIO、AIO、BIO有什么区别&#xff1f; 同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 NIO和IO有什么区别&#xff1f; IO是多线程的&#xff0c;阻塞的。NIO&#xff0c;是同步的非阻塞IO。 IO面向Stream(流)&#xff0c;而NIO面向Buffer(缓冲区)。 IO是多个线程的&…

Python学习路线图

防止忘记&#xff0c;温故知新 进阶路线

react【六】 React-Router 路由

文章目录 1、Router1.1 路由1.2 认识React-Router1.3 Link和NavLink1.4 Navigate1.5 Not Found页面配置1.6 路由的嵌套1.7 手动路由的跳转1.7.1 在函数式组件中使用hook1.7.2 在类组件中封装高阶组件 1.8 动态路由传递参数1.9 路由的配置文件以及懒加载 1、Router 1.1 路由 1.…

MySQL篇之SQL优化

一、表的设计优化 表的设计优化&#xff08;参考阿里开发手册《嵩山版》&#xff09;&#xff1a; 1. 比如设置合适的数值&#xff08;tinyint int bigint&#xff09;&#xff0c;要根据实际情况选择。 2. 比如设置合适的字符串类型&#xff08;char和varchar&#xff09…

如何在Linux系统中配置并优化硬盘的RAID

在Linux系统中配置和优化硬盘的RAID技术可以帮助提高数据存储性能和安全性。RAID&#xff08;Redundant Array of Independent Disks&#xff09;技术通过将多个硬盘组合起来&#xff0c;以增加性能、容量或冗余度&#xff0c;提高数据的可靠性和可用性。本文将介绍如何在Linux…

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

网络防御保护——防火墙综合实验

一.实验拓扑 二.实验要求 1.办公区设备可以通过电信和移动两条链路上网(多对多的nat&#xff0c;并且需要保留一个公网ip不能用来转换)。 2.分公司设备可以通过移动链路和电信链路访问到dmz区域的http服务器。 3.分公司内部客户端可以通过公网地址访问到内部服务器。 4.FW1和FW…

爬虫-华为云空间备忘录导出到docx-selenium控制浏览器行为-python数据处理

背景适用情况介绍 老的荣耀手机属于华为云系统&#xff0c;家里人换了新荣耀手机属于荣耀云系统无法通过云空间将备忘录转移到新手机&#xff0c;不想让他们一个一个搞&#xff0c;于是整了一晚上想办法爬取下来。从网页抓取下来&#xff0c;然后存到docx文档中&#xff08;包…

Stable Diffusion教程——stable diffusion基础原理详解与安装秋叶整合包进行出图测试

前言 在2022年&#xff0c;人工智能创作内容&#xff08;AIGC&#xff09;成为了AI领域的热门话题之一。在ChatGPT问世之前&#xff0c;AI绘画以其独特的创意和便捷的创作工具迅速走红&#xff0c;引起了广泛关注。随着一系列以Stable Diffusion、Midjourney、NovelAI等为代表…