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没有原生的多租户功能来实现租户的完全隔离,它是通过使用主题授权等安全功能来完成的。

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

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

Message Broker 分区 分而治之

Kafka的经典与挑战

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

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

  1. Kafka的分区与broker的强耦合问题遭遇Pulsar的“拆解”

  1. Kafka横向扩展的困难遭遇Pulsar的极强的云原生弹性伸缩

场景1:Broker扩缩容问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值