pulsar的架构与特性记录

一、什么是云原生

        云原生的概念是2013年Matt Stine提出的,到目前为止,云原生的概念发生了多次变更,目前最新对云原生定义为: Devps+持续交付+微服务+容器

        而符合云原生架构的应用程序是: 采用开源堆栈(K8S+Docker)进行容器化,基于微服务架构提高灵活性和可维护性,借助敏捷方法、DevOps支持持续迭代和运维自动化,利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

二、Apache Pulsar基本介绍

        Apache Pulsar 是一个云原生企业级的发布订阅(pub-sub) 消息系统,最初由Yahoo开发,并于2016年底开源,现在是Apache软件基金会顶级开源项目。Pulsar在Yahoo的生产环境运行了三年多,助力Yahoo的主要应用,如Yahoo MailYahoo Finance、Yahoo Sports、Flickr、Gemini广告平台和Yahoo分布式键值存储系统Sherpa。

 Apache Pulsar的功能与特性:

2.1 多租户模式

      租户和命名空间(namespace)是 Pulsar 支持多租户的两个核心概念
      在租户级别:Pulsar 为特定的租户预留合适的存储空间、应用授权与认证机制
      在命名空间级别:Pulsar 有一系列的配置策略(policy),包括存储配额、流控、消息过期策略和命名空间之 间的隔离策略。

2.2 灵活的消息系统

        Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式队列等方式计算不同的订阅模型大大提升了灵活度。
        同时pulsar通过事务采用Exactly-0nce(精准一次)在进行消息传输过程中,可以确保数据不丢不重

2.3 云原生架构

        Pulsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部。上层是无状态 Broker,复制消息分发和服务;下层是持久化的存储层 Bookie 集群Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复

2.4 Segmented Streams(分片流)

        Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储 (tiered storage)、BookKeeper 集群和Broker 节点上,而对外提供一个统一的、无界数据的视图。其次,不需要用户显式迁移数据,减少存储成本并保持近似无限的存储。

2.5 支持跨地域复制

       Pulsar 中的跨地域复制是将 Pulsar 中持化的消息在多个集群间备份。在 Pulsar 2.4.0 中新增了复制订阅模式(Replicated-subscriptions),在某个集群失效情况下,该功能可以在其他集群恢复消费者的消费状态,从而达到热备模式下消息服务的高可用。

三、pulsar组件介绍

3.1 层级存储

        Infinite Stream:以流的方式永久保存原始数据
        分区的容量不再受限制
        充分利用云存储或现有的廉价存储 ( 例如 HDFS)
        数据统一表征:客户端无需关心数据究竟存储在哪里

3.2 Pulsar I0(Connector)连接器

        Pulsar I0 分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过 Source 实现数据输0入。输出代表数据要往哪里去,通过 Sink 实现数据输出。
        Pulsar 提出了 Connector (也称为 Pulsar I),用于解决 Pulsar 与周边系统的集成问题,帮助用户高效完成工作。
        目前 pulsar I0 支持非常多的连接集成操作:例如HDFS 、Spark、Flink 、Flume 、ES 、HBase等

3.3 Pulsar Funcations(轻量级计算框架)

        Pulsar Functions 是一个轻量级的计算框架,可以给户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。Pulsar Functions 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充
        Pulsar Functions 的设计灵感来自于 Heron 这样的流处理引,Pusar Functions 将会拓展 Pulsar 和整个消息领域的未来。使用 Pulsar Functions,用户可以轻松地部署和管理 function,通过 function 从 Pulsatopic 读取数据或者生产新数据到 Pulsar topic。

四、pulsar 与kafka对比:

4.1 Pulsar和Kafka的对比介绍说明

       详细对比可以参考:kafka和pulsar的区别_pulsar kafka区别-CSDN博客

        Apache Kafka和Apache Pulsar都有类似的消息概念。 客户端通过主题与消息系统进行交。 每个主题都可以分为多个分区。 然而,Apache Pulsar和Apache Kafka之间的根本区别在于Apache Kafka是以分区为存储中心,而ApachePulsar是以Segment为存储中心。

        对比总结:
        Apache Pulsar将高性能的流(Apache Kafka所追求的)和灵活的传统队列(RabbitMQ所追求的)结合到一个统一的消息模型和API中。 Pulsar使用统一的API为用户提供一个支持流和队列的系统,且具有同样的高性能。

