为什么要选择Apache Pulsar(二)

这是介绍Apache Pulsar关键特性系列文章的第二篇。Pulsar是由Yahoo开发并开源的下一代发布订阅消息系统。在第一篇文章里,我们介绍了Pulsar对消息模型的灵活支持、多租户、多地域复制和持久性。在这一篇文章里,我们将继续介绍Pulsar的IO隔离机制、伸缩性、安全模型、多语言API和易操作性。

\\

读写IO隔离

\\

在大多数消息系统里,消费者的速度延迟会导致性能下降。同一个主题的消费者,如果其中一个出现速度延迟,就会影响到其他速度更快的消费者。这是因为慢消费者强制要求消息系统从存储里获取数据,导致IO出现抖动,降低吞吐量。那些需要将数据先加载到内存里的消费者就会受到影响。导致这一问题的原因主要是读操作和写操作共享同一个执行路径。

\\

Pulsar通过使用BookKeeper作为存储系统解决了这一问题。有了BookKeeper,Pulsar就可以为读操作和写操作提供不同的执行路径,实现IO隔离。常规的读操作直接由Pulsar broker处理,写操作使用BookKeeper的预写式日志(WAL),Catch-up读使用BookKeeper的后端存储设备。

\\

对于系统中消息的发布,在任何情况下都能提供可控的,可预计的延迟是十分重要的。有了IO隔离,即使在磁盘承受高负载的读操作时,仍然能够保证消息的发布延迟是很低的、可以预计的。

\\

伸缩性

\\

消息系统的可伸缩性也是很重要的。发布订阅消息系统的伸缩性可以从以下几个维度来衡量:

\\
  • 高吞吐量——Pulsar的高吞吐量,通过最大限度的使用磁盘带宽(IOPS)来实现。吞吐量取决于消息的大小,例如,如果消息的大小为1KB,那么Pulsar可以达到每秒120MB的吞吐量。但如果消息很小,比如只有10个字节,那么吞吐量可能只有1.8M每秒。这两种结果都是基于单个发布者向一个主题(topic)分区写入消息而得出的,99%的写入延迟都在5毫秒以内。\\t
  • 主题数量——主题伸缩性是发布订阅消息系统用以支持海量主题的一项能力。Pulsar可以支持从几百到百万级别的主题数量的扩展,同时还能一直保持良好的性能。主题的伸缩性取决于数据的组织和存储方式。如果一个主题的数据被保存在单独的文件或目录里,就会影响伸缩性,因为磁盘的IO是分散的,这些文件会定期从页面缓存冲刷到磁盘上。不过Pulsar的数据保存在bookie(BookKeeper服务器)上,不同主题的消息被聚合起来,经过排序,保存到大文件里,并进行索引。Pulsar也因此能够支持大量的主题。\

安全

\\

Pulsar支持可插拔的认证机制,可以通过配置使用多种认证实现。认证的目的是为了建立客户端标识,并为客户端分配一个角色令牌。这个令牌被用来判断一个客户端可以做哪些操作。Pulsar提供了两个默认的认证实现:TLS客户端认证和AthenZ(由Yahoo开发的一种基于角色的认证系统)。

\\

多语言API

\\

应用程序可以通过多种编程语言与Pulsar发生交互。Pulsar为三种主流语言提供了官方的客户端:C++、Java和Python。用户可以根据实际需要选择一种客户端。这些客户端API非常直观,而且在不同语言之间保持了一致性。另外,Pulsar的官方客户端还为不同风格的应用程序提供了同步和异步两种读写操作。同步和异步的语义是一样的:要么阻塞方法等待操作完成,要么返回一个Future对象用于追踪操作是否完成。

\\

运维成熟度

\\

Pulsar易于管理,你可以在系统运行的同时加入新的broker节点和存储节点来扩展容量。如果一个存储节点宕机,后台进程会自动将宕机节点所包含的数据从其他节点上的可用副本中复制到可用的存储节点上。Pulsar为集群管理提供了多种方式,可以使用命令行工具,也可以使用Java库或REST API。后者提供了更大灵活性,你可以基于它们开发自己的管理工具或者与已有的工具结合在一起使用。

\\

企业级

\\

Yahoo设计Pulsar是为了解决现有开源消息系统存在的一些问题和场景。满足了高吞吐量(处理数千亿个消息)、强持久性保证和低延迟的需求。Pulsar已经在Yahoo运行了三年,支持着140万个主题,99%延迟低于5毫秒,部署在10多个数据中心(启用了全网格复制),已经处理了超过100万亿个消息。

\\

总结

\\

Pulsar是下一代发布订阅消息系统,弥补了其他开源消息系统的不足。在这两篇文章里,我们介绍了Pulsar的各种关键特性,并解释了Pulsar如何通过使用broker和bookie来实现IO隔离,以及它如何支持企业级的特性,如持久性、多租户、多地域复制、高吞吐量和主题伸缩。

\\

查看英文原文:Why Apache Pulsar? Part 2

\\

感谢杜小芳对本文的审校。

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

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

相关文章

Yolov5目标检测模型运行遇到的相关问题汇总

一、yolov5-5.0常见错误 1. pycocotools工具包无法安装 具体报错如下: requirements: pycocotools>2.0 not found and is required by YOLOv5 pkg_resources.DistributionNotFound: The pycocotools>2.0 distribution was not found and is required by th…

PHP反射之类的反射

