Yahoo 开源的 Pulsar 能否超越 Kafka?

纯洁的微笑 2020-11-18 09:53:34 ⋅ 1147 阅读

来源:性能与架构
链接:https://mp.weixin.qq.com/s/s4k9nioEDd1m2g0quj9kqA

Yahoo 开源的 Pulsar 能否超越 Kafka?

 

Pulsar 是类似于 Kafka 的一个消息中间件,是 Yahoo 开源的,可以说 Pulsar 就是针对 Kafka 的痛点而来的。

下面就说说 Kafka 都有哪些痛点,以及 Pulsar 的优质特性,当然还会说下它的不足。

1. Kafka 概述

Yahoo 开源的 Pulsar 能否超越 Kafka?

 

Kafka 于 2011 年由 LinkedIn 创建,发展到现在已经成为消息系统的王者,支持了越来越多的功能,例如:

  • Schema Registry
  • Kafka Connect,用于对接其他数据源
  • Kafka Streams,用于分布式的流处理
  • KSQL,用于对 Topic 进行类似 SQL 的查询
  • ……

Kafka 速度快、安装简单,适用于非常多的使用场景,极其流行。

2. Kafka 痛点

  • 扩展困难,这是 Kafka 架构造成的,broker 存储了数据,想要动 broker,就意味着 topic 分区以及副本的复制,非常耗时。
  • 不支持完全独立的多租户模式。
  • 异步复制的情况下可能丢失数据。
  • 对于 broker、topic、partition、replica 的数量需要做一个规划,以便尽量避免扩展问题。
  • 当你只需要一个单纯的消息系统时,基于 offset 的方式就有点麻烦。
  • 集群再平衡会影响 producer 和 consumer 的性能。
  • MirrorMaker Geo 复制机制有问题,例如 Uber 设计了自己的方案来克服此问题。

3. Pulsar 概述

Yahoo 开源的 Pulsar 能否超越 Kafka?

 

Pulsar 是 Yahoo 在 2013 年创建的,2016年贡献给了 Apache 基金会,目前已经是 Apache 的顶级项目。

Yahoo、Verizon、Twitter 等很多公司都在使用 Pulsar 来处理海量消息。

Pulsar 声称比 Kafka 更快、运行成本更低、解决了很多 Kafka 的痛点。

Pulsar 非常灵活,可以像 Kafka 一样作为分布式日志系统,也可以作为类似 RabbitMQ 这类简单的消息系统。

Pulsar 有多种订阅类型、传递保障、保存策略。

4. Pulsar 特性

  • 内置多租户

不同的团队可以使用同一个集群,互相隔离。支持隔离、认证授权、配额。

  • 多层架构

Pulsar 使用特定的数据层来存储 topic 数据,使用了 Apache BookKeeper 作为数据账本。Broker 与存储分离。

使用分隔机制可以解决集群的扩展、再平衡、维护等问题。也提升了可用性,不会丢失数据。

因为使用了多层架构,对于 topic 数量没有限制,topic 与存储是分离的,也可以创建非持久化的 topic。

  • 多层存储

Kafka 中存储是很昂贵的,所以很少存储冷数据。Pulsar 使用了多层存储,可以自动把旧数据移动到专门的存储设备,例如 Amazon S3,但是对于客户端来讲是透明的,还可以正常使用。

  • Functions

Pulsar Function 是一种部署简单,轻量级计算、对开发人员友好的 API,无需像 Kafka 那样运行自己的流处理引擎。

  • 安全

内置了代理、多租户安全机制、可插入的身份验证等功能。

  • 快速再平衡

partition 被分为了小块儿,所以再平衡时非常快。

  • 多系统集成

例如 Kafka、RabbitMQ 等系统都可以轻松集成。

  • 支持多种开发语言

例如 Go、Java、Scala、Node、Python 等等。

5. 小结

Pulsar 的确弥补了 Kafka 的很多不足,因为 Yahoo 就是为了解决这些问题而开发的 Pulsar。

但 Pulsar 也有明显的弱势,例如它的普及度比 Kafka 差太多了,而且 Kafka 有 Confluent 的专业支持,这个支持力度不是 Pulsar 能比的,由此就带来了其他问题,比如扩展插件太少、人才太少等等。

Pulsar 与 Kafka 各有所长,各有所短,没有技术是完美的,多一种技术就多一种选择,需要根据自己的情况来选择合适的技术。