4.2 性能对比:

        Pulsar 表现最出色的就是性能,Pulsar 的速度比 Kafka 快得多,美国德克萨斯州一家名为 Gigam(https://gigaom.com/) 的技术研究和分析公司对 Kafka 和 Pulsar 的性能做了比较,并证实了这一点

4.3 扩展说明: kafka目前存在的痛点

        1)Kafka很难进行扩展,因为 kafka 把消息持久化在 broker 中,迁移主题分区时,需要把分区的数据完全复制到其他 broker 中,这个操作非常耗时。

        2)当需要通过更改分区大小以获得更多的存储空间时,会与消息索引产生冲突,打乱消息顺序。因此,如果用户需要保证消息的顺序,Kafka 就变得非常就0手了。

        3)如果分区副本不处于 ISR(同步状态,那么 leader 选取可能会素乱。一般地,当原始主分区出现故障时,应该有一个 S 副本被征用,但是这点并不能完全保证。若在设置中并未规定只有 S 副本可被选为 leader 时,选出一个处于非同步状态的副本做 eader,这比没有 broker 服务该 partitior的情况更糟糕。

        4)使用 kfaka 时,你需要根据现有的情况并充分考虑未来的增量计划,规划 broker、主题、分区和副本的数量,才能避免 aka 扩展导致的问题。这是理想状况,实际情况很难规划,不可避免会出现扩展需求。

        5) Kafka 集群的分区再均衡会影响相关生产者和消费者的性能。

        6)发生故障时,Kafka 主题无法保证消息的完整性(特别是遇到第 3 点中的情况,需要扩展时极有可能丢失消息)。

        7)使用 Kafka 需要和 offset 打交道,这点让人很头痛,因为 broker 并不维护 consumer 的消费状态

        8) 如果使用率很高,则必须尽快删除旧消息,否则就会出现磁盘空间不够用的问题。

        9)众所周知,kafka 原生的跨地域复制机制 (Wiroraker)有问题,即使只在两个数据中心也无法正常使用跨地域复制。因此,甚至 Uber 都不得不创球另一套解决方案来解决这个问题,并将其称为 uReplicator (https://eng.uber.com/ureplicator/)。

        10)要想进行实时数据分析,就不得不选用第三方工具,如 Apche Strm、Apache Heron 或 Apache Spark。同时,你需要确保这些第三方工具足以支撑传入的流量。

        11)Kafka 没有原的多租户功能来实现租户的完全隔离,它是通过使用主题授权等安全功能来完成的。

五、pulsar架构:

5.1单个 Pulsar 集群由以下三部分组成:

        多个 broker负责处理和负载均衡 producer 发出的消息,并将这些消息分派给 consumer; Broker 与 Pulsar 配置存储交互来处理相应的任务,并将消息存储在 BokKeeper 实例中(又称 bookies); Broker 依赖 ZooKeeper集群处理特定的任务,等等。
        多个 bookie的 BookKeeper 集群负责消息的持久化存储
        一个zookeeper集群,用来处理多个Pulsar集群之间的协调任务

5.2 Brokers介绍

        Pulsar的broker是一个无状态组件,主要负责运行另外的两个组件:

        一个 HTTP 服务器,它暴露了 REST 系统管理接口以及在生产者和消费者之间进行 Topic查找的API
        一个调度分发器,它是异步的TCP服务器,通过自定义 二进制协议应用于所有相关的数据传输。
        出于性能考虑,消息通常从Managed Ledger缓存中分派出去,除非积压超过缓存大小。如果积压的消息对于缓存来说太大了,则Broker将开始从BookKeeper那里读取Entries (Entry同样是BookKeeper中的概念,相当于一条记录)。

        最后,为了支持全局Topic异地复制,Broker会控制Replicators追踪本地发布的条目,并把这些条目用Java 客户端重新发布到其他区域

5.3 Zookeeper的元数据存储

        Pulsar使用Apache Zookeeper进行元数据存储集群配置和协调

        配置存储:存储租户,命名域和其他需要全局一致的配置项
        每个集群有自己独立的ZooKeepr保存集群内部配置和协调信息,例如归属信息,broker负载报告,BooKeeper每个集群有自己独立的ZooKeeper保存集群的) 等等。

