雅虎开发了 Pulsar、pub-sub 消息传递系统并将其开源。它现在是 Apache 的孵化项目。由于 Kafka 也用于相同目的。想知道,卡夫卡相对于脉冲星的主要优点和缺点。
4 回答
我最近都玩了一点,这就是我收集到的。
中性的:
- 我打算让 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 基金会中,并且也来自雅虎,因此它们可以很好地协同工作)。
亲卡夫卡:
- 卡夫卡有像卡夫卡流这样的东西(从未使用过,所以我不能说是否有等价物)
另请阅读:
Apache Kafka更成熟(它的存在时间更长)并且具有更高级别的 API(即 KStreams)。它很成熟,但是限制了流动性和灵活性,即在 github 上打开了大约 500 个 PR
Apache Pulsar深入研究了 Apache Kafka 的设计决策,并结合了改进的设计和一组令人兴奋的功能,即命名空间主题的想法,并允许在命名空间级别应用 ACL 或配额似乎是一个深刻的好处想法,以提供更好的多租户支持。Pulsar 的其他一些令人兴奋的特性是地理复制,以及队列和流的统一
我们需要一个具有持久主题、合理延迟和高吞吐量的流媒体平台。最近,我们评估了是否应该使用 Kafka 或 Pulsar,与 @nha 不同的是,我们现在支持 Apache Kafka。以下是我们的发现:
脉冲星 - 优点
- 功能丰富 - 持久/非持久主题、多租户、ACL、多 DC 复制等。
- 更灵活的客户端 API - 包括 CompletableFutures、流利的接口等。
- java客户端组件是线程安全的——消费者可以确认来自不同线程的消息
脉冲星 - 缺点
- java客户端几乎没有javadoc
- 小社区 - 目前有 8 个 stackoverflow 问题
- 与 BookKeeper 相关的 messageId 概念 - 与连续数字序列的 Kafka 偏移相比,消费者无法轻松地将自己定位在主题上。
- 读者无法轻松阅读主题中的最后一条消息 - 需要浏览所有消息直到最后。
- 没有交易
- 更高的操作复杂性 - Zookeeper + Broker 节点 + BookKeeper - 所有集群
- 延迟有问题 - 在 Broker 节点和 BookKeeper 之间有一个额外的远程调用(与 Kafka 相比)
卡夫卡 - 优点
- 非常丰富和有用的javadoc
- 卡夫卡流
- 成熟和广泛的社区
- 在生产中操作更简单 - 更少的组件 - 代理节点还提供存储
- 事务 - 主题内的原子读写
- 偏移量形成一个连续序列 - 消费者可以轻松地寻找最后一条消息
卡夫卡 - 缺点
- 消费者无法确认来自不同线程的消息
- 没有多租户
- 没有强大的多 DC 复制 -(在 Confluent Enterprise 中提供)
Pulsar 是 Apache 软件基金会获得顶级地位的最新项目,它与另一个 ASF 项目 Kafka 进行了很多比较。
Pulsar 是一个在商用硬件上运行的高度可扩展、低延迟的消息传递平台。它提供了简单的主题发布-订阅和队列语义、轻量级计算框架、订阅者的自动游标管理和跨数据中心复制。
同时,2018 年 Apache Kafka 报告对 600 多名用户进行了调查,发现数据管道和消息传递是该技术的两大用途。随着微服务架构的兴起,它的使用越来越多。
“这两个系统的用例有很大的重叠,但最初的设计非常不同,”其创建者之一马泰奥·梅利 (Matteo Merli) 说,他后来成立了 Streamlio,一家提供快速数据平台的初创公司。
雅虎将 Pulsar 创建为单个多租户系统,以解决其与多个消息系统和多个团队部署它们的问题。
它于 2016 年作为开源发布,并于 2017 年 6 月进入 ASF 孵化器。大约四年来,它已用于雅虎应用程序 Mail、Finance、Sports、Gemini Ads 和雅虎分布式键值服务 Sherpa。
在一篇博文中,联合创始人郭思杰这样总结 Pulsar 与 Kafka:
“Apache Pulsar 将高性能流(Apache Kafka 追求)和灵活的传统队列(RabbitMQ 追求)结合到统一的消息传递模型和 API 中。Pulsar 使用统一的 API 为您提供了一个用于流式传输和队列的系统,具有相同的高性能。”</p>
Merli 说:“流式传输和排队之间存在差异;有很多用例需要其中一种,但大多数人在不同的用例中都需要这两种。”</p>
两层架构 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:它是 KAFKA 杀手吗?由 Bhagwan 撰写。索尼
为什么我们应该选择 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} 强大的消息持久性支持防止数据丢失