暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

下一代消息中间件Pulsar基础介绍

IT那活儿 2024-11-18
182

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!


Pulsar简介

Apache Pulsar 是 Apache 软件基金会下的一个顶级项目,是下一代云原生分布式消息流平台。该系统最初源于 Yahoo,并于2016年底开源,2018 年成为 Apache 软件基金会顶级项目。
1.1 Pulsar特点
Pulsar作为下一代云原生分布式消息流平台,具有以下特点:
  • 多租户支持

    Pulsar支持多租户,每个租户可以单独设置认证机制、存储配额、隔离策略等。

  • 高吞吐与低延迟

    Pulsar通过分区Topic和计算存储分离的设计,实现了高吞吐和低延迟的消息传递。

  • 持久化存储

    支持数据持久化存储,确保消息不丢失。同时,支持数据分层式存储,可将数据从热/温存储卸载到冷/长期存储。

  • 多集群部署与数据复制

    原生支持多集群部署,集群间支持无缝的数据复制(Geo-replication),可以实现跨地域的消息传递和消费。

  • 高扩展性

    可无缝扩展至上百万个Topic,支持多种topic订阅模式(独占/共享/故障转移)。

  • 多语言客户端

    支持多种编程语言客户端,如Java、Go、Python和C++等。
1.2 Pulsar架构原理
在最高级别上,单个 Pulsar 实例由一个或多个 Pulsar 集群组成,同一实例中的集群之间可以相互复制数据。
单个 Pulsar 集群主要由以下三部分组成:
1)Broker
负责处理和负载均衡生产者发出的消息,并将这些消息分派给消费者。
与配置存储交互以处理相应的任务,并将消息存储在 BookKeeper 实例中。
依赖 ZooKeeper 集群处理特定的任务,如配置管理和协调。

主要运行两个服务组件:

  • HTTP服务(监听8080端口,提供REST API供管理员管理集群和进行主题查询);
  • TCP服务(监听6650端口,处理所有数据的传输)。
2)BookKeeper 集群
由一个或多个 BookKeeper 实例(又称 bookies)组成,负责消息的持久化存储。
BookKeeper 是一个分布式的预写日志(WAL)系统,提供高效的顺序数据存储,确保消息的一致性和可靠性。
3)ZooKeeper 集群
用来处理集群级别的配置和协调任务,如集群配置管理、主题信息、活跃的 Broker 列表等。
在更大的实例层面,有一个叫做配置存储的 ZooKeeper 集群,能访问到全部实例,负责处理多集群间的协调任务,如异地复制。
Pulsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部。
  • 上层是无状态 Broker,复制消息分发和服务;
  • 下层是持久化的存储Bookie 集群。
Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复。

Pulsar的订阅模式

Pulsar支持多种消息订阅模式,包括:
  • 独占(exclusive)
    一个订阅只与一个消费者关联,只有这个消费者能接收到Topic的全部消息
  • 共享(shared)
    一个订阅可以与多个消费者关联,消息通过轮询机制发送给不同的消费者。
  • 灾备(failover)
    类似于独占模式,但允许多个消费者订阅同一个Topic,当主消费者断开连接时,由另一个消费者接替消费。
  • Key共享(key_shared)
    一个订阅可以与多个消费者关联,消息根据给定的映射规则,相同key的消息由同一个消费者消费。
Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、队列等方式计算不同的订阅模型大大提升了灵活度。
同时pulsar通过事务采用Exactly-Once(精准一次)在进行消息传输过程中, 可以确保数据不会丢失不会重复。

数据分区

在Pulsar中,一个主题(Topic)可以被分为多个分区。每个分区是独立的消息队列,具有自己的消息存储和处理机制。分区允许在消息的生产者和消费者之间实现更好的并行处理和负载均衡。
Pulsar提供了几种内置的分区策略,也支持自定义的分区策略。这些策略决定了如何将消息分配到不同的分区。常见的分区策略包括Round Robin(轮询)、Hash(哈希)和Range(范围)等。
  • Hash分区策略
    使用消息内容的哈希值来确定消息属于哪个分区。这种策略有助于确保特定消息始终进入相同的分区,适用于需要保持消息顺序的场景。
  • Round Robin分区策略
    将消息轮流分配到不同的分区,确保消息均匀分布。这种策略适用于不需要保持消息顺序的场景。
  • Range分区策略
    根据消息的键值范围将消息分配到不同的分区。这种策略对于按范围查询消息非常有用。


应用场景

Pulsar广泛应用于事件驱动架构、流数据处理、物联网数据采集、日志聚合和消息队列等领域。

4.1 实时流处理

  • 分布式流处理平台
    Pulsar支持高吞吐量的实时数据流处理,适用于需要实时处理和分析大量数据的场景,如物联网(IoT)、金融交易系统等。
  • 事件驱动架构
    在事件驱动的应用系统中,Pulsar可以将事件消息快速分发到各个订阅者,实现事件的快速响应和处理。

4.2 消息队列

  • 传统消息队列应用场景
    Pulsar支持点对点和发布/订阅两种消息模型,适用于需要异步通信、解耦系统组件、提高系统可伸缩性和可靠性的场景。
  • 微服务架构
    在微服务架构中,Pulsar可以用作不同微服务间的通信中间件,实现服务的解耦和异步调用。

4.3 大数据处理

  • 日志收集和分析
    Pulsar可以作为日志数据的收集和分发中心,将来自不同系统的日志数据集中存储,并供实时分析系统进行处理。
  • DB Binlog增量数据采集
    Pulsar在大数据领域,特别是在DB Binlog增量数据采集、分拣等场景中得到了广泛应用。它可以高效地采集数据库的变化数据,并进行实时处理和分析。
最后,对于想要深入学习Pulsar的开发者,可以参考Apache Pulsar的官方文档、GitHub仓库以及相关的技术博客和教程。这些资源提供了详细的安装指南、API文档、使用案例和最佳实践,有助于开发者快速上手并深入了解Pulsar的特性和应用。
总之,Apache Pulsar作为一个功能强大的云原生分布式消息流平台,具备多租户、高吞吐、低延迟、持久化存储等核心特性,广泛应用于各种场景。对于需要处理大规模消息传递和流数据处理的系统来说,Pulsar是一个值得考虑的选择。

END


本文作者:徐志强(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论