如何选择 Apache Kafka 与 Apache Pulsar?

如今,可扩展的发布/订阅消息传递实际上是Apache Kafka的同义词。 无论您要添加Apache Storm或Apache Spark之类的东西进行处理还是使用Apache Kafka本身提供的处理工具,Apache Kafka仍然是分布式流应用程序的坚如磐石的,开源的首选。 但是,卡夫卡并不是镇上唯一的游戏。

由雅虎开发,现在是Apache软件基金会项目, Apache Pulsar成为Apache Kafka多年来使用的消息传递的王冠。 在许多情况下,Apache Pulsar具有比Apache Kafka更快的吞吐量和更低的延迟的潜力,以及兼容的API,使开发人员可以相对轻松地从Kafka切换到Pulsar。

在久经考验的Apache Kafka和暴发户Apache Pulsar之间应该如何选择? 让我们看看他们的核心开源产品以及核心维护者的企业版带来了什么。

Apache Kafka

Apache Kafka由LinkedIn开发,并于2011年作为开源发布,它已经广泛传播,几乎成为许多人在向架构中添加服务总线或发布/订阅系统时的默认选择。 自Apache Kafka首次亮相以来,Kafka生态系统有了长足的发展,添加了Scheme Registry以在Apache Kafka消息传递中实施模式,Kafka Connect可以轻松地从其他数据源(例如数据库)流式传输到Kafka,用于分布式流处理的Kafka Streams,以及最近的KSQL对Kafka主题执行类似SQL的查询。 (Kafka中的主题是特定频道的名称。)

过去几年建立的许多实时管道的标准用例是将数据推入Apache Kafka,然后使用流处理器(例如Apache Storm或Apache Spark)来引入数据,执行和处理,然后发布输出到另一个主题以供下游消费。 使用Kafka Streams和KSQL,可以处理您所有的数据管道需求,而不必随时离开Apache Kafka项目,但是当然,如​​果需要,您仍然可以使用外部服务来处理数据。

从开发人员的角度来看,Apache Kafka一直非常友好,但在操作上却是一团糟。 小型集群的启动和运行相对容易,但是维护大型集群通常会遇到很多问题(例如,在Kafka代理失败后进行领导者分区交换)。

此外,通过称为MirrorMaker的实用程序支持多租户的方法已经成为确保SRE拔头发的必经之路。 确实,MirrorMaker被认为是一个问题,像Uber这样的公司已经创建了自己的跨数据中心复制的系统( uReplicator )。 Confluent将Confluent Replicator作为其Apache Kafka企业产品的一部分。 谈到必须维护MirrorMaker设置的人,可惜Replicator不是开源版本的一部分。

但是,在操作方面绝对不是坏消息。 当前的Apache Kafka 1.x系列已经做了很多工作,以减轻运行集群的麻烦。 最近,发生了一些更改,使系统可以更简化地运行超过200,000个分区的大型集群 ,并且诸如向“ Kafka Connect”添加“死信”队列之类的改进使识别和恢复数据源和接收器中的问题变得如此之多。更轻松。 我们还可能会看到2019年在Kubernetes上运行Apache Kafka的生产级支持(通过Helm图表和Kubernetes运算符)。

早在2014年,Kafka的三个原始开发人员(Jun Rao,Jay Kreps和Neha Narkhede)组建了Confluent ,在其Confluent平台中提供了其他企业功能,例如上述的Replicator,Control Center,附加的安全性插件和通常的支持和专业服务产品。 Confluent还提供云服务Confluent Cloud,这是一项完全托管的Confluent平台服务,可以在Amazon Web Services或Google Cloud Platform上运行,如果您不想自己处理运行集群的部分运营开销。

如果您被锁定在AWS上并使用Amazon服务,请注意,Amazon推出了Amazon Managed Streaming for Kafka(MSK)的公开预览,该预览版是AWS生态系统中的完全托管Kafka服务。 (还请注意, 不是与Confluent合作提供Amazon MSK,因此运行MSK不会让您获得Confluent Platform的所有功能,而只能获得开源Apache Kafka中提供的功能。)

Apache Pulsar

