4年前 (2021-05-28)  相关技术 |   抢沙发  1355 
文章评分 0 次,平均分 0.0

Apache Pulsar终极指南–流处理平台

Apache Pulsar简介

Apache Pulsar是一个多租户、高性能的服务器对服务器消息传递系统。雅虎开发了它。2016年末,这是第一个开源项目。现在它正处于孵化期,在Apache软件基金会(ASF)的领导下。

Pulsar使用pub-sub模式,其中有一个生产者和一个消费者(也称为订阅者),主题是pub-sub模型的核心,生产者发布关于给定Pulsar主题的消息,消费者订阅问题以从该主题获取新闻并发送确认。

面向企业的实时大数据分析服务包括以下服务,用于实现实时决策、点击流分析、欺诈检测、个性化用户体验和建议

探索我们的服务、流媒体和实时分析解决方案

一旦订阅被确认,所有的消息都将被pulsar保留。只有在该消息被删除后,才处理了一个已确认的消费者。

Apache Pulsar终极指南–流处理平台

Apache Pulsar Topic:是定义良好的命名通道,用于将消息从生产者传输到消费者。主题名称是定义良好的URL。

命名空间:它是租户内部的逻辑术语。租户可以通过AdminAPI创建多个名称空间。命名空间允许应用程序创建和管理主题的层次结构。可在命名空间下创建的问题数。

Apache Pulsar订阅模式

订阅是用于确定向使用者传递消息的配置的命名规则。Apache Pulsar有三种订阅模式

Exclusive

Apache Pulsar终极指南–流处理平台

在独占模式下,仅允许单个使用者附加到订阅。如果多个使用者尝试使用同一订阅订阅主题,则该使用者将收到一个错误。独占模式默认为订阅模式。

Failover

Apache Pulsar终极指南–流处理平台

在故障转移中,多个使用者连接到同一主题。这些消费者按名称进行词汇排序,第一个消费者是主消费者,他获得所有消息。当一个主消费者断开连接时,下一个消费者将得到单词。

Shared

Apache Pulsar终极指南–流处理平台

共享和循环模式,其中消息仅以循环方式传递给该使用者。当该用户断开连接时,该使用者发送但未确认的消息将被重新调度给其他使用者。

共享模式的限制:

  • 不保证消息顺序。
  • 不能在共享模式下使用累积确认。

Routing Modes

路由模式决定消息将订阅到哪个主题的哪个分区。路由方法有三种类型。使用分区问题发布时,路由是必需的。

Round Robin Partition

如果没有向生产者提供密钥,它将以循环方式跨所有可用分区发布消息,以实现最大吞吐量。循环不是针对单个消息执行的,而是设置为相同的批处理延迟边界,这确保了有效的批处理。而如果在消息上指定了一个键,则被分区的生产者将散列该键并将所有消息分配给特定的分区。这是默认模式。

Single Partition

如果没有提供密钥,生产者随机选择一个分区并发布该分区中的所有消息。而如果为消息指定了密钥,则分区生产者将散列密钥并将字母分配给屏障。

Custom Partition

用户可以通过使用java客户机和实现MessageRouter接口来创建自定义路由模式。将为特定消息的特定分区调用自定义路由。

Apache Pulsar结构

Apache Pulsar终极指南–流处理平台

Pulsar群由不同的部分组成:

在pulsar中,可能有一个或多个代理的句柄,并对来自生产者的传入消息进行负载平衡,它向消费者发送消息,与pulsar配置存储进行通信以处理各种协调任务。它在簿记员实例中存储消息。

BookKeeper集群由一个或多个簿记员组成,用于处理消息的持久存储。

ZooKeeper集群调用配置存储来处理涉及多个组的协调任务。

Brokers

代理是一个无状态组件,用于处理HTTP服务器和调度程序。HTTP服务器为管理任务和生产者和消费者的主题查找公开restapi。dispatcher是一个异步TCP服务器,通过用于所有数据传输的自定义二进制协议。

Clusters

一个脉冲星实例通常由一个或多个脉冲星团组成。它包括:

一个或多个代理、用于集群级配置和协调的zookeeper仲裁以及用于持久存储消息的赌注集合。

Metadata store

Pulsar使用apache zookeeper来存储元数据存储、集群配置和协调。

Persistent storage

Pulsar为信息传递提供了保证。如果一个消息成功到达Pulsar代理,它将被传递到目标。

Pulsar客户端

Pulsar具有客户端API,语言为java、GO、Python和C++。客户端API封装并优化pulsar的客户端代理通信协议。它还公开了一个简单直观的API供应用程序使用。

目前官方的Pulsar客户机库支持透明的重新连接和到代理的连接故障转移,在代理确认之前对消息进行排队,并且这些库还包括启发式方法,例如带退避的连接重试。

客户端设置阶段

当应用程序想要创建生产者/消费者时,pulsar客户端库将启动一个由两个设置组成的设置阶段:

1. 客户机将通过向代理发送HTTP查找请求来尝试确定主题的所有者。应用程序可以访问一个活动的代理,作为回报,通过查看zookeeper的缓存元数据,zookeeper将让用户知道服务主题,或者在没有人服务的情况下将其分配给负载最少的代理。

2. 一旦客户机库拥有代理地址,它将创建一个TCP连接(或重用池中的现有连接)并对其进行身份验证。在这个连接中,二进制命令从自定义协议在代理和客户机之间交换。此时,客户机向代理发送一个创建使用者或生产者的命令,该命令在用户验证授权策略后符合。

