CTO问我Pulsar替代Kafka的实际意义是什么

最近一年,Pulsar可谓出尽了风头。社区中一直在鼓吹Pulsar就是用来取代Apache Kafka的主宰地位的。Pulsar提供了一套兼容Kafka的API,让大数据工程师很丝滑不费力的从Kafka切换到Pulsar。

最近CTO也找到我,“听说你最近在研究Pulsar,也做过了很多实验。你能不能跟我说是Pulsar到底好在哪?我们现在用Kafka用得很好,为什么我看见很多公司都在换技术栈,在往Pulsar上迁移,你帮我写个文案,找个时间跟我汇报一下,我们看看切换的价值有多大?”。

一 Pulsar的消息确认(ACK)

我们知道,在Kafka中,恢复点通常被称为offset,更新恢复点的过程叫做消息确认或者提交offset。

而在Pulsar的每个订阅中,都是通过游标(Cursor)来跟踪每条消息的确认状态(ACK),每当消费者在确认消息的时候,都会更新游标信息。更新游标就是为了让消费者不再重复消费数据。

1.1 Pulsar的两种确认消息方式

1.1.1 累积确认

累积确认就是消费者只需要确认他收到的最后一条消息即可,累积确认与Kafka中的offset类似。

1.1.2 单条确认

Pulsar还支持消息的单条确认,也就是选择性确认,这就是Pulsar独到之处一。如下图,显示了单独进行确认的消息4和消息7,在消费失败重试的时候,除了4和7,其他消息都会重新消费。如果在消费每条消息都非常耗时的前提下,这种单条确认的方式就非常好。

注意:独占订阅或故障切换订阅的消费者能够对消息进行单条确认和累积确认;共享订阅的消费者只允许对消息进行单条确认。

1.2 Pulsar的消息保留(Retention)

下图说明了消息保留的方式,11之前的消息都应确认过,消息1-5已经超过了保留周期,就会被删除。消息12-20都没有被确认,同时消息16-20已经超过了消息保留期,会被删除;但是消息12-15就不会被删除。

1.3 在消息确认方面和Kafka的比对小结

通过以上几个方面,我们对 Pulsar 和 Kafka 在消息模型方面的不同点进行小结。

1.3.1 模型概念

  • Kafka: Producer - topic - consumer group - consumer
  • Pulsar:Producer - topic - subscription - consumer

1.3.2 消费模式

  • Kafka:流(Stream)模式,对单个 partition 是独占消费,没有共享(Queue)的消费模式。
  • Pulsar:供了统一的消息模型和 API。流(Stream)模式——独占和故障切换订阅方式;队列(Queue)模式——共享订阅的方式。

1.3.3 消息确认

  • Kafka: 使用Offset来确认消息;
  • Pulsar:使用专门的 Cursor 管理。累积确认和 Kafka 效果一样;提供单条或选择性确认。

1.3.4 消息保留

  • Kafka:根据设置的保留期来删除消息。有可能消息没被消费,过期后被删除。 不支持 TTL。
  • Pulsar:消息只有被所有订阅消费后才会删除,不会丢失数据。也允许设置保留期,保留被消费的数据。支持 TTL。

二 存储方式比对

Apache Pulsar 和 Apache Kafka 之间的根本区别在于 Apache Kafka 是以分区为存储中心,而 Apache Pulsar 是以 Segment 为存储中心。

2.1 Kafka 基于分区进行存储

在消息传递系统中使用基于分区的策略时,该主题被划分为固定数量的相等大小的分组,称为分区。发布到主题的数据均匀分布在分区中,如下图所示,每个分区接收发布到主题的消息的3分之1。现在,该主题的总存储容量等于该主题中的分区数乘以每个分区的大小。一旦达到此限制,无论向系统添加了多少节点,都无法将更多数据添加到主题中。

我们在创建主题的时候,预先确定分区的数量有一些意想不到的副作用,包括:

  • 分区只能存储在单个节点上,因此其大小仅限于该节点上的可用磁盘空间量。
  • 由于数据在所有分区中均匀分布,因此每个分区仅限于主题中最小分区的大小。例如,如果一个主题分别分布在具有4tb,2TB和1TB可用磁盘的3个节点上,则第三个节点上的分区的大小只能增长到1tb,这反过来意味着主题中的所有分区也只能增长到1tb。
  • 尽管并非严格要求,但通常会将每个分区多次复制到不同的节点,以确保数据冗余。因此,最大分区大小进一步限制为最小副本的大小。

如果遇到这些容量限制之一,唯一的补救措施是增加主题中的分区数量。但是,这种容量扩展过程需要重新平衡整个主题,如下图所示。在此再平衡过程中,现有主题数据将在所有主题分区中重新分配,以释放现有节点上的磁盘空间。因此,当您将第四个分区添加到现有主题时,一旦重新平衡过程完成,每个分区应具有大约25% 的总消息。

这种数据重组成本高且容易出错,因为它消耗的网络带宽和磁盘I/O与主题大小成正比。例如,重新平衡10TB主题将导致10TB的数据从磁盘读取,通过网络传输并写入目标代理的磁盘。只有在重新平衡过程完成后,才能删除以前存在的数据,并且该主题才能恢复为客户端服务。因此,明智地选择分区大小是明智的,因为重新平衡的成本不容易被忽略。

2.2 Pulsar基于Segment进行存储

在以segment为中心的存储架构 (例如Apache Pulsar使用的架构) 中,每个主题都由托管ledger支持,它进一步细分为基于预先配置的时间或大小限制而滚动的段。然后,这些段分布在存储层中称为bookies 的多个节点上,以实现冗余和扩展。在任何给定时间,这些部分中只有一个可用于写,而其余部分则关闭,仅用于为读服务。

