Apache Pulsar是一个开源的分布式流媒体平台,最初由Yahoo创建。这是Apache基金会自2018年9月以来的顶级项目之一,该项目主要由该公司开发。https://streaml.io/ (最近被Splunk收购)。
Apache Pulsar概念和架构
Pulsar是一个基于发布-订阅模式的分布式、多租户、高性能和容错平台。
在这种体系结构中,我们区分两种类型的应用程序:生产者和消费者。此外,我们还有主题、消息和订阅的概念。
让我们在Apache Pulsar的上下文中定义这些概念。
Producer
生产者是将消息发布到一个或多个主题中的应用程序。
消息可以同步或异步发布。对于第一个,生产者阻塞并等待来自Apache Pulsar的确认,对于第二个,消息排队并在后台发送。
出于性能考虑,可以对消息进行批处理和压缩,以减少网络带宽。目前,Apache Pulsar支持以下压缩编解码器:LZ4、ZLIB、ZSTD和SNAPPY。
Topic
主题是用于对属于同一业务或技术上下文的消息进行分组的抽象。主题使用符合以下结构的URI命名:
{type}://{tenant}/{namespace}/{topic}
目前,我们可以忽略“租户”和“命名空间”的概念,但让我们讨论一下类型:
Pulsar支持两种主题:
- 持久(默认):所有消息都在磁盘上持久存储和复制。
- 非持久性:所有消息都驻留在内存中,从不在磁盘上持久化。这意味着,如果节点发生故障,消息可能会丢失。
默认情况下,Pulsar会自动创建一个主题,如果它不存在时,客户(生产者或消费者)试图生产或消费。
最后,在Apache Pulsar集群中划分一个主题。因此,组成集群的每个节点都拥有一个称为分区的主题子集。
Message
消息是Apache Pulsar的基本单元,它由一个键值对组成:一组可选的用户定义属性、生产者标识符、主题中消息的序列id以及事件和处理时间戳。
另外,需要注意的是,键是可选的,序列id由生产者分配。
路由模式
生产者可以通过指定路由模式来确定消息如何分布在集群节点上。路由模式确定每个记录的目标分区,从而确定消息的传递顺序。
Apache Pulsar提供三种路由模式:
- RoundRobinPartition(默认):生产者以循环方式跨所有分区发布没有指定密钥的消息或消息批。否则,如果为消息指定了密钥,则会生成哈希,并将消息发送到特定分区。
- SinglePartition:生产者随机选择一个分区并发送所有没有指定密钥的消息。否则,如果为消息指定了密钥,则会生成哈希,并将消息发送到特定分区。
- CustomPartition:如果前面的路由模式都不适合您,那么CustomPartition将为您提供实现自定义MessageRouter的可能性。
用户订阅和游标
使用者可以订阅一个或多个主题,以便通过创建或加入订阅来使用和处理已发布的消息。
订阅是一种用于将多个使用者分组在一起以分配消耗负载的机制。每个订阅都使用用户定义的名称进行标识。
此外,订阅还用于跟踪该订阅中每个使用者的进度。Apache Pulsar使用了游标的概念。主题的每个订阅都与一个游标相关联,该游标在使用者确认消息时随时更新。
消息可以逐个确认,也可以累计确认(这意味着只确认接收到的最后一条消息)。
最后,简要总结一下我们刚才所说的,下面是一个描述这些基本概念的图表。
订阅模式
Apache Pulsar定义了四种订阅模式,可以配置这些模式来定义如何将消息传递给消费者。
选择适合您需求的正确订阅模式非常重要。事实上,某些模式可能会对消息的传递顺序或崩溃时消费者的行为产生重大影响。
Exclusive
独占模式允许您仅将一个使用者连接到给定订阅。然后,使用者实例将使用所有主题分区的所有消息。其他试图订阅订阅的用户将被拒绝。这是默认的订阅模式。
Failover
故障转移模式支持多个使用者订阅同一订阅。消费者根据开发商提供的消费者姓名进行分类。第一个使用者接收所有消息,而其他使用者处于待机状态。如果第一个使用者失败,所有消息(未确认和后续消息)都将发送到下一个使用者。
Shared
共享模式允许您将一个或多个使用者连接到同一订阅。消息以循环方式在订阅中的所有使用者之间传递。当某个使用者断开连接或发生故障时,所有未确认的消息都将发送给其余的使用者。
需要注意的是,此模式不保证任何交货订单。
Key Shared
密钥共享模式与以前的共享模式相同,只是Apache Pulsar保证所有具有相同密钥的记录都将只传递给一个使用者。
数据保留和过期策略
Apache Pulsar允许您配置用户确认或未确认的消息将在磁盘上存储多长时间。
通过混合保留和到期属性,可以使用四种不同类型的保留策略配置主题。
1. 基于确认的保留:消息一旦被所有订阅使用并确认,就会立即从主题中删除。否则,所有未确认的消息都存储在磁盘上。这是默认行为。
2. 基于大小的保留:已确认和未确认的消息都保留在磁盘上。一旦主题达到配置的大小,最旧的消息将自动删除。
3. 基于时间的保留:已确认和未确认的消息都保留在磁盘上。超过配置时间的邮件将自动删除。
4. 生存时间保留:如果邮件在配置的生存时间之后未得到确认,则会自动从主题中删除。
最后,Apache Pulsar还提供了一种压缩机制,这是一种特殊类型的保留。当手动触发压缩或主题达到一定大小时,仅保留关联密钥的最新消息。
Apache Pulsar的两层结构
Apache Pulsar集群可以看作两层架构,一层称为服务层,另一层称为持久层。
Brokers
服务层由一个或多个节点组成,每个节点承载一个代理,代理负责处理和负载平衡来自生产者和消费者的传入请求。
服务层是无状态的,这意味着代理不直接在本地存储任何数据。取而代之的是,代理依赖持久层,顾名思义,通过使用Apache BookKeeper在磁盘上持久化消息。
日志流、分类帐和赌注
Apache BookKeeper是另一个开源服务,它为日志条目流提供可靠且具有弹性的持久性存储。日志流可以定义为有序和不可变记录的无界序列,通常使用仅附加结构(也称为预写日志)实现。
在BookKeeper中,日志条目流由账本组成,账本由称为bookies的单个服务器节点管理。Pulsar使用账本存储写入主题分区的消息。每个主题分区被分配给多个分类账,消息被写入这些分类账。然后,账本被剥离在一个集合的赌注,使每个赌注存储账本的碎片。
Apache Zookeeper
最后,Pulsar和BookKeeper都使用Apache Zookeeper作为元存储。Pulsar使用它来保存关于集群的特定信息,比如主题配置,并作为一种协调服务来管理分布式选举等。
下图描述了ApachePulsar架构。
更多高级功能
Pulsar实例
多个Apache Pulsar集群可以组合在一起形成一个地理复制Pulsar实例。
这使得在遥远地区的不同数据中心之间复制消息变得很容易。
多租户
Apache Pulsar通过租户和名称空间的概念支持多租户。租户可以拥有自己的配额和身份验证和授权配置。租户也可以分布在Pulsar实例中的多个集群中。
名称空间是主题配置的基本单元。可以在租户中创建多个名称空间,也可以在名称空间中创建多个主题。此外,命名空间的配置集应用于在该命名空间中创建的所有主题。
分层存储
因为数据可以无限期地增长,所以将较旧的数据移动到较便宜的存储系统通常很有趣。实现这一点的一种方法是使用我们所称的分层存储。
Apache Pulsar在本地支持awss3和Google云存储以实现长期存储。
Apache Pulsar公开了用于触发数据传输的简单restapi。
下篇文章将介绍Apache Pulsar客户端如何使用。
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2119.html
暂无评论