Geo-Replication

Apache Pulsar的Geo-replication使消息可以在一个地理位置生成,也可以在其他地理位置使用。

Apache Pulsar终极指南–流处理平台

在上图中,每当生产者P1、P2和P3分别向集群a、B和C上的给定主题T1发布消息时,所有这些消息都会立即跨集群复制。一旦复制,这就允许使用者C1和C2使用来自各自组的消息。

如果没有地理复制,C1和C2使用者将无法使用P3生产者发布的消息。

Multi-Tenancy 多租户

Pulsar是由一个多租户系统创建的。Apache支持多租户。它分布在一个集群中,每个集群都可以应用它们的身份验证和授权方案。它们也是管理存储、消息Ttl和隔离策略的管理单元。

Tenants 租户

对于特定pulsar实例中的每个租户,您可以分配:

1. 授权方案和

2. 应用租户配置的集群集

身份验证和授权

Pulsar支持可在代理上配置的身份验证机制,还支持授权来识别客户机及其对主题和租户的访问权限。

分层存储

Pulsar的架构允许主题积压增长非常大。随着时间的推移,这使得情况变得丰富多彩。为了降低这一成本,需要使用分层存储。分层存储可以将积压工作中较旧的邮件从簿记员移动到较便宜的存储。这意味着客户端可以访问旧的积压。

Schema Registry

在Apache Pulsar中,类型安全在生产者和消费者之间的通信中至关重要。为了信息安全,pulsar采用了两种基本方法:

客户端方法

在这种方法中,消息生产者和消费者不仅要负责序列化和反序列化消息(由原始字节组成),还要“知道”哪些类型通过哪些主题传输。

服务器端方法

在这种方法中,生产者和消费者通知系统哪些数据类型可以通过主题传输。通过这种方法,消息传递系统强制执行类型安全,并确保生产者和消费者保持同步。

schemas原理

Pulsar模式在主题级别得到应用和实施。生产者和消费者上传模式脉冲星被要求。

脉冲星模式包括:

  • Name:Name是应用架构的主题
  • 有效负载:模式的二进制表示
  • 作为字符串/字符串映射的用户定义属性

它支持以下架构格式:

  • JSON
  • Protobuf
  • Avro
  • 字符串(用于UTF-8编码行)

如果没有定义模式,生产者和消费者将处理原始字节。

Apache Pulsar的优缺点

优点:

  • 功能丰富–持久性/非持久性主题
  • 多租户技术
  • 更灵活的客户端API-包括CompletableFutures、fluent接口
  • Java客户机到目前为止还没有Java文档。

缺点:

  • 社区基础小。
  • 读者无法阅读主题的最后一条信息[需要浏览所有单词]
  • 更高的操作复杂性–ZooKeeper+代理节点+BookKeeper+所有群集节点。
  • Java客户端组件是线程安全的—使用者可以确认来自不同线程的消息

Apache Pulsar多层体系结构

Apache Pulsar终极指南–流处理平台

Kafka的缺点

  • 高延迟
  • 可扩展性差
  • 难以支持全球架构(由pulsar在地理复制的帮助下完成)
  • 高运营成本(运营支出)

Apache Pulsar比Kafka强多少?

1. 与Kafka相比,Pulsar在bot延迟和吞吐量方面有了显著的改善。Pulsar的速度大约是Kafka的2.5倍,滞后时间比Kafka少40%。

2. 在许多场景中,Kafka已经表明,即使数据量不大,当有数千个主题和分区时,它也不会很好地运行。幸运的是,Pulsar的设计是为部署在一个集群中的数十万个项目提供服务。

3. Kafka将数据和日志存储在专用文件和目录(代理)中,这会在扩展时产生问题(文件会定期加载到磁盘)。相比之下,在pulsar的情况下,缩放是毫不费力的,因为pulsar有无状态代理,这意味着缩放不是火箭科学,pulsar使用博彩公司来存储数据。

4. Kafka经纪人的目的是在一个单一的网络提供地区合作。因此,使用多数据中心体系结构并非易事。然而,pulsar提供地理复制,用户可以轻松地在任意数量的集群间同步或异步复制数据。

5. 多租户是一个非常有用的特性,因为它提供了不同类型的特定于特定客户机或组织需求的已定义租户。在外行语言中,这就像描述一组属性,以便每个特定属性满足使用它的特定客户/消费者组的需要。

尽管看起来Kafka落后于pulsar,但kip(Kafka改进建议)的讨论中几乎涵盖了所有这些缺点,用户可以希望看到即将推出的Kafka版本中的变化。

Kafka到Pulsar–用户可以轻松地从Kafka迁移到Pulsar,因为Pulsar本机支持通过提供的连接器直接使用Kafka数据,或者用户可以非常轻松地将Kafka应用程序数据导入Pulsar。

Pulsar SQL使用Presto查询积压工作中保存的旧消息(apache book keeper)

结论

Apache Pulsar是一个强大的流处理平台,能够从以前的现有系统中学习。它有一个分层的体系结构,并辅之以大量现成的功能,如多租户、零重新平衡停机时间、地理复制、代理和持久性以及基于TLS的身份验证/授权。与其他平台相比,pulsar可以为您提供具有更多功能的终极工具。

原文地址:https://www.xenonstack.com/blog/apache-pulsar/

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1960.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册