【问题标题】:What are the advantages and disadvantages of Kafka over Apache Pulsar [closed]Kafka 与 Apache Pulsar 相比有哪些优缺点 [关闭]
【发布时间】:2018-02-13 08:58:29
【问题描述】:

Yahoo 开发了 Pulsar、pub-sub 消息传递系统并将其开源。它现在是 Apache 的孵化项目。由于 Kafka 也用于相同目的。想知道 Kafka 相对于 Pulsar 的主要优点和缺点。

【问题讨论】:

    标签: apache-kafka apache-pulsar


    【解决方案1】:

    我最近都玩了一下,这是我收集到的。

    中性:

    • 我打算让 Kafka 在社区/文档等方面获胜。但我无法轻松找到对我在 Kafka 上的问题的答复,有些问题过时且令人困惑(针对遗留 API)。但是 Pulsar 文档已经足够好了,开发人员对 Slack 的响应非常好(你好 @Matteo Merli :)),如果您想深入了解内部结构,底层部分(Zookeeper、Bookkeeper)也有不错的文档。
    • Kafka 的目标是高吞吐量,Pulsar 的目标是低延迟。两者都提供控制它的设置。
    • 两者都已在多家公司中投入生产并经过实战测试

    专业脉冲星:

    • 根据我的经验,API 更易于使用。在 Kafka 中,代理是愚蠢的,消费者按照他们认为合适的方式构建通信。这种灵活性的代价是 Kafka 的用户必须了解如何将各个部分组合在一起。我想预期的好处是增加了灵活性,但由于 Pulsar 能够复制 Kafka Consumers API(并且只需要很少的代码),因此我将其作为 Pulsar 的专业人士。
    • 您可以做一些不容易做到的事情(或者在 Kafka 中可能无法做到):多租户(安全性、隔离性...)、资源管理(主题限制、配额)、异地复制
    • 它具有 Kafka 目前缺乏的一些功能,例如寻找特定的 MessageId
    • Pulsar 可扩展到数百万个主题,而 Kafka 受限于它在 Zookeeper 中构造数据的方式
    • 更容易部署。一个独立的 Pulsar 会启动它自己的本地 Zookeeper,我个人觉得配置更容易理解
    • 用 Java 编写,而不是混合遗留的 Scala 和 Java 代码。我还发现代码库组织得很好,更容易理解。部分原因是它依赖于 Zookeeper 和 Bookkeeper,它们是具有自己的文档/社区/开发人员等的外部项目(请注意,它们也在 Apache 基金会中,并且也来自雅虎,因此它们可以很好地协同工作)。李>

    专业卡夫卡:

    • Kafka 有一些像 Kafka Streams 这样的东西(从未使用过,所以我不能说是否有等效)

    另请阅读:

    【讨论】:

    • pro Pulsar:6 项,pro Kafka:1 项。我没有下注,但这个答案似乎有偏见。
    • @c69 当然这是有偏见的 :) 这是我的回答,您可能有不同的意见,我很乐意考虑其他支持 Kafka 的观点。让我产生偏见的是我先玩了卡夫卡(并且不打算进一步研究)。但有些事情令人沮丧。然后我听说了 pulsar,它更适合(至少对我来说)。
    • @nha pulsar 的社区不是很小吗?
    • Kafka Streams 也应该适用于 Pulsar 的 Kafka 兼容层,因为它只是一个客户端。
    【解决方案2】:

    Apache Kafka 更成熟(它的存在时间更长)并且具有更高级别的 API(即 KStreams)。它很成熟,但是限制了流动性和灵活性,即在 github 上打开了大约 500 个 PR

    Apache Pulsar 深入研究了 Apache Kafka 的设计决策,并结合了改进的设计和一组令人兴奋的功能,即 命名空间 主题的想法,并允许在名称空间级别上应用 ACL 或配额似乎是一个深刻的好主意,以提供更好的多租户支持。 Pulsar 的其他一些令人兴奋的特性是地理复制,以及排队和流式传输的统一

    【讨论】:

    【解决方案3】:

    我们需要一个具有持久主题、合理延迟和高吞吐量的流媒体平台。最近,我们评估了是否应该使用 Kafka 或 Pulsar,与 @nha 不同的是,我们现在支持 Apache Kafka。以下是我们的发现:

    Pulsar - 专业人士

    • 功能丰富 - 持久/非持久主题、多租户、ACL、多 DC 复制等。
    • 更灵活的客户端 API - 包括 CompletableFutures、流畅的接口等。
    • java 客户端组件是线程安全的 - 消费者可以确认来自不同线程的消息

    Pulsar - 缺点

    • java 客户端几乎没有 javadoc
    • 小型社区 - 目前有 8 个 stackoverflow 问题
    • 与 BookKeeper 相关的 messageId 概念 - 与连续数字序列的 Kafka 偏移相比,消费者无法轻松地将自己定位在主题上。
    • 读者无法轻松阅读主题中的最后一条消息 - 需要浏览所有消息直到最后。
    • 没有交易
    • 更高的操作复杂性 - Zookeeper + Broker 节点 + BookKeeper - 全部集群
    • 延迟有问题 - 在 Broker 节点和 BookKeeper 之间有一个额外的远程调用(与 Kafka 相比)

    Kafka - 专业人士

    • 非常丰富实用的javadoc
    • Kafka 流
    • 成熟而广泛的社区
    • 在生产中操作更简单 - 更少的组件 - 代理节点还提供存储
    • 事务 - 主题内的原子读写
    • 偏移量形成一个连续序列 - 消费者可以轻松找到最后一条消息

    Kafka - 缺点

    • 消费者无法确认来自不同线程的消息
    • 没有多租户
    • 没有强大的多数据中心复制 -(在 Confluent Enterprise 中提供)

    【讨论】:

    • > messageId 与 BookKeeper 相关的概念 - 与连续数字序列的 Kafka 偏移相比,消费者无法轻松地将自己定位在主题上。 --- 消费者可以使用 messageId 来定位任何消息。 MessageId 也可以存储在 Pulsar 之外,用于回滚到特定的消息。
    • 2. (最后一个条目)读者可以指定 MessageId.latest 将自己定位到流的末尾
    • 3. (操作复杂)——对于小型集群,推荐的部署模式是broker & bookkeeper结合。这与 Kafka 的组件数量相同
    • 4(延迟有问题)——这不是真的。首先,Kafka 还具有额外的网络跃点(当复制到另一个代理时)。其次,与 Kafka 内存页面缓存方法相比,带有 BookKeeper 的 Pulsar 实际上可以保证比 Kafka 低得多的延迟,甚至提供强大的持久性。消息传递系统的延迟通常由磁盘访问模式而非网络主导。
    • 1 个额外的网络跃点约为 0.1 毫秒,Pulsar 可以保证 99pct 延迟小于 5 毫秒,而 Kafka 通常会在 15 毫秒内(没有数据持久性)并达到 100 毫秒的峰值(对于99pct)。您可以使用 OpenMessaging 基准测试不同的消息传递系统:openmessaging.cloud/docs/benchmarks
    【解决方案4】:

    source


    Pulsar 是 Apache 软件基金会最新获得顶级地位的项目,它与另一个 ASF 项目 Kafka 进行了很多比较。

    Pulsar 是在商用硬件上运行的高度可扩展、低延迟的消息传递平台。它提供了简单的主题发布-订阅和队列语义、轻量级计算框架、订阅者的自动游标管理以及跨数据中心复制。

    同时,2018 年 Apache Kafka 报告对 600 多名用户进行了调查,发现数据管道和消息传递是该技术的两大用途。随着微服务架构的兴起,它的应用越来越广泛。

    “这两个系统的用例有很大的重叠,但最初的设计非常不同,”其创建者之一 Matteo Merli 说,他后来成立了 Streamlio,一家提供快速数据平台的初创公司。

    Yahoo 将 Pulsar 创建为单个多租户系统,以解决其与多个消息传递系统和多个团队部署它们的问题。

    它于 2016 年以开源形式发布,并于 2017 年 6 月进入 ASF 孵化器。大约四年来,它已用于雅虎应用程序 Mail、Finance、Sports、Gemini Ads 和雅虎的分布式键值服务 Sherpa。

    联合创始人郭思杰在一篇博文中这样总结了 Pulsar 与 Kafka:

    “Apache Pulsar 将高性能流(Apache Kafka 追求)和灵活的传统队列(RabbitMQ 追求)结合到一个统一的消息传递模型和 API 中。 Pulsar 使用统一的 API 为您提供了一个用于流式传输和队列的系统,具有相同的高性能。”

    Merli 说:“流式传输和排队是有区别的;有很多用例需要其中一种,但大多数人在不同的用例中都需要这两种。”

    两层架构 Merli 说,两层设计是 Pulsar 的关键。有一个接收和传递消息的无状态代理层和一个有状态持久层,以及一组称为 bookies 的 Apache BookKeeper 存储节点,可提供低延迟的持久存储。

    Merli 说,Pulsar 建立在拥有强大数据保证的理念之上。它是为共享消费而设计的,而 Kafka 不是。 Pulsar 使用户能够配置消息的保留期,即使在所有订阅都使用它们之后也是如此。

    其分层架构和以段为中心的存储提供了关键优势:

    您可以独立扩展代理或存储层。 由于代理是无状态的,因此可以快速将主题转移到其他代理。这开辟了一种有效的方式来平衡跨代理的流量。 在同一个分区上可以有多个消费者,您可以添加任意数量的消费者。 由于没有数据存储在本地,因此在扩容时无需复制分区数据,也无需重新平衡。创建分区主题时,Pulsar 会自动以不可知的方式将数据分区给消费者和生产者。

    代理将消息数据发送到多个 BookKeeper 节点,这些节点将数据写入预写日志并将副本保存到内存中。在节点发出确认之前,日志被强制写入稳定存储,即使断电也能确保保留。主题分区可以扩展到整个 BookKeeper 集群的总容量,您可以通过简单地添加节点来扩展集群。

    自从进入孵化器以来,重点一直是让 Pulsar 更容易上手。

    Pulsar 2.0 版于 6 月发布,其中包括称为 Pulsar Functions 的“流原生”处理功能,它使用户能够在数据通过管道时使用 Java 或 Python 编写处理函数来处理数据。即将发布 2.2 版本,将提供交互式 SQL 查询功能。

    Pulsar 提供多种语言和协议绑定,包括 Java、C++、Python 和 WebSockets,以及与 Kafka 兼容的 API。


    进一步阅读:Apache Pulsar:它是 KAFKA 杀手吗?

    Apache Pulsar : Is it a KAFKA Killer? Written By Bhagwan s. Soni


    为什么我们应该选择 Apache Pulsar 而不是 Kafka?

    Apache Pulsar 是 PubSub 的企业版,最初由 Yahoo 开发,现在由 Apache Software Foundation 提供支持。 Apache Pulsar 在过去 3 年多的生产系统上运行并证明了它的稳定性。

    Apache Pulsar 几乎涵盖了 Kafka 提供给我们的所有功能,可能有不同的名称。 Pulsar 有很多特性,但我想强调其中一些有助于我们与 Kafka 区分开来 -

    1} Apache Pulsar 为您提供 3 种类型的主题订阅: A} 独家 — 只有一个消费者会消费来自主题的数据 B} 共享 — 多个消费者将消费来自一个主题的数据 C} 故障转移 — 多个消费者,但在给定时间点只有一个消费者会消费数据。

    2} 每个命名空间可以有一个或多个主题

    3} 对 Multitanency 的强大支持

    4} 跨多个集群的数据复制

    5} 强大的消息持久性支持防止数据丢失


    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2012-03-09
      相关资源
      最近更新 更多