0
点赞
收藏
分享

微信扫一扫

Kafka和Pulsar的比较

witmy 2022-02-08 阅读 80

文章目录

1.架构

1.1 Kafka

在这里插入图片描述
brocker和zk组成

1.2 Pulsar

在这里插入图片描述
Pulsar Broker会在本地缓存消息,并且支持TTL,

Pulsar 通过分层架构, 将计算和存储分离, 存储采用BookKeeper集群, 计算使用Broker集群, Brocker 需要内置BookKeeper 客户端

Pulsar的部署和架构更加复杂,但是也更具有伸缩性。

2.消息存储模型

2.1 Kafka

Kafka采用分区Partition的方式保存topic的。

在这里插入图片描述
每一个topic都会在不同的brocker上保存多个副本, 其中只有一个副本的分区是leader分区, 消费者使用。

如果某个brocker宕机了, 这个brocker 上的leader分区失效, 会重写选举

2.2 Pulsar

Pulsar的消息存储模型采用了分层的方式

在这里插入图片描述
第一层是Topic,用来存储Producer追加的messages,Topic下面是ledger层,保存了分片(Segment),分片里面保存更小粒度的ertries,entries存储一条条的Message。

Bookkeeper中,数据的最小操作单位是Segment。

Ledger中的最后一个分片是最新写入的分片。

Segment-2之前的所有分片已完成封装,这些分片的数据是不会再发生变化的。这样增加或删除一个BookKeeper节点,或者迁移长期存储节点,都不会发生一致性问题。

3.消息消费模型

3.1 Kafka

Kafka的消费模型是采用消费者组的模式,每一个分区只能给消费者组中的一个消费者消费。

在这里插入图片描述

3.2 Pulsar

在这里插入图片描述
Consumer通过Subscription获取消息,同一Topic的Subscription可以获取到Topic数据的完整拷贝,这样Subscription为每一个Consumer分配一个Cursor,Consumer之间互不影响。

在这里插入图片描述
Pulsar的消费模型有4种

  1. 独占模式(Exclusive):同一个topic只能有一个消费者订阅,如果多个消费者订阅,就会出错。
  2. 灾备模式(Failover):同一个topic可以有多个消费者订阅,但是只能有一个消费者消费,其他订阅的消费者作为故障转移的消费者,只有当前消费者出了故障才可以进行消费当前的topic。

在这里插入图片描述
3 . 共享订阅(Shared):同一个topic可以由多个消费者订阅和消费。消息通过round robin轮询机制分发给不同的消费者,并且每个消息仅会被分发给一个消费者。当消费者断开,发送给它的没有被消费的消息还会被重新分发给其它存活的消费者。
4. Key_Shared:消息和消费者都会绑定一个key,消息只会发送给绑定同一个key的消费者。如果有新消费者建立连接或者有消费者断开连接,就需要更新一些消息的key。

4. 多租户

4.1 Pulsar

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

Pulsar中topic的URL如下,可以看到租户是最基本的管理单位:

persistent://tenant/namespace/topic

Pulsar通过tenant(租户)和namespace(命名空间)来支持多租户。

Pulsar为实例中的每个租户分配:

  • 授权机制
  • 适用于租户配置的集群配置

4.2 Kafka

Kafka为了控制客户端对broker资源的限制,从0.9版本引入了配额(quotas)管理,强制客户端请求使用配额。目前Kafka支持两种类型的配额:

  • 网络带宽配额,用来定义byte-rate阈值(从0.9版本开始)
  • 请求速率配额,将CPU利用率阈值定义为网络和I/O线程的百分比(从0.11开始)

生产者和消费者有可能以很高的速率生产和消费大量的请求,从而垄断broker资源,导致网络饱和,最终影响到其他客户端和broker本身。使用配额可以防止这些问题,让集群体验更好。

5.运维

5.1 集群部署

Kafka去除Zookeeper以后,部署是非常简单的。而Pulsar目前还没有去除Zookeeper的详细计划,而且需要使用到BookKeeper集群,部署复杂不少。

5.2 扩容

Pulsar支持自动负载均衡,这对于增加broker节点和增加存储节点都非常方便。

5.3 云原生支持

Pulsar 计算和存储节点分离,对云原生支持很好。

Kafka 多数组件也支持云原生。

5.4 替换broker

Pulsar的broker节点是无状态的,替换时不用考虑数据丢失。

举报

相关推荐

Kafka和RabbitMQ比较

0 条评论