Kafka 与 Apache Pulsar 相比都有哪些优缺点 [关闭]

Posted

技术标签:

【中文标题】Kafka 与 Apache Pulsar 相比都有哪些优缺点 [关闭]【英文标题】: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 的主要优点和缺点。

【问题讨论】:

【参考方案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 这样的东西(从未使用过,所以我不能说是否有等效)

另请阅读:

https://news.ycombinator.com/item?id=12453080 https://news.ycombinator.com/item?id=15601222 https://streaml.io/blog/why-apache-pulsar/ https://kafka.apache.org/uses

【讨论】:

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 的其他一些令人兴奋的特性是地理复制,以及排队和流式传输的统一

【讨论】:

看看:confluent.io/kafka-vs-pulsar @AlokP 我会读到,confluent.io 的服务基于 kafka。【参考方案3】:

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

Pulsar - 专业人士

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

Pulsar - 缺点

java 客户端几乎没有 javadoc 小型社区 - 目前有 8 个 *** 问题 与 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 强大的消息持久性支持防止数据丢失


【讨论】:

以上是关于Kafka 与 Apache Pulsar 相比都有哪些优缺点 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

详解Apache Pulsar的Topic绑定Broker

从架构层面理解 Apache Pulsar 和 Apache Kafka 不同

从Kafka到选择Apache Pulsar

专访PMC,Apache Pulsar如何挑战Kafka?

Apache Pulsar 调研

为什么已有Kafka,我们最终却选择了Apache Pulsar?