Pulsar_01_基本介绍
文章目录
- 1.Apache Pulsar基本介
- 1.1 多租户模式
- 1,2 消息系统
- 1.3 云原生架构
- 1.4 分片流
- 1.5 跨域复制
- 2.Pulsar组件介绍
- 2.1 层级存储
- 2.2 pulsar IO(Connect) 连接器
- 2.3 Pulsar Funcations(轻量级计算框架)
- 3.Pulsar和Kafka的对比
1.Apache Pulsar基本介
Apache Pulsar 是一个云原生企业级的发布订阅(pub-sub)消息系统,最初由Yahoo开发,并于2016年底开源,现在是
Apache软件基金会顶级开源项目。Pulsar在Yahoo的生产环境运行了三年多,助力Yahoo的主要应用,如Yahoo Mail、
Yahoo Finance、Yahoo Sports、Flickr、Gemini广告平台和Yahoo分布式键值存储系统Sherpa。
功能与特性:
- 多租户
- 灵活的消息系统
- 云原生架构
- segmented stream 分片流
- 支持跨域复制
1.1 多租户模式
- 租户和命名空间(namespace)是 Pulsar 支持多租户的两个核心概念。
- 在租户级别,Pulsar 为特定的租户预留合适的存储空间、应用授权与认证机制。
- 在命名空间级别,Pulsar 有一系列的配置策略(policy),包括存储配额、流控、消息过期策略和命名空间之
间的隔离策略
pulsar -> tenant 多组户 -> namespace 命名空间 -> topic
1,2 消息系统
- Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、
队列等方式计算不同的订阅模型大大提升了灵活度。 - 同时pulsar通过事务采用Exactly-Once(精准一次)在进行消息传输过程中, 可以确保数据不丢不重
1.3 云原生架构
lsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部。上层是无状态 Broker ,复制消息分发和服务;下层是持久化的存储层 Bookie 集群。Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复。
1.zk集群 2.Broker集群 3.BookKeeper集群
1.4 分片流
Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储(tiered storage)、BookKeeper 集群和Broker 节点上,而对外提供一个统一的、无界数据的视图。其次,不需要用户显式迁移数据,减少存储成本并保持近似无限的存储。
segment 分流 -> broker
1.5 跨域复制
Pulsar 中的跨地域复制是将 Pulsar 中持久化的消息在多个集群间备份。在 Pulsar 2.4.0 中新增了复制订阅模式(Replicated-ubscriptions),在某个集群失效情况下,该功能可以在其他集群恢复消费者的消费状态,从而达到热备模式下消息服务的高可用。
复制订阅模式
-> 热备的高可用
2.Pulsar组件介绍
2.1 层级存储
- Infinite Stream: 以流的方式永久保存原始数据
- 分区的容量不再受限制
- 充分利⽤云存储或现有的廉价存储 ( 例如 HDFS)
- 数据统⼀表征:客户端无需关心数据究竟存储在哪⾥
2.2 pulsar IO(Connect) 连接器
- Pulsar IO 分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过 Source 实现数据输入。输出代表数据要往哪里去,通过 Sink 实现数据输出。
- Pulsar 提出了 Connector (也称为 Pulsar IO),用于解决 Pulsar 与周边系统的集成问题,帮助用户高效完成工作。
- 目前 pulsar IO 支持非常多的连接集成操作: 例如HDFS 、Spark、Flink 、Flume 、ES 、HBase等
2.3 Pulsar Funcations(轻量级计算框架)
- Pulsar Functions 是一个轻量级的计算框架,可以给用户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。Pulsar Functions 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充
- Pulsar Functions 的设计灵感来自于 Heron 这样的流处理引擎,Pulsar Functions 将会拓展 Pulsar 和整个消息领域的未来。使用 Pulsar Functions,用户可以轻松地部署和管理 function,通过 function 从 Pulsartopic 读取数据或者生产新数据到 Pulsar topic
3.Pulsar和Kafka的对比
- 模型概念
– Kafka: Producer - topic - consumer group - consumer
– Pulsar: Poducer - topiic - subscription - consumer
- 消息消费模式
– Kafka: 主要集中在流(Stream) 模式, 对单个partition是独占消费, 没有共享(Queue)的消费模式
– Pulsar: 提供了统一的消息模型和API. 流(Stream) 模式 – 独占和故障切换订阅方式 ; 队列(Queue)模式 – 共享订阅的方式 - 消息确认ack
– Kafka: 使用偏移量 offset
– Pulsar: 使用专门的cursor管理. 累积确认和kafka效果一样; 提供单条或选择性确认 - 消息保留
– Kafka: 根据设置的保留期来删除消息, 有可能消息没被消费, 过期后被删除, 不支持TTL
– Pulsar: 消息只有被所有订阅消费后才会删除, 不会丢失数据,. 也运行设置保留期, 保留被消费的数据 . 支持TT
Apache Kafka和Apache Pulsar都有类似的消息概念。 客户端通过主题与消息系统进行交互。 每个主题都可以分为多个分区。 然而,Apache Pulsar和Apache Kafka之间的根本区别在于Apache Kafka是以分区为存储中心,而Apache Pulsar是以Segment为存储中心。
对比总结:
Apache Pulsar将高性能的流(Apache Kafka所追求的)和灵活的传统队列(RabbitMQ所追求的)结合到一个统一的消息模型和API中。 Pulsar使用统一的API为用户提供一个支持流和队列的系统,且具有同样的高性能。
性能比较:
Pulsar 表现最出色的就是性能,Pulsar 的速度比 Kafka 快得多。
kafka目前存在的痛点:
- Kafka 很难进行扩展,因为 Kafka 把消息持久化在 broker 中,迁移主题分区时,需要把分区的数据完全复制到其他 broker 中,这个操作非常耗时。
- 当需要通过更改分区大小以获得更多的存储空间时,会与消息索引产生冲突,打乱消息顺序。因此,如果用户需要保证消息的顺序,Kafka 就变得非常棘手了。
- 如果分区副本不处于 ISR(同步)状态,那么 leader 选取可能会紊乱。一般地,当原始主分区出现故障时,应该有一个 ISR 副本被征用,但是这点并不能完全保证。若在设置中并未规定只有 ISR 副本可被选为 leader 时,选出一个处于非同步状态的副本做 leader,这比没有 broker 服务该 partition的情况更糟糕。
- 使用 Kafka 时,你需要根据现有的情况并充分考虑未来的增量计划,规划 broker、主题、分区和副本的数量,才能避免 Kafka 扩展导致的问题。这是理想状况,实际情况很难规划,不可避免会出现扩展需求。
- Kafka 集群的分区再均衡会影响相关生产者和消费者的性能。
- 发生故障时,Kafka 主题无法保证消息的完整性(特别是遇到第 3 点中的情况,需要扩展时极有可能丢失消息)。
- 使用 Kafka 需要和 offset 打交道,这点让人很头痛,因为 broker 并不维护 consumer 的消费状态。
- 如果使用率很高,则必须尽快删除旧消息,否则就会出现磁盘空间不够用的问题。
- 众所周知,Kafka 原生的跨地域复制机制(MirrorMaker)有问题,即使只在两个数据中心也无法正常使用跨地域复制。因此,甚至 Uber 都不得不创建另一套解决方案来解决这个问题,并将其称为 uReplicator (https://eng.uber.com/ureplicator/)。
- 要想进行实时数据分析,就不得不选用第三方工具,如 Apache Storm、Apache Heron 或 Apache Spark。同时,你需要确保这些第三方工具足以支撑传入的流量。
- Kafka 没有原生的多租户功能来实现租户的完全隔离,它是通过使用主题授权等安全功能来完成的。
Pulsar_01_基本介绍相关推荐
- 简单介绍互联网领域选择与营销方法
在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...
- 常用开源协议介绍以及开源软件规范列表
1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...
- python:Json模块dumps、loads、dump、load介绍
20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...
- pytorch学习笔记(九):PyTorch结构介绍
PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...
- Python字节码介绍
了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...
- Pytest - 使用介绍
1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...
- 遗传算法的简单介绍以及模式定理的简单证明
遗传算法 遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...
- k8s核心组件详细介绍教程(配超详细实例演示)
本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...
- Tensorrt一些优化技术介绍
Tensorrt一些优化技术介绍 Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a ...
最新文章
- Android新浪微博登陆和获取个人信息
- 实现定时中断_EPIT 定时器,仅需做到如下几步,即可轻松配置使用
- P7520-[省选联考 2021 A 卷]支配
- 能在手机播放的Flash代码
- pycharm中的常用快捷键与常用设置
- Delphi单元文件引用名称问题
- jquey控制元素滚动条,外层div滚动,内层顶部div固定不动
- live555 RTSP服务器建立及消息处理流程
- 米思齐MT1637简单显示字符串和时间
- pyqt html编辑器,PyQt笔记——代码编辑器Scintilla的使用方法
- 计算机音乐模式怎么设置,电脑开机时自启QQ音乐APP播放歌曲的功能在哪里设置...
- 紫微斗数飞星派排盘批处理
- 转:稻盛和夫:在软弱的领导人手下工作,是可悲的
- 盒子装载图片时出现的盒子比图片实际偏高的问题
- 建议收藏!这10个学习编程的小技巧,万人点赞!
- python QRcode
- max std value 宏_新药临床试验统计分析中计量资料的SAS宏实现
- 88道BAT Java面试题 助你跳槽BAT,轻松应对面试官的灵魂拷问
- 漫谈程序员系列 请区别对待女程序员
- 采集微信公众号文章只需几步(非搜狗微信)
热门文章
- Mac:php浏览器只显示源码
- 论文阅读——ssFPN
- 电脑华硕笔记本,华硕笔记本怎么样有哪些型号?哪个系列性价比高?
- [机缘参悟-41]:鬼谷子-第五飞箝篇 - 通过钩箝之术考察一个人的人品和才能与黑暗森林法则
- RabbitMQ——RabbitMQ搭建及问题
- 如何做好区块链手机钱包app软件开发?
- 4.Unity2D 横版 帧事件+攻击判定+冲砍挑飞+更真实的打击
- 根据端口号查找相应PID,从而在任务管理器中结束或查看相应进程
- win7安装mysql5.7.16后,执行update语句导致mysql服务停止
- CNC:CNC计算机数控系统技术之常见机床、CNC各部分、CNC编程软件之详细攻略