企业级发布订阅(pub-sub)消息系统-Apache Pulsar
Apache Pulsar,是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化。Plusar已经在Yahoo的生产环境使用了三年多,主要服务于Mail、Finance、Sports、 Flickr、 the Gemini Ads platform、 Sherpa以及Yahoo的KV存储。它是一个由持久存储(使用Apache Bookkeeper)支持的pub-sub消息传递平台,具有以下特性:
地域复制
多租户
零数据丢失
零重新平衡时间
统一排队和流媒体模型
高度可扩展
高吞吐量
Pulsar代理
Functions
SQL
更多详细信息可查看官方详细文档。
架构
在最高层, 一个Pulsar实例由一个或多个Pulsar集群组成。实例中的群集之间可以相互复制数据。
一个Pulsar集群由下面三部分组成:
一个或者多个brokers负责处理和负载均衡从生产者源源不断发送出的消息,并将他们发送给消费者。它与配置存储交互来处理相应的任务,它将消息存储在BookKeeper实例中(aka bookies)。它依赖ZooKeeper集群处理特定的任务,等等。
一个包含一个或者多个Bookies的BookKeeper,这个BookKeeper主要负责消息的 持久化存储
用于Pulsar集群操作的该Pulsar集群独有的ZooKeeper
以下是上图中的亮点,让我们选择Pulsar:
1、负载均衡器:Pulsar具有内置负载均衡器,可在内部向所有代理分配负载。
2、服务发现:Pulsar内置服务发现,以确定使用单个端点连接到代理的位置和方式。
3、全局复制器:帮助在命名空间配置的n代理之间复制数据。
4、全局ZK:Global Zookeeper有助于实现地理复制。
特性
地域复制
地理复制是Pubsar的开箱即用解决方案。可以在命名空间级别配置全局集群,以便在任意数量的集群中复制它(n路网格解决方案)。从以下示例中,数据中心C没有使用者,但仍然根据订阅模型在数据中心A或B中使用消息。
多租户
Pulsar有一个租户的概念。租户可以跨群集传播,每个都可以应用自己的身份验证和授权方案。它们也是可以管理存储配额,消息TTL和隔离策略的管理单元。
通过多租户功能为数据存储提供隔离,有助于为企业建立一个集群。这种内置功能将大大降低组织的基础架构和运营成本。
零重新平衡时间
Pulsar的分层架构和broker的无国籍性质有助于实现零重新平衡时间。如果将新broker添加到群集,则它立即可用于写入和读取; 不会花费任何时间在群集中重新平衡数据。
从Bookies的角度来看:当一个新的bookie被添加到集群中时; 由于其基础分布式日志架构 - 读/写隔离,它立即为任何写入做好准备。基于段复制配置的数据重新平衡将在幕后进行,而不会影响群集。
统一排队和流媒体模型
Pulsar在一个模型中支持流式和排队语义。此功能可以通过订阅模型实现。消费者使用任何一种订阅模型订阅该主题:
1、独占(exclusive) - 支持流语义
2、故障转移(failover) - 支持流语义
3、共享(shared) - 支持排队语义
Pulsar Functions/IO
Pulsar Functions,一套基于无服务器化(Serverless)的轻量级计算框架。这套计算框架为数据科学家提供了最为简便的方式进行流计算逻辑的编写。学习成本基本为零,只要能写 Java 或者 Python 的函数,就可以编写在 Pulsar 进行流计算的逻辑。
基于 Pulsar Functions 的架构和 serverless 的理念,实现了一套无服务器化的连接器(Connectors)框架 Pulsar IO。Pulsar IO 提供了简化了 Pulsar 和流生态环境的链接。用户不需要编写任何的代码,只需要准备一个简单的配置文件。并且提供了对连接器的自动的容错管理,负载均衡,随着负载自动伸缩扩容等,极其简化了用户的使用。
目前已经提供的连接器包括:
Kafka
Kinesis
RabbitMQ
Elastic-search
HDFS
Aerospike
JDBC 等。
Proxy
当部署在云或Kubernetes中时,需要使用Proxy将borker暴露给外界。Proxy本身可以提供身份验证和授权,并在TLS或没有TLS的情况下与代理无缝连接。Proxy具有内置功能,可将授权令牌传递给Proxy以进行命名空间权限验证。
Pulsar存储-分布式存储系统Apache BookKeeper
Pulsar用 Apache BookKeeper作为持久化存储。 BookKeeper是一个分布式的预写日志(WAL)系统,有如下几个特性特别适合Pulsar的应用场景:
能让Pulsar创建多个独立的日志,这种独立的日志就是ledgers. 随着时间的推移,Pulsar会为Topic创建多个ledgers。
为按条目复制的顺序数据提供了非常高效的存储。
保证了多系统挂掉时ledgers的读取一致性。
提供不同的Bookies之间均匀的IO分布的特性。
容量和吞吐量都能水平扩展。并且容量可以通过在集群内添加更多的Bookies立刻提升。
Bookies被设计成可以承载数千的并发读写的ledgers。 使用多个磁盘设备,一个用于日志,另一个用于一般存储,这样Bookies可以将读操作的影响和对于写操作的延迟分隔开。
Pulsar SQL
Pulsar的一个常见用例是存储事件数据流。通常,事件数据由预定义字段构成。用户能够查询已存储在Pulsar主题中的现有数据具有巨大的价值。通过Schema Registry的实现,结构化数据可以存储在Pulsar中,并允许通过SQL语言查询该数据。
通过利用Presto,我们创建了一种方法,使用户能够以非常有效和可扩展的方式查询存储在Pulsar中的结构化数据。我们将在下面的性能部分讨论为什么这个非常有效和可扩展。
Pulsar SQL的核心是Presto Pulsar连接器,它允许Presto集群中的Presto工作人员从Pulsar查询数据。
Apache Pulsar 实时场景的应用
实时数据处理在各个行业和领域中已经变得越来越关键。但是在实时数据栈中,Messaging,Computing和Storage三个部分的分离,给方案的实现带来了高复杂性,低可维护性,低效率等问题。
Apache Pulsar在这三个方面上提供一个端到端的实时数据解决方案。
1、Messaging:Pulsar对pub/sub和queue两种模式提供统一的支持,同时保证了一致性,高性能和易扩展性。
2、Computing:Pulsar内部的Pulsar-Functions提供了Stream-native的轻量级计算框架,保证了数据的即时流式处理。
3、Storage:Pulsar借助Apache BookKeeper提供了以segment为中心的存储架构,保证了存储的性能,持久性和弹性。
与Kafka对比
Pulsar被称为下一代消息队列,那它与kafka之间都有哪些异同点呢?请看下表:
对比总结:
Apache Pulsar将高性能流(Apache Kafka追求)和灵活的传统排队(RabbitMQ追求)结合到一个统一的消息传递模型和API中。Pulsar 使用统一的API 为您提供一个流式和排队系统,具有相同的高性能。
总结
Apache Pulsar是一个功能强大的pub-sub模型,基于分层架构,开箱即用,具有Geo-Replication,多重租户,零重新平衡时间,统一排队和流,基于TLS的身份验证/授权,代理和持久性。
- 点赞
- 收藏
- 关注作者
评论(0)