精华内容
下载资源
问答
  • pulsar
    2021-08-02 17:31:28

    这两年 Pulsar 发展比较快,有好多大公司引入了 Pulsar,相关的资料和课程也多了,今天一起来了解一下 Pulsar 这款中间件。

    下图是几款消息中间件的历史:

    图片

    2012年 Pulsar 在 Yahoo 内部开发,2016 年开源并捐献给 Apache,2018 成为 Apache 顶级项目。

    1. 架构

    Pulsar 的架构图如下:

    图片

    总结一下,Pulsar 有下面的几个特性。

    1.1 计算存储分离

    Pulsar 采用计算和存储相分离的架构,Broker 集群负责把 producer 发出的消息发送给 consumer,同时承担负载均衡的作用。

    Pulsar 用 Apache BookKeeper 作为持久化存储,Broker 持有 BookKeeper client,把未确认的消息发送到 BookKeeper 进行保存。

    BookKeeper 是一个分布式的 WAL(Write Ahead Log)系统,Pulsar 使用 BookKeeper 有下面几个便利:

    • 可以为 topic 创建多个 ledgers:ledger 是一个只追加的数据结构,并且只有一个 writer,这个 writer 负责多个 BookKeeper 存储节点(就是 Bookies)的写入。Ledger 的条目会被复制到多个 bookies;

    • Broker 可以创建、关闭和删除 Ledger,也可以追加内容到 Ledger;

    • Ledger 被关闭后,只能以只读状态打开,除非要明确地写数据或者是因为 writer挂掉导致的关闭;

    • Ledger 只能有 writer 这一个进程写入,这样写入不会有冲突,所以写入效率很高。如果 writer 挂了,Ledger 会启动恢复进程来确定 Ledger 最终状态和最后提交的日志,保证之后所有 Ledger 进程读取到相同的内容;

    • 除了保存消息数据外,还会保存 cursors,也就是消费端订阅消费的位置。这样所有 cursors 消费完一个 Ledger 的消息后这个 Ledger 就可以被删除,这样可以实现 ledgers 的定期翻滚从头写。

    1.2 节点对等

    从架构图可以看出,broker 节点不保存数据,所有 broker 节点都是对等的。如果一个 broker 宕机了,不会丢失任何数据,只需要把它服务的 topic 迁移到一个新的 broker 上就行。

    broker 的 topic 拥有多个逻辑分区,同时每个分区又有多个 segment。

    writer 写数据时,首先会选择 Bookies,比如图中的 segment1。选择了 Bookie1、Bookie2、Bookie4,然后并发地写下去。这样这 3 个节点并没有主从关系,协调完全依赖于 writer,因此它们也是对等的。

    1.3 扩展和扩容

    在遇到双十一等大流量的场景时,必须增加 consumer。

    这时因为 broker 不存储任何数据,可以方便的增加 broker。broker 集群会有一个或多个 broker 做消息负载均衡。当新的broker 加入后,流量会自动从压力大的 broker 上迁移过来。

    对于 BookKeeper,如果对存储要求变高,比如之前存储 2 个副本现在需要存储 4 个副本,这时可以单独扩展 bookies 而不用考虑 broker。因为节点对等,之前节点的 segment 又堆放整齐,加入新节点并不用搬移数据。writer 会感知新的节点并优先选择使用。

    1.4 容错机制

    对于 broker,因为不保存任何数据,如果节点宕机了就相当于客户端断开,重新连接其他的 broker 就可以了。

    对于 BookKeeper,保存了多份副本并且这些副本都是对等的。因为没有主从关系,所以当一个节点宕机后,不用立即恢复。后台有一个线程会检查宕机节点的数据备份进行恢复。

    2. BookKeeper 简介

    从上一节的讲解看出,Apache Bookkeeper 是一个易扩展、高可用、运维简单的分布式存储系统。这节再看一下 Bookkeeper 的其他三个特性。

    2.1 客户端数量

    我们知道,在 Kafka 中,客户端只能从 leader 节点读取数据。但在 BookKeeper 中,客户端可以从任何一个 bookie 副本读取数据,这有三个好处:

    • 增加了读高可用;

    • 把客户端流量平均分配到了不同的 bookie;

    • 可以通过增加客户端数量来提高读取效率。

    客户端和服务器通信采用 Netty 实现异步 I/O。网络 I/O 使用单个 TCP 连接进行多路复用,这就以很少的资源消耗实现了非常高的吞吐量。

    2.3 I/O 隔离

    为什么要做 I/O 隔离?

    在大多数消息系统中,如果 consumer 处理慢,可能会导致消息积压。这迫使存储系统从持久存储介质中读取数据。

    当存储系统 I/O 组件共享写入、追尾读、追赶读的单一路径时,就会出现 I/O 抖动及页面缓存的换入换出。

    写入和追尾读对可预测的低延迟有较高要求,而追赶读则对吞吐量的要求比较高,分离这三个路径很重要。

    在 BookKeeper 中,bookie 使用 3 条独立的 I/O 路径,分别用于写入、追尾读、追赶读。如下图:

    图片

    3. 多租户

    Pulsar 可以使用多租户来管理大集群。Pulsar 的租户可以跨集群分布,每个租户都可以有单独的认证和授权机制。租户也是存储配额、消息 TTL 和隔离策略的管理单元。

    Pulsar 的多租户性质主要体现在 topic 的 URL 中,其结构如下:

    persistent://tenant/namespace/topic

    可以看到,租户是 topic 的最基本单位。

    假如一个公司有三个部门,tenant1、tenant2、tenant3,可以分配三个租户,这三个租户互不干扰。如下图所示:

    图片

    如果消息平台不支持租户,那部门之间想要隔离,就要给每个部门部署一套集群,运维成本非常高。

    4. 消息模型

    4.1 消息结构

    首先看一下 Pulsar 的消息结构,如下图:

    图片

    消息流由多个独立的 segment 组成(这里的 segment 就是上面讲的 ledger)。

    segment 又包含独立的 entry。entry 又由独立的 message 组成(这里的message就是consumer发来的消息)。

    可以看到,一个 message 的 id 组成包括 ledger-id、entry-id、batch-index、partition-index。

    需要注意两点:

    • segment 和 entry 都是 BookKeeper 里面的概念;

    • Pulsar 作为消息平台时,一个 message 就是一个 entry。当 Pulsar 作为流平台时,为了提高吞吐量会开启 batch,这样多个 message 组成一个 entry。

    4.2 创建过程

    消息的创建过程如下图:

    图片

    消息创建后主要经历下面几步:

    1. 选择一个 partition;

    2. 发送到管理这个 partition 的 broker;

    3. broker 将消息并发的发送给 N 个 bookie,这个 N 是可以配置的。broker 持有BookKeeper 的客户端,也就是 writer,writer 收到写请求后,会并发地写入 N 个 bookie。上图中 N=3;

    4. bookie 写完消息后会给 broker 一个回复,broker 收到指定数量的确认消息后就会认为写 BookKeeper 成功。这个数量是这个配置的,比如M。M 越大,写 BookKeeper 延迟越大,数据一致性越高。因此这个配置要对一致性和延迟到进行。

    5 消费模型

    5.1 概要

    Pulsar 的消费模型如下图:

    图片

    producer 将消息发送给 topic,topic 下有多个 partition,partition 下面又有多个broker。

    broker 负责接收消息并把消息分配给给 consumer,并把消息写到 BookKeeper。

    broker还具有限流功能,可以根据限流阈值对producer的消息进行限流。

    consumer 并不能直接从 broker 中获取消息,consumer 和 broker 之间有一个  Subscription。Consumer 通过 Subscription 获取消息。

    5.2 subscription

    subscription 有 4 种类型:

    1. 独占模式(Exclusive)

    同一 个topic 只能有一个消费者,如果多个消费者,就会出错。

    2. 灾备模式(Failover)

    同一个 topic 可以有多个消费者,但是只能有一个消费者消费。

    其他消费者作为故障转移备用。如果当前消费者出了故障,就从备用消费者中选择一个进行消费。

    如下图:

    图片

    3. 共享模式(Shared)

    同一个 topic 可以由多个消费者订阅和消费。消息通过 round robin 轮询机制分发给不同的消费者,并且每个消息仅会被分发给一个消费者。当消费者断开,发送给它的没有被消费的消息还会被重新分发给其它存活的消费者。如下图:

    图片

    4. Key_Shared

    消息和消费者都会绑定一个 key,消息只会发送给绑定同一个 key 的消费者。如果有新消费者建立连接或者有消费者断开连接,就需要更新一些消息的 key。如下图:

    图片

    跟 Shared 模式相比,Key_Shared 的好处是既可以让消费者并发地消费消息,又能保证同一Key下的消息顺序。

    5.3 Cursor

    当多个 consumer 订阅同一个 topic 时,subscription 为每一个 consumer 分配一个 Cursor,这样多个 Consumer 之间就不会相互影响了。如下图:

    图片

    subscription 会维护一个消息的 ACK 状态,consumer 处理完消息后会给 broker 返回 ACK,表示消息已经处理完成。如果 broker 一直没有收到 ACK,就会把消息发送到其他 consumer。

    如果客户端想要重新消费 Cursor 以前的消息,Cursor 是支持 reset 的。reset 之后, Cursor 就回退回去了,这时 consumer 可以从新的 Cursor 位置进行消费。

    Cursor 的位置是会实时写入 BookKeeper 的,这必定会有一定的性能损耗。因此,Pulsar 提供了一种非持久化的 Subscription(Non-durable Exclusive)。Pulsar 的Reader 接口内嵌了 Non—durable Exclusive Cursor,它读取消息不会返回 ACK。

    6. broker 代理

    通过前面的讲解可以看到,consumer 和 producer 只需要跟 broker 进行交互,而不用跟底层的 BookKeeper 交互。

    事实上,broker 还有一层代理,consumer 和 producer 直接跟代理进行交互。如下图:

    图片

    7. Zookeeper

    Pulsar 提供了 System topic 用来保存策略之类的元数据,尽量减少对 ZooKeeper 的依赖。

    ZooKeeper 也保存一些策略相关的元数据,还保存了 broker 和 BookKeeper 集群相关的配置元数据,比如服务发现相关的元数据。

    8. 总结

    Pulsar 是一款非常优秀的中间件,实现了计算和存储相分离,支持多租户、扩展和扩容、容错都是非常容易的。

    更多相关内容
  • Pulsar Flink连接器使用和实现弹性数据处理。 有关中文文档的详细信息,请参见。 先决条件 Java 8或更高版本 Flink 1.9.0或更高版本 Pulsar 2.4.0或更高版本 基本信息 本节介绍有关Pulsar Flink连接器的基本信息。 ...
  • Apache Pulsar Go客户端库 项目的Go客户端库。 目标 该项目正在开发不依赖于C ++ Pulsar库的Pulsar的pure-Go客户端库。 一旦达到功能奇偶性和稳定性,它将取代当前基于CGo的库。 要求 转到1.11+ 状态 检查位于的...
  • DotPulsar完全用C#编写,并实现了Apache Pulsar的。 其他选择是使用(这是和)或在之上构建。 我们决定实施二进制协议来获得完全控制并最大程度地提高可移植性和性能。 DotPulsar的API受Apache Pulsar的官方强烈...
  • Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性...
  • Pulsar Summit Asia 2021(PPT汇总),共包含以下17份文档: Apache InLong 借助 Pulsar 打造一站式数据集成平台.pptx Apache Pulsar 2.9 版本新特性讲解.pptx Apache Pulsar with MQTT for Edge Computing.pdf ...
  • pulsar-client-dotnet欢迎捐款! 支持的脉冲星团版本: 2.4+ 在文件夹中找到用法。 我们正在尝试使api与Java客户端相似,因此请查看 以了解可用的可用选项。 您也可以加入电报聊天进行进一步的讨论。 功能列表(来自...
  • go-pulsar是一个客户库。 发展状况 Α。 脉冲星仍在大力发展中。 某些功能已知已损坏,丢失或不完整。 接口也可能会更改。 去做 分区主题功能 有效负载压缩 未执行的命令 错误处理 如何建造 脉冲客户 pulsar-client...
  • Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性...
  • Apache Pulsar Grafana仪表板 Grafana仪表板docker映像可从。 要使用此仪表板图像,请提供以下环境变量: PULSAR_PROMETHEUS_URL :指向您的普罗米修斯服务的HTTP URL。 例如, http://<prometheus>:9090 。 PULSAR_...
  • 分享 Apache Pulsar 在 BIGO 的最佳实践,包括选型 Apache Pulsar 原因、最佳实践、遇到的坑以及如何解决,对大家会有一定参考和帮助。
  • Pulsar 工具、集成和资源的精选列表。 如果你想贡献,请阅读。 客户 客户是根据ASF开发的。 其他客户: 去 Ruby ( ) 锈 Scala 。网 脉冲星客户端dotnet 点脉冲星 数据处理 Pulsar Flink 集成: Flink 1.9+ ...
  • 本资源为实战搭建pulsar分布式队列,最低需求6台服务器,3台搭建zookeeper集群,另外3台分别作为pulsar注册中心、消费者、提供者。
  • 函数流函数流是一个基于Apache Pulsar的分布式事件驱动应用开发平台。 目标是促进用户开发流媒体应用程序。 Function Stream 基于 pulsar 函数提供的现有特性,为分布式事件驱动应用的开发提供了更多便利。 用户可以...
  • Pulsar 项目包含一个 Pulsar C++ 客户端库的包装器。 相比之下,这个库是 100% Go(不需要 cgo)。 在 Go 标准库之外,它对库有一个单一的依赖。 状态和目标 地位 该客户端尚在开发中,因此不支持所有 Pulsar 功能。...
  • 1.添加Maven依赖< dependency> < groupId>io.github.majusko</ groupId> < artifactId>pulsar-java-spring-boot-starter</ artifactId> ${version}</ version></ dependency>2.配置生产者与您要注册的所有生产者一起...
  • Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性...
  • 脉冲星检查器连接器安装Pulsar k8s集群在Linux上,可以使用Microk8。 Minikube是另一个受欢迎的选择在Ubuntu 20.10上安装Microk8s sudo snap install --classic microk8ssudo usermod -a -G microk8s $USER# logout ...
  • 普法尔河畔卡夫卡(aka KoP) KoP(Pulsar上的Kafka)通过在Pulsar代理上引入Kafka协议处理程序,将本地Apache Kafka协议支持带到Apache Pulsar。 通过将KoP协议处理程序添加到现有的Pulsar集群,您现在可以将现有的...
  • 这是不依赖于C ++ Pulsar库的Apache Pulsar的纯Rust客户端。 它提供了一个基于异步/等待的API,与Tokio和async-std兼容。 适用于Apache Pulsar文档的基于Pulsar基于Future的Rust客户端,这是不依赖于C ++ Pulsar库的...
  • Pulsar快速上手

    2021-06-14 06:37:44
    本课程系统讲解Apache Pulsar从原理到使用最后到开发整个学习过程。Pulsar原理,包括:背景、工作原理、订阅模;Pulsar使用方式,包括:3种使用方式(图形界面/命令行/SDK);Pulsar客户端开发:包括:独占Exclusive...
  • Pulsar是具有非常灵活的消息传递模型和直观的客户端API的分布式pub-sub消息传递平台。 在了解有关Pulsar的更多信息 主要特点 水平可扩展(每秒数百万个独立主题和数百万条消息发布) 强大的订购和一致性保证 低...
  • Apache Pulsar是一个企业级的分布式消息系统,最初由Yahoo开发并在2016年开源,目前正在Apache基金会下孵化。Plusar已经在Yahoo的生产环境使用了三年多,主要服务于Mail、Finance、Sports、 Flickr、 the Gemini Ads...
  • 包含datahike API和datahike-pulsar命名空间后,您可以使用关键字:pulsar来使用此事务处理程序后端 ( d/connect { :transactor { :backend :pulsar ; Required :subscription-id " datahike-instance-1 " ; ...
  • pulsar2.8.1.zip

    2021-10-27 11:18:35
    docker-compose安装pulsar集群本地测试环境,一键全搞定
  • Alfred Pulsar通知RestAPI 这是尝试在Apache Pulsar之上建立可自定义的通知服务,并希望通过FastAPI设置API。 依存关系 Docker容器运行Pulsar: docker run -it \ -p 6650:6650 \ -p 8080:8080 \ --mount ...
  • 美国模拟器件公司在马萨诸塞州诺伍德市(NORWOOD, Mass.)发布使用其最新的精密PulSAR:registered:模数转换器(ADC)大幅度降低了医学和工业电子设备的功耗。ADI公司的AD7980 1 MSPS(每秒百万次采样)、16 bit ADC...
  • pulsar_cpp 介绍在金融行业工作,总是需要编写能够实现低延迟、高性能特性的软件。 LMAX 破坏者是一项 Java 技术,该技术已引起该领域开发人员的极大兴趣。 Pulsar 不是破坏者的端口,而是试图提供一个原生的 C++11 ...
  • 资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:pulsar_client-2.9.1-cp38-cp38-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,849
精华内容 3,139
关键字:

pulsar