Kafka 和 Pulsar 经常被拿来比较,因为它们都是以处理高吞吐量、低延迟数据流的能力而闻名的数据平台。 它们使企业能够构建可扩展、容错的数据管道和实时处理应用程序。 它们的架构都建立在生产者-消费者模型之上,这意味着它们适用于各种用例,并与现代数据生态系统无缝集成。
我写这篇文章是为了帮助您了解这两种解决方案之间的主要异同。 我们将比较 Kafka 和 Pulsar,重点关注以下几个方面:
建筑。 可伸缩性、延迟和持久性等操作属性。
开发人员体验、社区和生态系统。
许可、部署选项和托管产品。
最后,我希望您能更清楚地了解每个平台的独特功能,以及哪一个最适合您组织的需求。
1. Apache Kafka 概述
Kafka 是一个分布式事件流平台,旨在处理高速、大容量和容错的数据流。 它最初由LinkedIn开发,后来捐赠给Apache软件协会。 Kafka 已迅速成为构建实时数据管道、事件驱动架构和微服务应用程序的热门选择。
1.核心竞争力
发布和订阅录制流。
以容错和持久的方式存储记录流。
与配套服务协同工作,在记录流(Kafka 流和 ksqldb)发生时对其进行处理。
2.主要特点:
为实时数据流提供高吞吐量、低延迟的消息传递。
支持数据分区和复制的可扩展架构。
它采用分布式容错设计,具有很强的耐久性保证。
使用 Kafka 生态系统(Kafka Streams 和 KSQLDB)的互补服务实现流处理功能。
通过 Kafka Connect 提供丰富的连接器和集成生态系统。
一个活跃的开源社区,支持多种编程语言。
2. Apache Pulsar 概述
Pulsar 是一个分布式消息传递系统,旨在处理高性能、低延迟的消息传递和数据流。 pulsar 最初由 Yahoo 创建,后来捐赠给 Apache Software,现在是构建实时数据管道和事件驱动架构的有力选择。
1.核心竞争力
支持发布子消息和消息队列。
以容错和持久的方式保留信息流。
本机支持多租户。
2.主要特点:
适用于实时数据流的高吞吐量、低延迟信息传输。
可扩展的多层架构,将存储层与服务层分开。
通过容错设计(包括地理复制)确保数据持久性。
基本的内置流媒体功能(脉冲星功能)。
提供适当规模的连接器生态系统,并与 Pulsar IO 集成。
通过官方和第三方客户端库支持多种编程语言。
3. Pulsar vs. Kafka:架构比较
现在让我们回顾一下 Pulsar 和 Kafka 的架构,了解它们的异同。
1.Apache Kafka 架构
概括地说,Kafka 架构由三个主要元素组成:生产者、消费者和代理。 生产者生成数据并将其发送给代理,而使用者读取代理摄取的数据。
代理运行在 Kafka 集群上,而生产者和消费者则与系统完全解耦。 每个代理将生产者发送的实际数据存储在一个主题(属于同一组类别的消息集合)中。 这些主题可以分为多个部分进行优化。 数据分区具有容错、可扩展、并行等优点。 此外,每个部分可能只包含主题的一部分,其余部分分配给其他部分。 这种方法有助于平衡代理之间的工作负载。 为了提高可靠性,可以将 Kafka 集群配置为不同主题的副本,从而限制不可用时的停机时间。
在上图中,您还可以看到一个 zookeeper 组件,该组件负责以下操作:
存储 Kafka 集群的元数据,例如主题、分区和副本等信息。
管理和协调 Kafka **,包括领导人选举。
出于安全目的,维护访问控制列表 (ACL)。
计划完全删除 ZooKeeper 依赖项。 (预计将于 2024 年 4 月发布)开始完全删除对 Zookeeper 的依赖。 取而代之的是一个名为牛皮纸的新机制(实际上已经为生产做好了准备)。 Kraft 没有在每个 Kafka 集群旁边运行一个 Zookeeper 集群,而是将元数据管理的责任转移到 Kafka 本身。 这简化了架构,降低了操作复杂性,并提高了可扩展性。
此外,还计划为 Kafka 引入分层存储方法。 本地层将使用 Kafka 代理上的本地磁盘来存储数据。 它旨在将数据保留短时间(例如小时)。 同时,远程存储将使用 Hadoop 分布式文件系统 (HDFS) 和 Amazon S3 等系统来长时间(数天、数月等)存储数据。
2.Apache Pulsar 架构
与 Kafka 类似,Pulsar 的架构包括经纪人、生产者和消费者。 broker 运行在 Pulsar 集群上,而生产者和消费者则与系统完全解耦。 每个代理都管理主题中生产者发送的实际数据。 就像 Kafka 一样,这些主题可以划分为许多分区,从而提供容错、可伸缩性和并行性等优势。
Zookeeper 也出现在 Pulsar 的架构中。 它用于各种任务,包括配置管理、节点之间的协调以及维护 Pulsar 集群的元数据。 如前所述,Kafka 正在远离 ZooKeeper,取而代之的是 Kraft。 Pulsar 并没有将 ZooKeeper 从其架构中剔除,但它确实提供了替代方案:本地内存、rocksdb 和 etcd(请注意,前两个仅适用于独立的 Pulsar 或单节点 Pulsar 集群)。
Pulsar 和 Kafka 最大的区别在于它把存储层和服务层分开了。 在 Pulsar 的架构中,broker 处理消息路由和传递,而 Apache Bookkeeper 处理长期存储。 具体来说,生产者发送的每条消息都会写入簿记员记事本。 这种分层存储方法意味着 Pulsar 的架构比 Kafka 的架构更复杂——需要管理的组件更多(至少目前是这样; 但如前所述,Kafka 还将引入分层存储方法)。另一方面,这种分离意味着可以独立缩放存储层和服务层。
4. Kafka 和 Pulsar:运行属性
Pulsar 和 Kafka 在存储和消息消费模式、延迟、吞吐量、持久性和可扩展性方面如何比较?
1.存储和信息使用
在信息使用和存储模式方面两种解决方案存在有很大的区别
Kafka 基于日志的存储模型对每个主题分区使用仅追加日志文件,并且信息按顺序写入并存储在磁盘上。 读数是连续的,从偏移量开始(请注意,使用者负责管理其偏移量)。 写入将追加到日志的末尾。 对于消息使用,Kafka 的拉取模型涉及使用者轮询来自 ** 的新消息。
相比之下,Pulsar 的分层存储模型将信息分成更小的段,并将其存储在多个簿记员账本(账本)中。 值得注意的是,信息片段也可以卸载到长期存储解决方案中,如Amazon S3或Google Cloud Storage。 信息通过基于推送的模型使用。
关于这些差异的几点评论:
虽然 Pulsar 的分层架构提高了网络利用率,并且需要将信息写入磁盘两次,但它也允许数据分段、高效管理,在某些情况下还可以加快检索速度。
与 Kafka 的简单架构相比,Pulsar 的分层架构可以增加运营复杂性(需要管理更多组件)。
在处理滞后的消费者时,Kafka 和 Pulsar 模型都可能导致缓存刷新问题。 由于额外的网络重定向和 IO 操作,Pulsar 的方法可能会加剧这个问题。
与 Kafka 相比,Pulsar 的推送模式可以减少延迟和资源消耗。 另一方面,在 Kafka 中,消费者可以提取信息,从而管理自己的流量控制。
2.性能
这是毫无疑问的Kafka 和 Pulsar 都是高性能的分布式流媒体和消息传递平台。很难(如果不是不可能的话)说哪一个在延迟和吞吐量方面更好。 一些基准测试显示 Pulsar 性能更好,而另一些基准测试则显示 Kafka 更胜一筹。
尽管如此,基于推送的消息传递系统和 Pulsar 等分层存储模型确实有助于减少延迟,因为它们有助于数据组织、提高存储资源的有效利用率并加快数据检索速度。
相反,Kafka 依赖于连续轮询过程,其中客户端以设定的时间间隔重复请求数据。 在消息量较低的期间,这可能会导致更高的延迟,因为客户端可能会在轮询间隔之间空闲等待。
然而,Pulsar 相对于 Kafka 的理论优势在实践中是否成立,取决于具体的工作量和使用模式。 最好还是自己做基准测试,以确定它是什么样子的。
3.可扩展性和持久性
Kafka 和 Pulsar 提供耐久性功能,以确保高可用性和系统弹性。 这两种解决方案都允许您无限期地存储消息,这对于发生故障或灾难时的恢复和连续性至关重要。 此外,Kafka 和 Pulsar 还支持地理复制(跨不同数据中心,甚至跨区域)。 Kafka 支持主题级复制; 另一方面,Pulsar 在主题和命名空间级别提供复制。 值得注意的是,与 Kafka 相比,Pulsar 在地理上复制数据时需要额外的“全局”Zookeeper 集群,这增加了复杂性。
Kafka 和 Pulsar 都是高度可扩展的平台。 与 Kafka 相比,Pulsar 的分段分层架构可能会在一定程度上提高灵活性和可扩展性(因为 Pulsar 的数据和服务层是独立扩展的)。
到目前为止,Kafka 可扩展性的最大瓶颈是 Apache Zookeeper 的使用。 ZooKeeper 存储 Kafka 的元数据,包括有关主题、分区、副本及其配置的信息。 ZooKeeper 限制了 znode(ZooKeeper 中的数据节点)中可以存储的最大数据大小。 此数据大小限制间接限制了 Kafka 可以管理的分区数(每个集群大约 500k 个分区)。
然而,如前所述,Kafka 正在消除对 Zookeeper 的依赖,转而支持 kraft。 换句话说,ZooKeeper 对每个集群施加的 500k 分区限制将不再存在。 Kraft 还带来了其他好处,例如,它支持控制器的近乎即时的故障转移,并简化了 Kafka 的架构、部署和配置。
无论有没有牛皮纸,Kafka 都可以毫不费力地扩展到绝大多数用例。 Pulsar 也非常适合处理大规模场景。 事实上,除非你正在处理超大规模方案(每天 PB 级数据和数万亿条消息),否则使用这两种工具中的任何一个都不太可能遇到严重的可伸缩性问题。 即便如此,通过重新架构或优化 Kafka 或 Pulsar 部署,也不可能不解决这些问题。
5. Kafka vs. Pulsar:生态系统
到目前为止,我们已经将 Kafka 和 Pulsar 视为高性能、高度可扩展且持久的解决方案。 但是,在选择数据流平台时,您不能只考虑延迟和规模。 考虑到这一点,让我们比较一下 Kafka 和 Pulsar 的开发者体验和生态系统。
1.GitHub 统计、资源、社区和文档、学习和培训
你需要一些背景知识来充分了解 Kafka 和 Pulsar 社区和资源之间的差异。
Kafka 在 2012 年成为 Apache 软件大会的官方项目,四年后的 2016 年,Pulsar 达到了同样的里程碑。 此外,Kafka 的开源特性有助于其快速采用对实时事件流解决方案的需求激增。
这在很大程度上说明了 Kafka 相对于 Pulsar 的优势,具体体现在以下几个方面。 话虽如此,Pulsar 的社区正在经历增长,这始终是项目未来增长的良好指标。
总之,不可否认的是,在文档、资源和社区方面,Kafka 优于 Pulsar。 Kafka 也更受欢迎(根据 GitHub 统计数据),也更容易学习(虽然 kafka 和 pulsar 都很难掌握)。
2.CLI 和客户端
总的来说,Kafka 和 Pulsar 在 CLI 工具方面似乎不相上下。 两者都提供了一个 CLI,允许您管理和与 Kafka Pulsar 部署进行交互。 当然,你可以用这些 CLI 做什么也存在一些差异(其中一些差异源于 Kafka 和 Pulsar 是具有一些不同功能的不同平台)。 例如,Kafka CLI 提供了更好、更详细的命令来管理消费者组,而 Pulsar 的 CLI 工具允许你管理包(这是 Kafka 的 CLI 无法做到的)。
Kafka 和 Pulsar 都通过其客户端库支持多种编程语言。 Kafka 在支持的语言数量上略有优势,这主要是因为它的存在时间更长,应用范围更广,这导致了更多第三方客户端库的开发。 有关详细信息,请参阅下一节。
3.语言支持
Kafka 提供了官方的 J**a 和 Scala 客户端库。 Confluent(由Apache Kafka的创建者创立)为C提供了许多其他官方支持的客户端,包括C++,C.NET、Python、GO 和 Nodejs。同样,Pulsar 也有 j**a、c、c++、c 的目标.NET、Python、GO 和 NodeJS 的官方客户端库。 从本质上讲,Pulsar 和 Kafka 通过其官方客户端库面向相同的编程语言(唯一值得注意的区别是官方 Kafka 客户端支持 Scala,而 Pulsar 不支持)。
除了这些官方客户外,还有:许多第三方 Pulsar 和 Kafka 客户端库其中大多数是开源项目。Kafka 略有优势,因为您可以找到用于 PowerShell、Perl 和 Swift 的 Kafka 客户端(这些语言没有 Pulsar 客户端库)。
请注意,Kafka 和 Pulsar 也提供了一些与语言无关的客户端。 例如,Pulsar 提供了 REST 和 WebSocket 客户端,而 Kafka 提供了多个 HTTP 客户端(官方和社区)。 了解有关 Kafka 客户端和 Pulsar 客户端的更多信息。
4.生态系统
与 Pulsar 相比,Kafka 拥有更大的生态系统。 Kafka Connect 框架可以方便地将数据从其他系统引入 Kafka,并通过 Kafka Connect 框架将数据从 Kafka 主题流式传输到不同的目的地。 有数百个连接器适用于不同类型的系统,例如数据库(如 MongoDB)、存储系统(如 Azure Blob 存储)、消息传递系统(RabbitMQ、JMS)等。
同时,虽然 Pulsar 的生态系统不如 Kafka 成熟,但它仍然提供了大量多样化的连接器,并与 Aerospike、Datadog 和 RabbitMQ 等其他系统集成。
在内置的流处理能力方面,Kafka 优于 Pulsar。 他们的 Kafka Streams 库允许您构建实时流处理应用程序,具有连接、聚合、窗口化和精确一次性处理等功能。 相比之下,Pulsar 仅通过 Pulsar 函数接口提供流处理的基本功能,适用于简单的**。 除了内置的流处理能力外,Kafka 和 Pulsar 还集成了 Apache Flink、Apache Storm 和 Apache Beam 等流处理解决方案。
6. Kafka vs. Pulsar:许可证和部署选项
本节比较了 Kafka 和 Pulsar 的许可条款、商业支持选项、部署模型和托管服务产品。
1.许可和商业支持
正如你所看到的,Kafka 和 Pulsar 在许可方面没有区别。这两个平台都是开源的——它们都使用 Apache 许可证 20.
尽管如此如果你不想自己管理 Kafka Pulsar,也有第三方厂商提供商业支持。不过,值得指出的是,与 Pulsar 相比,Kafka 的商业支持更加成熟和广泛。 有关详细信息,请参阅下一节。
2.部署模型和托管产品
Kafka 和 Apache 可以通过多种方式灵活部署,例如本地部署、云端部署、使用 Docker 或 Kubernetes。 此外,许多托管服务提供商两者都支持 Kafka 和 Pulsar,这简化了这些系统的部署、扩展和管理。 但是,需要注意的是Kafka 供应商的数量更多(也更知名)。。这并不奇怪,毕竟,卡夫卡的历史要长得多,并且比 Pulsar 更早(也更广泛)被采用。
7. Kafka vs. Pulsar:安全性
在选择数据流平台时,安全性通常是重中之重。 那么 Pulsar 与 Kafka 相比如何?
Kafka 和 Pulsar 都提供了强大的安全功能,例如加密和强大的身份验证和授权机制。
在某些方面,Pulsar 有优势例如,它本身支持端到端加密,并具有内置的审核日志。 这并不是说 Pulsar 本质上比 Kafka 更安全,也不是说 Kafka 缺乏关键的安全功能,但值得注意的是,Pulsar 提供了一些额外的安全机制,可能会派上用场。
结论
正如我们所看到的,Kafka 和 Pulsar 都是具有一些相似特征的数据流平台。 它们都是高吞吐量、低延迟、持久且高度可扩展的解决方案,通过官方和第三方客户端 SDK 具有良好的编程语言覆盖率。
但是,它们之间也有很多差异。 例如,Pulsar 有一些额外的安全功能(比如内置的审计日志)。 它还具有分层体系结构,可将存储层与服务层分开。 这为您提供了灵活性,因为层可以根据您的需求独立扩展。
另一方面,Kafka 的架构不太复杂,组件也更少。 此外,Kafka 拥有比 Pulsar 更强大、更成熟的连接器和集成生态系统,并提供更丰富的流处理能力。 Kafka也有一个更大的社区,Netflix和LinkedIn等巨头在其超大规模实践中对其进行了更广泛的测试。
Kafka 或 Pulsar 是否是流媒体用例的最佳选择,最终取决于您的决定。
原文丨quixio博客kafka-vs-pulsar-comparisoncompilation丨闻数舞。
*丨今日头条com/article/7296206768948970018/?log_from=13407589252bf_1699871003006
DBAPLUS 社区欢迎 editor@dbaplus 技术人员的贡献cn