博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么要选择Apache Pulsar(一)
阅读量:7066 次
发布时间:2019-06-28

本文共 2255 字,大约阅读时间需要 7 分钟。

是由Yahoo开发并开源的下一代发布订阅消息系统。Pulsar用于解决现有开源消息系统的不足,并已在Yahoo的生产环境中运行了三年多时间,助力Yahoo的主要应用,如Yahoo Mail、Yahoo Finance、Yahoo Sports、Flickr、Gemini广告平台和Yahoo的分布式键值存储系统Sherpa。Pulsar于2016年底开源,目前是Apache软件基金会的孵化器项目。在这篇文章里,我们将介绍Pulsar的一些主要特性。

\\

在文章中,我们介绍了Pulsar的一些组件概念和术语。Pulsar集群主要由三部分组成:broker集群,bookie集群,以及用于协调配置管理的ZooKeeper集群。Pulsar broker组件用于接收、保存和传递消息。bookie是Apache BookKeeper服务器,为Pulsar提供持久性的存储,一直到消息被消费掉。架构图如下所示。

\\

50ac4cb4737a366c6c59986894e6d69d.png

\\

图1 Pulsar集群架构图   

\\

灵活的消息模型

\\

传统的消息模型有两种:和。队列是一种点到点的通信模型——可能有多个消费者从服务器上读取消息,而每个消息只会被发给其中的一个消费者——因此,数据的处理可以被分摊给多个消费者,从而获得伸缩性。发布/订阅是一种广播式的通信模型——消息被广播给所有的消费者。

\\

Pulsar通过统一的API实现了这两种模型——生产者向主题(topic)发布消息,消息被广播给不同的订阅者,消费者订阅主题以便消费消息。消费者可以灵活地选择消费消息的方式——独享方式、共享方式或失效备援方式。对于队列模型来说,如果采用共享方式,并使用了轮询策略,那么应用程序就可以将负载分摊给消费者。与其他消息系统不同的是,Pulsar允许活跃消费者的数量超过主题分区的数量。

\\

因为Pulsar使用BookKeeper作为流式存储组件,所以它也对外提供了一组流式来读取底层的日志,应用程序可以调用这组API从任意位置开始消费消息。

\\

灵活的部署模型

\\

Pulsar可以被灵活地部署到不同的环境里,它可以运行在裸机上、本地或云端的Kubernetes集群上、Google Container Engine和AWS上。Pulsar也可以作为单独节点运行,用于开发和测试。在这种情况下,Pulsar broker、bookie和ZooKeeper都以独立进程的方式运行。

\\

多租户

\\

Pulsar在一开始就被设计成可以在私有云和公有云上部署的托管服务,其他的开源消息系统都没有提供这种特性。对于大中型企业来说,共享一个Pulsar集群要比让每个团队都使用自己的集群成本低得多。虽然每个团队可以自己部署集群,但这要求他们对系统内部原理非常了解,知道如何配置、监控和诊断问题。另外,在整个组织内共享一个集群可以降低成本,因为集群资源可以得到更好的利用,只需要一个DevOps团队就足以应付所有的工作,而且可以根据负载高峰期和项目增长作出容量规划。

\\

多地域复制

\\

与其他消息系统不一样的是,Pulsar将多地域复制作为首要特性。用户只需要配置好区域,并启用跨集群消息复制,剩下的事情由Pulsar来完成。数据会持续不断地被复制到远程的Pulsar集群上。如果数据中心之间发生网络故障,数据会被保存下来并进行重试,直到复制成功为止。

\\

Pulsar可以在不同地理区域的多个数据中心上进行并行的数据复制。Yahoo的键值存储系统Sherpa使用Pulsar来复制预写式日志(WAL),日志被复制到十个不同的地理区域,实现最终一致性。多地域复制方式也很灵活,可以在私有云之间复制,也可以在私有云和公有云之间复制,或者在公有云之间复制,甚至在数据中心和私有云(或公有云)之间复制。对于想要迁移到云端的大型组织来说,他们可以将Pulsar部署到多个不同的云上,然后在多个云之间复制数据。

\\

持久性

\\

Pulsar在收到消息并进行确认之后,它可以保证数据不会因为各种故障而丢失掉。持久性保证强度由保存数据的磁盘数量来决定,而磁盘数量则由配置的“9”的个数来决定。Pulsar使用bookie来保证持久性,在收到一个消息之后,它将消息发送给多个bookie节点。bookie节点在收到消息后,将它保存到内存里,同时也往WAL里写入一份。bookie在向broker发送确认之前会将日志强制写入稳定的存储。与数据库的事务类似,WAL可以保证数据不会丢失,即使机器出现故障。在重启机器后,通过重放WAL就可以恢复数据。

\\

除此之外,即使有多个节点发生故障,消息仍然不会丢失。Pulsar将每个消息复制给多个bookie节点,并在若干个bookie(根据配置的复制系数)写入成功之后才会向生产者发送确认。这样可以保证在发生多个节点故障的情况下,仍然不会丢失数据。

\\

得益于BookKeeper内部IO机制的优化,在保证强持久性的同时,Pulsar仍然能够提供很高的吞吐量和很低的延迟。

\\

总结

\\

Pulsar是下一代发布订阅消息系统,弥补了其他开源消息系统的不足。在这篇文章里,我们介绍了Pulsar仅通过一套API实现了灵活的消息模型——队列和发布订阅,还介绍了企业级的多租户特性、多地域复制和强持久性保证。在下一篇文章里,我们将介绍更多的特性,比如IO的读写隔离、伸缩性、安全和运维成熟度。

\\

查看英文原文

\\

感谢对本文的审校。

转载地址:http://gkall.baihongyu.com/

你可能感兴趣的文章
docker可以把应用及其相关的_等离子表面处理机相关应用及其特点
查看>>
发电厂电气部分第三版pdf_喜讯、大唐锡林浩特发电厂660mw机组投产运行
查看>>
mysql 数据库操作通用类_mysql 数据库操作通用类
查看>>
mysql多数据库多实例配置_MySQL多实例配置方案
查看>>
python创建线段_在绘图图中添加线段的简洁方法(使用python/jupyter笔记本)?
查看>>
wkhtmltoimage 卡住了_用rails做一个简单的长微博生成工具
查看>>
什么叫组网_组网是什么意思
查看>>
如何使用mysql数据库做网站_php小型数据库(不用mysql做网站)
查看>>
mysql date to javascript_Convert MySql DateTime stamp into JavaScript's Date format
查看>>
mysql临时表仅对当前用户_mysql临时表问题
查看>>
mysql报错文档_mysql报错小记-Can't create test file xxx lower-test
查看>>
mysql数据库基础简介_MySQL数据库命令的基础简介
查看>>
java arraylist方法_Java的ArrayList方法及示例
查看>>
java语言新特性_Java语言的新特性
查看>>
java try finally_Java中try、finally语句中有return时的执行情况 [转]
查看>>
java io nio nio2_Java 对象序列化 NIO NIO2详细介绍及解析
查看>>
java中的pattern_JAVA中Pattern和Matcher的用法
查看>>
java登录有次数限制_[Java教程]限制登录次数
查看>>
java的classpath路径_Java项目下的classpath路径包括哪里-Go语言中文社区
查看>>
android java 数组转字符串_android112 jni 把java的字符串转换成c的字符串,数组处理...
查看>>