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扩缩容问题

相关推荐
hwscom5 小时前
如何永久解决Apache Struts文件上传漏洞
java·服务器·struts·web安全·apache
白开水2335 小时前
Apache RocketMQ 5.1.3安装部署文档
apache·rocketmq
s甜甜的学习之旅1 天前
Apache POI练习代码
apache
是小崔啊1 天前
开源轮子 - Apache Common
java·开源·apache
程序猿阿伟1 天前
《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
java·spark-ml·apache
开心工作室_kaic2 天前
springboot461学生成绩分析和弱项辅助系统设计(论文+源码)_kaic
开发语言·数据库·vue.js·php·apache
cr.sheeper2 天前
Vulnhub靶场Apache解析漏洞
网络安全·apache
ccc_9wy3 天前
Apache Solr RCE(CVE-2017-12629)--vulhub
apache·solr·lucene·burp suite·vulhub·远程命令执行漏洞rce·cve-2017-12629
ccc_9wy3 天前
Apache Solr RCE(CVE-2019-0193)--vulhub
网络安全·apache·solr·lucene·vulhub·cve-2019-0193·远程命令执行漏洞rce
casual_clover3 天前
搭建一个简单的Web服务器(Apache2.4)
服务器·apache