抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

选择 Pulsar 而不是 Kafka 的 7 大理由

2019 年 5 月 22 日

选择Pulsar而不是Kafka的7大理由

对于开发云原生分布式应用程序的开发人员来说,他们应该把更多的精力放在应用程序和微服务上,而不是把时间浪费在处理复杂的消息基础设施上,他们需要一些解决方案帮助他们管理好这些基础设施。


构建消息基础设施的第一步是选择合适的消息中间件技术。在这方面有很多选择,从各种开源框架(如 RabbitMQ、ActiveMQ、NATS)到一些商用产品(如 IBM MQ 或者 RedHat AMQ)。当然,除了这些之外,我们还有 Kafka。不过,我们最后并没有选择 Kafka,而是选择了 Pulsar。


为什么我们最终选择了 Pulsar?下面列出了选择 Pulsar 而不是 Kafka 的 7 大理由。


1. 流式处理和队列的合体

Pulsar 就像是一个合二为一的产品,不仅可以像 Kafka 那样处理高速率的实时场景,还能支持标准的消息队列模式,比如多消费者、失效备援订阅和消息扇出,等等。Pulsar 会自动跟踪客户端的读取位置,并把这些信息保存在高性能的分布式 ledger(BookKeeper)当中。


与 Kafka 不一样的是,Pulsar 具备传统消息队列(如 RabbitMQ)那样的功能,因此,只需要运行一个 Pulsar 系统就可以同时处理实时流和消息队列。


2. 支持分区,但不是必需的

如果你用过 Kafka,就一定知道分区是怎么回事。Kafka 中的所有主题都是分区的,这样可以增加吞吐量。通过分区,单个主题的处理速率可以得到大幅提升。但如果某些主题不需要太高的处理速率,那该怎么办?对于这类情况,就不需要考虑分区了,以避免复杂的 API 和管理方面的工作,这样不是更好吗?


Pulsar 就可以做到。如果你只需要一个主题,而不需要分区,那使用一个主题就好了。如果你需要使用多个消费者实例来提升处理速率,其实也不需要使用分区,因为 Pulsar 的共享订阅可以达到你的目的。


如果你确实需要分区来进一步提升性能,你也可以使用分区。


3. 日志固然不错,但 ledger 更胜一筹

Kafka 开发团队预见了日志对于一个实时数据交换系统的重要性。因为日志是通过追加的方式写入系统的,所以数据写入速度很快。又因为日志中的数据是串行的,所以可以按照写入的顺序快速读取数据。相比随机读取和写入,串行读取和写入速度更快。对于任何一个提供数据保证的系统来说,持久化存储方面的交互都是一个瓶颈,而日志抽象最大限度地提升了这方面的效率。


日志固然是好,但当它们的量增长到很大的时候,也会给我们带来一些麻烦。在单台服务器上保存所有日志已经成为一个挑战。在服务器存储被日志填满之后该怎么办?如何进行伸缩?或者保存日志的服务器宕机,需要重新从副本创建新的服务器,该怎么办?将日志从一台服务器拷贝到另一台服务器是很耗费时间的,特别是如果你想要在保持系统实时数据的情况下完成这个操作就更难了。


Pulsar 对日志进行分段,从而避免了拷贝大块的日志。它通过 BookKeeper 将日志分段分散到多台不同的服务器上。也就是说,日志并不是保存在单台服务器上,所以任何一台服务器都不会成为整个系统的瓶颈。这样就可以更容易地处理故障,要进行伸缩也很容易,只需要加入新的服务器,不需要进行再均衡。


4. 无状态

对于云原生应用程序开发人员来说,他们最喜欢的东西就是无状态。无状态组件启动速度快,可替换,还可以实现无缝的伸缩。如果消息中间件也是无状态的,那岂不是更好?


Kafka 不是无状态的,因为每个 broker 都包含了分区的所有日志,如果一个 broker 宕机,并非任意一 broker 都可以接替它的工作。如果工作负载太高,也不能随意添加新的 broker 来分担。broker 之间必须进行状态同步。


在 Pulsar 架构中,broker 是无状态的。但是完全无状态的系统是无法用来持久化消息的,所以 Pulsar 其实是有维护在状态的,只是不是在 broker 上。在 Pulsar 架构中,数据的分发和保存是相互独立的。broker 从生产者接收数据,然后将数据发送给消费者,但数据是保存在 BookKeeper 中的。


