写点什么

选择 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:008640
用户头像

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

关注

评论

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

unittest框架

Flychen

Python 自动化测试 unittest

系统化服务构建-调用链管理

图南日晟

微服务 全链路监控 链路追踪

H2 的全文检索功能

Page

全文检索 lucene H2 内存数据库

真香!谷歌终与美国国防部合作,签署百万美金云服务合同

神经星星

云计算 互联网巨头 互联网 谷歌Google

2020年4月云主机性能评测报告

BonreeAPM

云计算 百度云 ucloud 性能测试 公有云

Neo4j执行计划

脚动两轮男之漂流小王子

k8s上运行我们的springboot服务之——在linux安装docker并搭建docker私服

柠檬

Docker k8s

k8s上运行我们的springboot服务之——上传服务到docker私服

柠檬

Docker springboot

JVM源码分析之堆内存的初始化

猿灯塔

Jenkins 插件开发之旅:两天内从 idea 到发布(下篇)

donghui

DevOps jenkins jenkins-plugin

职场“潜”规则(二)

俊毅

职场 感悟 个人提升 人才

那个业务大拿死在了这个地方

小眼睛聊技术

Java 学习 高效工作 程序员 个人成长

一文搞懂RSA算法

somenzz

DDD 实践手册(番外篇: 事件风暴-实践)

Joshua

领域驱动设计 DDD 事件风暴 事件驱动 Event Storming

奈学教育分享:Hadoop分布式系统HDFS工作原理

奈学教育

hadoop hdfs 分布式

职场提问的“唐太宗”原则

大伟

系统服务构建-BFF 助力前后端分离

图南日晟

php 微服务 BFF

2020年4月北京BGP机房网络质量评测报告

BonreeAPM

运维 服务器 机房 数据中心 评测

k8s上运行我们的springboot服务之——k8s 1.16.0安装

柠檬

k8s

工厂模式——这一篇真够了

海星

Java 架构 面试 设计模式 工厂模式

招联金融助力经济复苏 致力成为“智慧生活的消费金融专家”

极客编

露营之美,在乎山水之间也

李冬梅

北大学子手写实现《统计学习方法》书中全部算法!

GitHubDaily

人工智能 GitHub 学习 程序员

【有奖调研】大数据与人工智能从业者有奖需求用研

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

游戏夜读 | 数据整理的难题?

game1night

Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)

donghui

DevOps jenkins jenkins-plugin

如何参与开源项目

郭旭东

GitHub 开源

Java 简介

编号94530

Java jdk java简介 jdk8

现代生活对我们大脑的危害

七镜花园-董一凡

生活质量

1分钱秒杀!疫情季,如何为孩子的升学保驾护航?

极客编

投机者

Neco.W

投机 口罩 头盔 投机者

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