Apache Pulsar 介绍


  • administrators

    Apache Pulsar 是灵活的发布-订阅消息系统(Flexible Pub/Sub messaging),采用分层分片架构。

    🔧发布-订阅消息系统
    关于发布-订阅模型的概念,主要从多租户、灵活的消息系统、云原生构架、分片的流(Segmented Streams)等方面来强调 Apache Pulsar 的功能和特性。

    🔧多租户
    租户和命名空间(namespace)是 Pulsar 支持多租户的两个核心概念。

    在租户级别,Pulsar 为特定的租户预留合适的存储空间、应用授权与认证机制。
    在命名空间级别,Pulsar 有一系列的配置策略(policy),包括存储配额、流控、消息过期策略和命名空间之间的隔离策略。
    🔧灵活的消息系统
    Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、队列等方式计算不同的订阅模型大大提升了灵活度。

    🔧云原生架构
    Pulsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部。上层是无状态 Broker,复制消息分发和服务;下层是持久化的存储层 Bookie 集群。Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复。

    🔧Segmented Streams
    Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储(tiered storage)、BookKeeper 集群和 Broker 节点上,而对外提供一个统一的、无界数据的视图。其次,不需要用户显式迁移数据,减少存储成本并保持近似无限的存储。

    0_1573723446637_ecb54887-9031-4a66-8070-c70dbfd41f3c-image.png

    🔧跨地域复制
    Pulsar 中的跨地域复制是将 Pulsar 中持久化的消息在多个集群间备份。在 Pulsar 2.4.0 中新增了复制订阅模式(Replicated-subscriptions),在某个集群失效情况下,该功能可以在其他集群恢复消费者的消费状态,从而达到热备模式下消息服务的高可用。

    🗂层级存储
    层级存储的优势:
    Infinite Stream: 以流的方式永久保存原始数据
    分区的容量不再受限
    充分利⽤云存储或现有的廉价存储 ( 例如 HDFS)
    数据统⼀表征:客户端无需关⼼数据究竟存储在哪⾥

    🗂Pulsar Functions
    Pulsar Functions 是一个轻量级的计算框架,可以给用户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。Pulsar Functions 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充。

    0_1573723494908_e8f4a9fd-69f1-4946-9723-a568bc5b582b-image.png

    🗂Pulsar IO
    Pulsar IO 分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过 Source 实现数据输入。输出代表数据要往哪里去,通过 Sink 实现数据输出。

    0_1573723526210_a5374008-9b6c-4d0b-a066-5bc259d7211d-image.png

    🗂Pulsar 与大数据处理框架的集成

    Spark

    https://github.com/streamnative/pulsar-spark

    自 Spark 2.2 版本 Structured Streaming 正式发布,Spark 只保留了 SparkSession 作为主程序入口,你只需编写 DataSet/DataFrame API 程序,以声明形式对数据的操作,而将具体的查询优化与批流处理执行的细节交由 Spark SQL 引擎进行处理。

    对于一个数据处理作业,需要定义 DataFrame 的产生、变换和写出三个部分,而将 Pulsar 作为流数据平台与 Spark 进行集成正是要解决如何从 Pulsar 中读取数据(Source)和如何向 Pulsar 写出运算结果(Sink)两个问题。

    Flink

    https://github.com/streamnative/pulsar-flink

    Pulsar 能以不同的方式与 Apache Flink 融合,一些可行的融合包括,使用流式连接器(Streaming Connectors)支持流式工作负载,或使用批式源连接器(Batch Source Connectors)支持批式工作负载。

    Pulsar 还提供了对 Schema 的原生支持,可以与 Flink 集成并提供对数据的结构化访问,例如,使用 Flink SQL 在 Pulsar 中查询数据。另外,还能将 Pulsar 作为 Flink 的状态后端。由于 Pulsar 具有分层架构(Apache BookKeeper 支持下的 Streams 和 Segmented Streams),因此可以将 Pulsar 作为存储层并存储 Flink 状态。

    Presto

    Pulsar 使用 Pulsar SQL 查询历史消息,使用 Presto 引擎高效查询 BookKeeper 中的数据。Presto 是用于大数据解决方案的高性能分布式 SQL 查询引擎,可以在单个查询中查询多个数据源的数据。如下是使用 Pulsar SQL 查询的示例。

    0_1573723546376_455cea42-bdd3-4ebe-9444-04375fcf9104-image.png

    批处理是对有界的数据进行处理,通常数据以文件的形式存储在 HDFS 等分布式文件系统中。流处理将数据看作是源源不断的流,流处理系统以发布/订阅方式消费流数据。当前的大数据处理框架,例如 Spark、Flink 在 API 层和执行层正在逐步融合批、流作业的提交与执行,而 Pulsar 由于可以存储无限的流数据,是极佳的统一数据存储平台。

    Pulsar Manager

    https://github.com/apache/pulsar-manager

    此前,Pulsar 已有监控工具 Dashboard ,但它侧重于对 Pulsar 的简单监控(如搜集并展示 Tenants、Namespaces、Topics 和 Subscriptions 等监控信息),无法进行高阶管理(如对 Tenant、Namespace 和 Topic 等进行增加、删除、更新等操作),尤其是集群数量较多时,仅通过命令行工具 pulsar-admin 进行管理,效果却不尽人意,而 Apache Pulsar Manager 正是对这一空白的补充。

    Apache Pulsar Manager 是一个基于网页的 GUI 管理和监控工具,帮助 Pulsar 管理员和用户管理和监控 Tenant、Namespace、Topic、Subscription、Broker 和 Cluster 等,并支持动态配置多种环境。

    Kafka on Pulsar (KoP)

    KoP 是 StreamNative 的一大创新和尝试。StreamNative 通过 KoP 帮助用户不受应用迁移和重写所困扰,高效便捷地帮助用户解决了痛点问题,并开创性地连接了 Pulsar 和 Kafka 两大开源社区。

    Pulsar-io-Kafka

    https://github.com/streamnative/pulsar-io-kafka

    对于实时数据处理中 Kafka 数据的导入,使用 StreamNative 开源的 pulsar-io-kafka 项目,可以把 Kakfa 中的数据读出并写入到 Pulsar 中。