Apache Pulsar

    • exactly-once
  • 高可用、高扩展性、易运维
  • 支持跨地域复制

|-----------|--------------------------------------------------------|--------------------------------------------------------|
| | Kafka | Pulsar |
| 模型概念 | producer->topic->consumer group -> consumer | producer->topic->subscription->consumer |
| 消息消费模式 | 主要集中在流(Stream) 模式, 对单个partition是独占消费, 没有共享(Queue)的消费模式 | 主要集中在流(Stream) 模式, 对单个partition是独占消费, 没有共享(Queue)的消费模式 |
| 消息确认(ack) | 使用offset | 使用专门的cursor管理。累积确认和kafka效果一样; 提供单条或选择性确认 |
| 消息保留 | 根据设置的保留期来删除消息, 有可能消息没被消费, 过期后被删除。 | 消息只有被所有订阅消费后才会删除, 不会丢失数据,也运行设置保留期, 保留被消费的数据。 |

Pulsar消息发送、消费架构概述-鸿蒙开发者社区-51CTO.COM

从12个方面详细解读Pulsar的主题与订阅-鸿蒙开发者社区-51CTO.COM

1. Topic

1.1 NameSpace

1.2 Subscription Types

1.2.1 独占模式(Exclusive)
1.2.2 主备/故障转移模式(Failover)
1.2.3 共享/轮询模式(Shared)
1.2.4 基于Key的共享模式(Key_Shared)

Apache Kafka和Apache Pulsar都有类似的消息概念。客户端°通过主题与消息系统进行交互。每个主题都可以分为多个分区。然而,Apache Pulsar和Apache Kafka之间的根本区别在于ApacheKafka是以分区为存储中心,而Apache Pulsar是以Segment为存储中心。

Pulsar使用分层结构,将存储机制与broker隔离开来。此体系结构为Pulsar提供以下好处:

1、独立扩展broker,负责处理Producer发来的消息并分发给消费者。通过一个全局的ZK集群来处理多种协作式任务,例如说基于地理位置的复制。并将消息存储到BookKeeper中,同时单个集群内也需要有一套ZK集群,来存储一些元数据。

2、独立扩展存储(Bookies)

3、更容易容器化Zookeeper, Broker and Bookies

4、ZooKeeper提供集群的配置和状态存储

亮点如下:

1、负载均衡器:Pulsar内置负载均衡器,可在内部将负载分配给所有broker

2、服务发现:Pulsar具有内置的服务发现功能,可以识别在何处以及如何连接到broker。

3、全局复制器:可以在为同一个命名空间配置的N个borker之间复制数据。

4、全局ZK:全局ZK用于实现跨地域复制

其中,BookKeeper可以理解为一个NoSQL的存储系统,默认使用RockDB存储索引数据。

一个批次中所有消息被确认后会删除。那pulsar是如何支持消息回溯的呢?

Pulsar支持消息消费重试,消费者在消费消息的过程中如果处理失败,可以将这些消息存储在消费者对应的重试主题中,以便后续再次重新消费,消费者会自动订阅重试主题。达到最大消费重试次数后如果还是失败,则会将消息存储在死信队列,死信队列中的消息需要人工手动去处理。

性能对比:

Pulsar表现最出色的就是性能,Pulsar的速度比Kafka 快得多,美国德克萨斯州一家名为GigaOm (logo)的技术研究和分析公司对Kafka和Pulsar的性能做了比较,并证实了这一点。