鉴于Apache Software Foundation倾向于选择似乎重复功能的项目(您是否希望Apache Apex,Apache Flink,Apache Heron,Apache Samza,Apache Spark或Apache Storm满足您的有向非循环图数据处理需求?),您将在选择Apache Kafka作为满足您的消息传递需求的可信赖选项之前,请原谅有关Apache Pulsar成为Apache顶级项目的公告。 但是Apache Pulsar应该值得一看。

Apache Pulsar诞生于Yahoo,该公司旨在满足当时其他开放源代码产品无法提供的组织需求。 结果,Pulsar从头开始构建,可处理数百万个主题和分区,并完全支持地理复制和多租户。

在幕后 ,Apache Pulsar使用Apache BookKeeper来满足其存储需求,但有一个不同之处:Apache Pulsar具有一个称为“分层存储”的功能。 分布式日志系统的问题之一是,尽管您希望数据在日志平台中保留的时间尽可能长,但是磁盘驱动器的大小并不是无限的。 在某个时候,您决定删除这些消息或将它们存储在其他位置,以便将来在需要时可以通过数据管道重播这些消息。 哪个可行,但操作上可能会很复杂。 Apache Pulsar通过分层存储可以自动将较旧的数据移动到Amazon S3,Google Cloud Storage或Azure Blog Storage,并且仍然向客户端提供透明视图; 客户端可以从时间开始读取,就像所有消息都存在于日志中一样。

就像Apache Kafka一样,Apache Pulsar已经发展了一个用于数据处理的生态系统(尽管它也提供了适用于Apache Spark和Apache Storm的适配器)。 Pulsar IO等同于Kafka Connect,可作为源或接收器连接到其他数据系统,并且Pulsar Functions提供数据处理功能。 通过使用适用于Facebook的开源Presto引擎的适配器来提供SQL查询。

一个有趣的问题是,Pulsar功能和Pulsar IO在标准Pulsar群集中运行,而不是可能在任何地方运行的独立进程。 虽然这降低了灵活性,但从操作的角度来看确实确实使事情变得简单得多。 (有一种本地运行模式,可能会滥用该本地运行模式来在集群外部运行功能,但是文档完全说“不要这样做!”。)

Apache Pulsar还提供了在集群内部运行功能的不同方法:它们可以作为单独的进程,作为Docker容器运行,或者作为在代理的JVM进程中运行的线程运行。 这与Apache Pulsar的部署模型有关,后者已经在生产中支持Kubernetes或Mesosphere DC / OS。 要注意的一件事是,Pulsar函数,Pulsar IO和SQL是Apache Pulsar的相对较新的新增功能,因此,如果使用它们,可以期待一些优势。

还有一个有限的,仅Java的,与Kafka兼容的API包装器,因此您可以将现有的Apache Kafka应用程序集成到Apache Pulsar基础架构中。 这可能比生产解决方案更适合于探索性测试和临时迁移计划,但很高兴!

与Confluent相似,雅虎Apache Pulsar的开发人员(Matteo Merli和Sijie Guo)成立了一家分拆公司Streamlio ,他们与Apache Heron的创建者(Karthik Ramasamy和Sanjeev Kulkarni)共同创立了公司。 Streamlio的企业产品包括通常的商业支持和专业服务解决方案,以及一个封闭源管理控制台,但是诸如高效,持久的多租户支持之类的东西是核心开源产品的一部分。

Apache Kafka或Apache Pulsar?

Apache Kafka是成熟,有弹性且经过考验的产品。 它使用几乎每种流行语言编写的客户端,以及Kafka Connect中用于不同数据源的众多受支持的连接器。 通过Amazon和Confluent提供的托管服务,可以轻松地建立,运行和维护大型的Kafka集群,这比往年要容易得多。 我将继续在新项目中使用Apache Kafka,并且很可能会在未来很多年中继续使用Apache Kafka。

但是,如果您要构建的消息传递系统从一开始就必须是多租户或地理复制的,或者具有大量数据存储需求,并且无论如何处理都需要轻松查询和处理所有数据过去很久以前,我建议您踢一下Apache Pulsar。 它绝对适合Apache Kafka可能遇到的一些用例,同时在分布式日志平台所需的核心功能方面也能很好地工作。 而且,如果您不介意在文档和Stack Overflow问题方面处于领先地位,那就更好了!

 

From: https://www.infoworld.com/article/3379120/apache-kafka-vs-apache-pulsar-how-to-choose.html

你可能感兴趣的:(apache)