最近在琢磨如何用PHP实现站点的插件功能,需要用到反射,于是现学了一下,笔记如下: class Person {public $name Lily;public $gender male;public $age 20;public function eat(){echo Lily is eating!;}public function run(){…

数据结构(复习)--------关于平衡二叉树(转载)

在上一个专题中,我们在谈论二叉查找树的效率的时候。不同结构的二叉查找树,查找效率有很大的不同(单支树结构的查找效率退化成了顺序查找)。如何解决这个问题呢?关键在于如何最大限度的减小树的深度。正是基于这个想法…

mysql外键

效果 a,b,c 如果c设置到a的外键,那么只能在删除c的记录后,才能删除a的记录。 https://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails CREATE TABLE IF NOT EXISTS advertisers ( adverti…

C++总结笔记(一)—— 基础知识汇总

很长时间没有再复习C的基础知识&#xff0c;现在将一些容易遗忘的知识点做一个简单的汇总。 1、注释 ❤️分为单行注释和多行注释 //cout<<endl;/*int i1;cout<<i<<endl;*/2、常量 ❤️宏常量&#xff1a;#define &#xff0c;宏常量没有类型&#xff0c;…

微软自带iscsi客户端对iqn的要求

节点名称&#xff1a;Microsoft iSCSI 发起程序严格遵守为 iSCSI 节点名称指定的规则。这些规则也适用于 Microsoft iSCSI 发起程序节点名称以及发现的任何目标节点名称。构建 iSCSI 节点名称的规则&#xff08;如 iSCSI 规范以及“iSCSI 名称的字符串配置文件”Internet 草稿中…

【Python数据结构】——链表

仅仅为了记录 # 定义一个类&#xff0c;用于创建链表的结点 class LNode():def __init__(self,elem,next_ None):# 类的初始化方法,在实例化类的时候会自动调用self.elem elemself.next next_list1 LNode(1)# 类的实例化&#xff0c;LNode(1)为第一个链表结点&#xff0c;…

天猫双11凭什么达到1682亿?这些支撑技术或许可以告诉你

历年「双 11」都会掀起一股买买买的购物热潮 阿里巴巴将这个原本普通的日子赋予了非凡的意义 今年&#xff0c;天猫以 1682 亿的成交额再破记录 而在这一系列疯狂“秒杀”动作的背后 有一个叫云化架构的技术体系支撑着十几亿人的消费狂欢 12 月 8 日 ArchSummit 阿里技术专场 来…

PageLayoutControl的基本操作

整理了下对PageLayoutControl的基本功能操作 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071…

C++总结笔记(二)——指针

一、概念 1.1 指针的原理 找到一个比较精练的概述指针原理的句子&#xff1a; 指针变量就是在内存中保存变量的地址&#xff0c;然后通过地址来访问数据。 int a 1; int* p &a; cout << p << endl;009DFEB4可以知道变量p在内存中的值就是a的地址&#xff…

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag转载于:https://www.cnblogs.com/zhujiabin/p/5085688.html

【图像处理】——图像内插法

参考:https://blog.csdn.net/lovexlsforever/article/details/79508602 cv2.resize函数 當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,當我們放大影像,CV_INTER_CUBIC會有最好的效果 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, dou…

while read line 用法详细介绍

循环中的重定向 或许你应该在其他脚本中见过下面的这种写法&#xff1a; while read line do … done < file 刚开始看到这种结构时&#xff0c;很难理解< file是如何与循环配合在一起工作的。因为循环内有很多条命令&#xff0c;而我们之前接触的重定向都是为一条命令工…

C++总结笔记(三)—— 结构体

一、概念 结构体是一种可以自定义数据类型的类型格式&#xff0c;一般用struct关键字进行定义。 //创建食物的结构体 struct Food {//属性名string name; //名字int Price; //价格 };结构体有三种定义变量的方法。 1.1 定义结构体后再声明变量&#xff0c;然后在对变量的…

[轻微]WEB服务器启用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等协议访问应用程序/tomcat下禁用不安全的http方法...

使用了360网站安全检测 查到有OPTIONS方法 百度了下 https://my.oschina.net/maliang0130/blog/338725 找到这个方法奈何http.conf 找不到无论在tomcat目录里还是linux路径下的/usr/etc或者apache2 最后通过开源中国找到 第一步&#xff1a;修改应用程序的web.xml文件的协议 &l…

MVC 事物同时保存,更新数据库

本人小白一枚&#xff0c;第一次写博&#xff0c;主要用作笔记&#xff0c;怕以后忘记了&#xff0c;大神尙可路过&#xff0c;也可多多指教 事物用在同时保存更新数据时&#xff0c;及只要在事物块的范围内&#xff0c;有一个操作出错则事物块所有更新&#xff0c;保存等操作都…

【图像处理】——正装照换底色Python

import cv2 import numpy as np # 读取照片 img=cv2.imread("personalPic.jpg")# 图像缩放 img = cv2.resize(img,None,fx=0.3,fy=0.3) rows,cols,channels = img.shape print(rows,cols,channels)# img_medianBlur=cv2.medianBlur(img,3) # 中值滤波,必须是大于1的奇…

Halcon例程详解(植物测量) —— measure_plant.hdev

文章目录 前言一、过程1.1 筛选ROI区域1.2 分割1.3 三维建模与仿射变换1.4 确定叶子的角度分布和高度1.5 确定叶子的面积和树干的直径1.6 对叶子的角度进行分析二、例程详解2.1 筛选ROI区域2.2 分割2.3 三维建模与仿射变换2.4 确定叶子的角度和高度2.5 确定叶子的面积和树干的直…

keil5中文乱码的解决

keil5 复制出来的中文显示乱码&#xff0c;该如何解决&#xff1f; 点击Edit - Configuration &#xff0c;进入编辑器设置&#xff1a; 点击ok &#xff0c;就可以了转载于:https://www.cnblogs.com/alan666/p/8312100.html