扩展说明: kafka目前存在的痛点

  1. Kafka很难进行扩展,因为Kafka把消息持久化在 broker中,迁移主题分区时,需要把分区的数据完全复制到其他 broker 中,这个操作非常耗时。

  2. 当需要通过更改分区大小以获得更多的存储空间时,会与消息索引产生冲突,打乱消息顺序。因此,如果用户需要保证消息的顺序,Kafka就变得非常棘手了。

  3. 如果分区副本Q不处于ISR(同步)状态,那么leader选取可能会紊乱。一般地,当原始主分区出现故障时,应该有一个ISR副本被征用,但是这点并不能完全保证。若在设置中并未规定只有ISR副本可被选为leader时,选出一个处于非同步状态的副本做leader,这比没有broker服务该partition的情况更糟糕。

  4. 使用Kafka时,你需要根据现有的情况并充分考虑未来的增量计划,规划 broker、主题、分区和副本的数量,才能避免Kafka扩展导致的问题。这是理想状况,实际情况很难规划,不可避免会出现扩展需求。

  5. Kafka 集群的分区再均衡会影响相关生产者和消费者的性能。

  6. 发生故障时,Kafka 主题无法保证消息的完整性(特别是遇到第3点中的情况,需要扩展时极有可能丢失消息)。

  7. 使用Kafka 需要和offset打交道,这点让人很头痛,因为 broker并不维护consumer的消费状态。

  8. 如果使用率很高,则必须尽快删除旧消息,否则就会出现磁盘空间-不够用的问题。

  9. 众所周知,Kafka原生的跨地域复制机制(MirrorMaker)有问题,即使只在两个数据中心也无法正常使用跨地域复制。因此,甚至Uber都不得不创建另一套解决方案来解决这个问题,并将其称为uReplicator (eng.uber.com/ureplicato...)。

  10. 要想进行实时数据分析,就不得不选用第三方工具,如Apache Storm、Apache Heron或Apache Spark。同时,你需要确保这些第三方工具足以支撑传入的流量。

  11. Kafka没有原生的多租户功能来实现租户的完全隔离,它是通过使用主题授权等安全功能来完成的。

  12. 从消息队列走向发布与订阅(Pub/Sub)

  • 不存储、不保留、不管消费状态
  • 阅后即焚:发布一条、消费一条、删除一条

Message Broker 分区 分而治之

Kafka的经典与挑战

  • 更加彻底的去中心化
  • 存储计算分离
  • 无状态的Pulsar Broker负责处理生产和消费
  • 存储交给Apache Bookeeper
  • 元数据管理交给ZK

较为复杂的结构提高了使用门槛

  1. Kafka的分区与broker的强耦合问题遭遇Pulsar的"拆解"
  1. Kafka横向扩展的困难遭遇Pulsar的极强的云原生弹性伸缩

场景1:Broker扩缩容问题

相关推荐
JavaPub-rodert18 小时前
Apache Jena 详解:Java 开发者如何真正搭起一套知识图谱与语义服务
java·apache·知识图谱
AOwhisky1 天前
Linux 网络服务架设学习笔记(第五期)——Web 服务(上篇):Apache HTTP Server——从静态到动态
linux·运维·服务器·笔记·学习·云计算·apache
JackSparrow4143 天前
Kafka(七)集成Apache Avro+Apicurio Schema Registry以保障生产者与消费者的消息兼容性
java·中间件·rpc·kafka·apache·avro·schema-registry
智码看视界3 天前
SenseNova U1.5 Lite 部署实测:8B 单卡跑通 4K 生图,Apache 2.0 免费商用
开源·apache·多模态·图像生成·ai生图·sensenova·商汤大模型
海兰7 天前
【 Kafka进阶5】使用 Docker 部署 Apache Kafka 集群完全指南
docker·kafka·apache
垂钓的小鱼17 天前
用关联图谱做量化选股:让基本面惊喜沿着网络扩散
服务器·php·apache
深维AI随笔8 天前
《构建之法》| 第二章个人技术和流程:单元测试不是“可选“,而是“必需“
单元测试·log4j·apache
极客灵风8 天前
免费约课小程序免费约课系统的区别,一文看懂怎么选
apache
xixiaoyunya8 天前
中小微企业轻量组网方案的技术选型与实践:从传统专线到软定义隧道的成本与效能分析
服务器·php·apache
SelectDB技术团队8 天前
四川航空湖仓一体:基于 SelectDB / Apache Doris 的多源数据联邦分析实践
apache