5.4 基于bookKeeper持久化存储

        详细资料可以参考:BookKeeper 简介-腾讯云开发者社区-腾讯云

        Apache Pulsar 为应用程序提供有保证的信息传递,如果消息成功到达broker,就认为其预期到达

        为了提供这种保证,未确认送达的消息需要持久化存储直到它们被确认送达。这种消息传递模式通常称为持久消息传递,在Pulsar内部,所有消息都被保存并同步N份,例如,2个服务器保存四份,每个服务器上面都有镜像的RAID存储。Pulsar用 Apache bookkeeper作为持久化存储。 bookkeeper是一个分布式的预写日志 (WAL)系统,有如下几个特性特别适合Pulsar的应用场景:
        1)使pulsar能够利用独立的日志,称为ledgers. 可以随着时间的推移为topic创建多个Ledgers
        2) 它为处理顺序消息提供了非常有效的存储
        3) 保证了多系统挂掉时Ledgers的读取一致性
        4) 提供不同的Bookies之间均匀的I0分布的特性0
        5)它在容量和吞吐量方面都具有水平伸缩性。能够通过增加bookies立即增加容量到集群中,并提升吞吐量
        6)Bookies被设计成可以承载数千的并发读写的ledgers。 使用多个磁盘设备(一个用于日志,另一个用于一般存储),这样Bookies可以将读操作的影响和对于写操作的延迟分隔开。

        Ledger是一个只追加的数据结构,并且只有一个写入器,这个写入器负责多个bookkeeper存储节点(就是Bookies)的写入Ledger的条目会被复制到多个bookies。 Ledgers本身有着非常简单的语义:

        Pulsar Broker可以创建ledeger,添加内容到ledger和关闭ledger。
        当一个ledger被关闭后,除非明确的要写数据或者是因为写入器挂掉导致ledger关闭,ledger只会以只读模式打开。
        最后,当ledger中的条目不再有用的时候,整个ledger可以被删除 (ledger分布是跨Bookies的)。

5.5Pulsar 代理

        Pulsar客户端和Pulsar集群交互的一种方式就是直连Pulsar brokers。然而,在某些情况下,这种直连既不可行也不可运行Pulsar,直连取,因为客户端并不知道broker的地址。 例t在云环境或者Kubernetes以及其他类似的系统上面brokers就基本上不可能了。

        Pulsar proxy 为这个问题提供了一个解决方案,为所有的broker提供了一个网关,如果选择了Pulsar Proxy,所有的客户都会通过这个代理而不是直接与brokers通信

六、待续

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

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

相关文章

人工智能利用深度学习技术增强高级驾驶辅助系统(ADAS)

深度学习通过实时传感器数据增强高级驾驶辅助系统(ADAS),实现精确的物体检测、碰撞预测和主动决策。 人工智能和机器学习利用深度学习技术的优势,使高级驾驶辅助系统(ADAS)发生了重大变革。ADAS在很大程度上依赖深度学习来分析和解释从各种传感器获得的…

Flutter 中使用 ICON

Flutter Icon URL : https://fonts.google.com/icons: 在Flutter中使用 Icon 步骤如下: 导入图标库 在Dart 文件中导入 material.dart 包,该包包含了 Flutter 的图标库。 import package:flutter/material.dart;使用图标组件 …

救赎之道,就在其中

时光荏苒,不知不觉距离我踏入职场的第一天已经快一年了。最近也是看到平台举办年度征文活动,借此契机重新审视自己这两年来的成长历程,也希望对正在迷茫的人提供一些精神上的慰藉。 1.对未来的迷茫 如果要给两年前的自己打上标签&#xff0…

在IntelliJ IDEA上使用通义灵码(TONGYI Lingma)

参考链接: 通义灵码产品介绍_智能编码助手_AI编程_云效(Apsara Devops)-阿里云帮助中心 【IDEA如何使用通义灵码?】_idea 通义灵码-CSDN博客 1. 简介 1.1 定义 通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提…

实现多级缓存(Redis+Caffeine)

文章目录 多级缓存的概述多级缓存的优势 多级缓存的概述 在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在…

【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客(【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰)的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

前端项目构建打包生成Git信息文件

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、前端项目构建打包生成Git信息文件作用二、步骤1.引入相关的npm包1.1. **fs** 包1.2. **child_process** 包1.3. **os** 包 (非必须 如果你想生成的文件信息中包含当前电脑信息则可用)1.4. **path** 包…

MySql -数据库基本概念

一、数据库的基本概念 1.为什么要学数据库? 之前我们如果想将一些数据实现永久化存储,可以怎么做呢?没错。使用IO流的技术将数据保存到本地文件中但是接下来我有这样一个需求:将下面的user.txt文件中的王五年龄修改为35 张三 2…

视频智能剪辑方案,企业视频制作新时代