从上图可以看到,这些段可以放置在具有足够磁盘容量的存储层的任何位置。当存储层中没有足够的存储容量用于新段时,可以轻松地添加新节点并立即用于存储数据。这种存储架构的主要好处之一是真正的水平可扩展性,因为段可以无限期地创建并存储在任何地方。

总之,Apache Pulsar 这种独特的基于分布式日志存储的以 Segment 为中心的发布 / 订阅消息系统可以提供许多优势,例如可靠的流式系统,包括无限制的日志存储,无需分区重新平衡的即时扩展,快速复制修复以及通过最大化数据放置实现高写入和读取可用性选项。

但是,具体需不需要从Kafka升级为Pulsar,主要是看公司的业务场景,有没有那么大的数据量,如果数据量没有太多,更换技术栈不是给自己找麻烦吗?

(0)

相关推荐

  • Pulsar 社区周报|2021-01-11~2021-01-17

    Pulsar 周报由 StreamNative 翻译整理.原文内容来自 StreamNative 官网 Pulsar 周报模块. 本期编辑:Tango@StreamNative. 关于 Apache ...

  • 为什么说 Pulsar 是云原生的消息平台?

    企业中的不同的应用系统共同支撑起了业务的运行,在企业的发展过程中,总会有应用系统需要以设计时未曾想过的方式集成在一起.在过去二十年的实践当中,消息传递技术通过使用消息同步两个系统,同时又能够解耦消息的 ...

  • Kafka淘汰倒计时!这个新一代消息中间件,腾讯、华为都用疯了?

    提起成熟的消息队列,毋庸置疑,大多数人的第一反应一定是 Kafka. Kafka 作为一款明星级产品,能够彻底满足海量数据场景下高吞吐.高并发需求,在短短几年内,已经被阿里.腾讯.百度.字节跳动.Ne ...

  • Spring 对Apache Kafka的支持与集成

    Spring 对Apache Kafka的支持与集成

  • 再见,Kafka!再见,RocketMQ!

    在开源的业界已经有这么多消息队列中间件了,Pulsar 作为一个新势力到底有什么优点呢? Pulsar 自从出身就不断的再和其他的消息队列(Kafka,RocketMQ 等等)做比较. 但是 Puls ...

  • 真的,关于 Kafka 入门看这一篇就够了

    ImportNew 前天 以下文章来源于Java极客技术 ,作者cxuan Java极客技术java教程 java开发 java入门 java学习 java小课 java进阶 java知识 java技 ...

  • MQ选型,究竟要考虑哪些因素?

    架构选型,是架构师的必备能力,要构建满足企业需求的架构,自然需要匹配的组件. 成熟系统的构建,最不能缺少的一环就是消息队列.消息队列的概念看似好懂,但落实到复杂问题的解决,则非常考验内功.比如: (1 ...

  • 架构师的选择,Pulsar还是Kafka?

    介绍 最近,我一直在研究Pulsar及其与Kafka的比较. 快速搜索将显示两个最著名的开源消息传递系统之间存在当前的'战争'. 作为Kafka的用户,我确实对Kafka的某些问题感到困惑,并且我对P ...

  • 对比Pulsar和Kafka,对Pulsar的性能有一个更准确的看法

    李鹏辉/郭思洁 注:这篇文章介绍了StreamNative对Confluent最近发表的文章<Apache Kafka.Apache Pulsar和RabbitMQ的基准测试:哪个最快?&quo ...

  • CTO问:WebSocket 是啥玩意?

    Python之禅 446篇原创内容 公众号 今天这篇文章没有代码,看起来不会很累 浏览器客户端与服务器通信时,传统的HTTP连接是这样的 HTTP1.0 每发一个请求都要先建立一个TCP连接,客户端收 ...

  • 今日练习:问自己,什么才是真正意义上的与关系和解?

    今日练习: 问自己,什么才是真正意义上的与关系和解? 真正和解的关系是不再把眼前的关系形式定义为问题!我们心中有一个关系和解的想像和标准,然而这个标准与「相」一定离不开关系! 与关系和解指的是面对外在 ...

  • 有人问我,书法家存在的现实意义是什么?我的回答是:

    所谓书法,说到底就是汉字的美化和变化. 这两化,自古至今都是汉文化深入骨髓的传统和无数代人的不断传承.变化就是字体从篆书,到隶书,到楷书及行,草等形态变化,很直观. 重点是汉字的美化. 从出土的甲骨文 ...

  • 每周一问之37:这一切的意义是什么?

    问:我很想问王老师一个问题:您带领那么多工作坊,做那么多个案,时间排的那么满,对你来说,这一切的意义是什么呢?你的动力都是从哪里来的?你为什么愿意持续地做这样的事情? ◆ ◆ ◆ 答:你问这样的问题, ...

  • 流数据并行处理性能比较:Kafka vs Pulsar vs Pravega

    流数据并行处理性能比较:Kafka vs Pulsar vs Pravega

  • Redis、Kafka 和 Pulsar 消息队列对比

    刘德恩 云时代架构 一.最基础的队列 最基础的消息队列其实就是一个双端队列,我们可以用双向链表来实现,如下图所示: push_front:添加元素到队首: pop_tail:从队尾取出元素. 有了这样 ...

  • 有问有答:大麻能替代阿片类药品么?

    3 大麻二酚CBD被进行可替代阿片类药物试验 美国2018年爆发阿片类危机. 2018年7月12日,纽约政府部门宣布注册的医用大麻认证医师可以将医用大麻作为阿片类药物的替代品. 2018年8月28日, ...