参考资料:

https://itnext.io/pulsar-advantages-over-kafka-7e0c2affe2d6


全部评论: 0

    我有话说:

    Pulsar Manger 0.2.0 正式发布, Apache Pulsar 管理端

    Pulsar Manger 是由 StreamNative 公司开源并捐献给 Apache 基金会 Apache Pulsar 管理端。它是基于 Web GUI 管理工具,支持多种环境动态

    Kafka系列二

      分区 Kafka 消息组织方 式实际上是三级结构:主题 - 分区 - 消息 问题一:为什么 Kafka 要做这样设计?为什么使用分区概念而不是直接使用多个主题呢? 分区

    Kafka系列一

      前言 刚学了rabbitmq, 怎么突然又开始了kafka? 艺多不压身 <摸着渐渐稀疏头发> 只有对比才能有更深理解 起于专业,终于专业 起步 知乎上

    SourceGit v3.3 已经发布, Git 客户端

    SourceGit v3.3 已经发布,这是一个 Git 客户端。 此版本更新内容包括: 主题优化 增加auto fetch功能(每10分钟自动fetch打开仓库),可在全局设置中关闭 移

    推荐一款前端数据管理工具 algeb

    ALGEB 简介 这是一个比较抽象库,一开始可能比较难理解。我写它初衷,是创建可响应数据请求管理。在传统数据请求中,我们只是把携带ajax代码一堆函数放在一起,这样就可以调用接口。但是这种

    Rocket.Chat 3.7.1 发布,团队沟通工具

    简介 Rocket.Chat 是一款团队协作沟通工具,提供实时交互、语音消息、视频会议、文件共享、链接预览等功能。   3.7.1更新内容 Rocket.Chat 3.7.1

    Pulsar Go Client 0.4.0 发布

    Pulsar Client Go 是 Apache Pulsar Go 语言客户端。近期,社区发布 Pulsar Client Go 0.4.0 版本。 新特性 支持在

    A3Mall v1.5.2 发布,免费 PHP 小程序商城系统

    商品等功能。前后端全部。 软件架构 PHP...

    Tengine 2.3.3 即将发布,阿里巴巴轻量级 Web 服务器

    Tengine是由淘宝网发起Web服务器项目。它在Nginx基础上,针对大访问量网站需求,添加了很多高级功能和特性。Tengine性能和稳定性已经在大型网站如淘宝网,天猫商城等得到了很好

    给大家分享一款高性能api网关

    https://www.toutiao.com/i6890014207987679755 在当前互联网环境下,尤其是移动互联网时代,用户通过手机APP可访问很多应用,作为应用服务部分面对日益

    京东猎户座发布,配置化一键生成 cms 系统

    猎户座核心配置化功能开源啦!在降本提效大环境下,猎户座系统为了扩展更多应用场景,近期完成了第一阶段开源工作。此次代码内容涉及两个代码库,内容为CCMS管理系统核心配置化功能以及包含表格列与

    Apache Pulsar Go Client 0.3.0 版本发布

    Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台。 Pulsar Go Client 是分布式消息流平台 Apache Pulsar Go 语言

    「轻阅读」美团QPS压测结果近5w/s分布式ID生成器leaf调试实战

    大型互联网项目ID要保证全局唯一,一般不在用数据库自带id自增了,一般都会用分布式id生成器。

    Apache Kafka 2.7.1 发布

    Apache Kafka 2.7.1 已发布,这是一个 bugfix 版本,其中包括来自 45 个 JIRA 修复和改进,还修复了部分严重错误。 改进 [KAFKA-10852] - 优化

    Pulsar Flinkconnector 2.7.0 正式发布,支持最新版 Pulsar 与 Flink

    Pulsar Flink 连接器 2.7.0 支持 Apache Pulsar 2.7.0 和 Apache Flink 1.12 中功能,并且与 Flink连接器 和Flink 消息格式完全兼容

    GitHub竟然有基于SpringCloud“网约车”项目,附

    有人问小编有没有“网约车”项目码,并且最好是采用微服务架构设计,这样可以投入技术团队进行二次开发。 小编在GitHub上还真找到了这个项目,接下来一起看一看吧! 项目介绍 该项目是一款标准且

    kafka快速入门

    Kafka可以起到两个作用:1、降低系统组网复杂度;2、降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线作用;