因为 Pulsar 的 broker 是无状态的,所以如果工作负载很高,就可以直接添加新的 broker。


5. 简单的跨域复制

跨域复制是 Pulsar 的拿手好戏。Pulsar 在设计之初就考虑到了这个特性,配置也很容易。要搭建一个全球化的分布式 Pulsar 集群,并不需要你拥有博士学位。


6. 稳定的表现

一些基准测试表明,Pulsar 可以在提供较高吞吐量的同时保持较低的延迟。


7. 完全开源

Pulsar 提供了很多与 Kafka 相似的特性,比如跨域复制、流式消息处理(Pulsar Function)、连接器(Pulsar IO)、基于 SQL 的主题查询(Pulsar SQL)、schema registry,还有一些 Kafka 没有的特性,比如分层存储和多租户,所有这些特性都是开源的。


结论

为此,我们有理由选择 Pulsar 来构建我们的消息基础设施服务。其实除了上述这些原因之外,使用 Pulsar 还有其他好处,比如多租户、命名空间、认证和授权、文档、对 Kubernetes 的友好支持。


英文原文:https://kafkaesque.io/7-reasons-we-choose-apache-pulsar-over-apache-kafka/


2019 年 5 月 22 日 07:009101
用户头像

发布了 731 篇内容, 共 378.8 次阅读, 收获喜欢 1887 次。

关注

评论

发布
暂无评论
发现更多内容

HDFS SHELL详解(5)

罗小龙

hadoop 28天写作 hdfs shell

我与你地铁高峰期的邂逅,背后竟然是?

脑极体

hive JOIN操作分析

梧桐

作为社畜,如何做好精力管理

熊斌

精力管理 28天写作

[2/28]保障业务转化为开发需求

俊毅

外行话之什么是好的游戏角色

Justin

28天写作 外行话 游戏设计

我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?

冰河

分布式 微服务 dubbo 系统架构 服务治理

新官上任,如何开始你的管理工作(下)

一笑

团队管理 管理 28天写作

突然明白 npm install xxx 的业务实际用处

blueju

前端 npm

synchronized只会用不知道原理?一文搞定

Java鱼仔

Java 面试 并发 synchronized

三分钟快速详细安装CentOS

程序员的时光

Linux centos 程序员 28天写作

28 天带你玩转 Kubernetes-- 第四天(资源介绍)

Java全栈封神

Kubernetes k8s 28天写作 k8s教程 k8s资源

甲方日常 83

句子

工作 随笔杂谈 日常

生产环境全链路压测建设历程 27:FAQ 之 业务模型相关

数列科技杨德华

28天写作

28天瞎写的第二百一五天:为了看片儿折腾 Linux 的故事

树上

28天写作

Java 源代码解析 | 集合类 | LinkedList

肥鱼先生

记录一下我离线依赖迁移安装的具体尝试过程

blueju

JavaScript 前端 npm Node webpack

Java 源代码解析 | 集合类 | Set

肥鱼先生

自动驾驶到底应该怎么实现?(28天写作 Day4/28)

mtfelix

自动驾驶 28天写作 智能电动车

【Mysql-InnoDB 系列】锁

程序员架构进阶

MySQL innodb 28天写作

影响DevOps和DevSecOps采用的7种趋势

啸天

安全 DevSecOps 应用安全

没有调查,就没有发言权 Jan 12, 2021

王泰

28天写作

Spring Boot 使用slf4j进行日志记录

武哥聊编程

Java springboot SpringBoot 2 slf4j 28天写作

技术人小故事-团队愿景篇-第4段

Ian哥

28天写作

微服务该如何拆分?

xcbeyond

微服务 方法论 微服务拆分 架构设计原则 28天写作

【薪火计划】11 - 学习总结

brave heart

管理 28天写作

房子是程序员的印钞机和救生舱

陆陆通通

赚钱 程序人生 买房 逆袭 28天写作

读《关于中台的思考与尝试》,我竟然懂得了这么多!

李忠良

中台 方法论

在时间的缝隙里打了个盹「幻想短篇 4/28」

道伟

28天写作

为什么泡泡玛特是一个好生意

lidaobing

28天写作 泡泡玛特

关于选择的复盘(part 1)

.

28天写作

Study Go: From Zero to Hero

Study Go: From Zero to Hero

选择Pulsar而不是Kafka的7大理由-InfoQ