视频已经成为了人们获取信息、娱乐和学习的重要方式。然而,传统的视频制作过程繁琐且耗时,这对于许多企业来说无疑是一个巨大的挑战。为了解决这个问题,美摄科技凭借其在机器学习、深度学习等AI算法方面的深厚积累,自主研发了一套…

23111 IO进程线程 day8

使用信号灯集完成三个进程的同步&#xff0c;A进程输出字符A&#xff0c;B进程输出字符B&#xff0c;C进程输出字符C&#xff0c;要求输出结果为ABCABCABCABCABC... #include<myhead.h> #include "sem.h"int main(int argc, const char *argv[]) {pid_t pid…

Linux的网络服务DHCP

一.了解DHCP服务 1.1 DHCP定义 DHCP&#xff08;动态主机配置协议&#xff09;是一个局域网的网络协议。指的是由服务器控制一段IP地址范围&#xff0c;客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下&#xff0c;DHCP作为Windows Server的一个服…

【开发小程序多少钱?智创开发】

开发一个小程序费用主要看做什么和怎么做&#xff1f; 第一部分&#xff1a;做什么&#xff1f; 做什么是指功能部分&#xff0c;开发的功能不一样&#xff0c;耗时也就不一样&#xff0c;价格自然也就不一样了。就好比买房&#xff0c;套二的公寓和别墅价格自然差距很大。所…

软光栅透视校正插值写好了

我这文章写的六,自己不写什么过程,直接发张图片.我发一下我看的引用. 透视矫正插值 Perspective-Correct Interpolation 计算机图形学六&#xff1a;正确使用重心坐标插值(透视矫正插值(Perspective-Correct Interpolation))和图形渲染管线总结 一开始写错了,改了大概两天改…

代理IP连接不上/网速过慢?如何应对?

当您使用代理时&#xff0c;您可能会遇到不同的代理错误代码显示代理IP连不通、访问失败、网速过慢等种种问题。 在本文中中&#xff0c;我们将讨论您在使用代理IP时可能遇到的常见错误、发生这些错误的原因以及解决方法。 一、常见代理服务器错误 当您尝试访问网站时&#…

Golang Web框架性能对比

Golang Web框架性能对比 github star排名依次: Gin Beego Iris Echo Revel Buffalo 性能上gin、iris、echo网上是给的数据都是五星&#xff0c;beego三星&#xff0c;revel两星 beego是国产&#xff0c;有中文文档,文档齐全 根据star数&#xff0c;性能&#xff0c;易用程度…

UGUI Image图像控件替换图片

代码为探索而来&#xff0c;不是最优代码&#xff0c;请按需使用。 Unity3d引擎版本&#xff1a;Uinty3d 20233.2.3f1 补充一下图片如何改成Texture2D&#xff1a; 1、将图片导入unity。 2、选择图片&#xff0c;按下图操作&#xff0c;点击应用即可。 脚本代码&#xff1a…

听劝,年度规划有它真的很必要!

2024年的时间进度条已走过一周&#xff0c;完成全年的1/52。 新年的flag悄然立下&#xff1a;愿逆风如解意&#xff0c;税后八个亿。 在不确定的世界中&#xff0c;发财暴富终归是确定的目标。 相比2023年的卷&#xff0c;年底的即兴生活正在悄悄上演&#xff0c;上一秒还在…

Unity中URP下实现能量罩(交接处高亮)

文章目录 前言一、交接处高亮 原理1、 我们先用一个球作为能量罩、一个Cube 和 一个 椭球 作为与能量罩交接的物体2、 这是我们目前场景的深度图3、使能量罩为 半透明渲染队列 且 关闭深度写入 不渲染深度图 二、交接处高亮 实现1、得到深度图2、在片元着色器中&#xff0c;对深…

Python冒号的解释

1. “没什么首次没有为第二个&#xff0c;跳了三个”。它得到的切片序列的每一个第三个项目。 扩展片是你想要的。新在Python 2.3 2. Python的序列切片地址可以写成[开始&#xff1a;结束&#xff1a;一步]和任何启动&#xff0c;停止或结束可以被丢弃。a[::3]是每第三个序列。…

element-plus里el-date-picker日期选择器,默认值不显示的问题

官网文档给出的示例默认值也是没有没显示的。 找了很多方法&#xff0c;最终是给v-model"defaultTime"绑定初始值&#xff0c;如下代码&#xff0c;需要的可以改一下 <el-date-picker class"top_select" v-model"defaultTime" type"da…