译文|选择 Apache Pulsar 而非 Kafka 的 10 个理由
原文作者 Maximilian Michels,翻译 Sijia@StreamNative,如需转载,请后台留言。
英文链接:https://dzone.com/articles/10-reasons-to-choose-apache-pulsar-over-apache-kaf
关于 Apache Pulsar
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。
GitHub 地址:http://github.com/apache/pulsar/
Apache Pulsar 具有众多独特优势,如分层存储、无状态 broker、跨地域复制、多租户等,这些特性让 Pulsar 比 Kafka 更胜一筹。
如果你还在 Pulsar 和 Kafka 的选择上犹豫不决,希望本文总结的 Pulsar 十大优势可以帮你作出决策。
无状态的 broker(易扩展)
使用 Kafka 时,需要先设置 broker 的数量。由于 Kafka 将数据存储在 broker 中,因此在使用过程中,一旦发现设置值偏小,需要更多 broker 来扩展应用程序时,就需要充分利用新分区,必须对 topic 重新分区。
Pulsar 将 broker 的状态保存在单独的层( Apache BookKeeper[1])中。Broker 层与存储层解耦,无需移动数据即可添加或使用 broker。也就是说,无需对现有数据进行重新分区也可以充分利用新 broker。
分层存储(持久存储消息、降低存储成本)
Kafka 默认数据保留时间为 7 天,也就是说,一周后会删除数据。而 Pulsar 默认保留所有未 ack 的数据,并立即删除已 ack 的数据。
Kafka 和 Pulsar 都支持通过自定义保留策略修改数据保留期限。但是,主存储中可存储的数据量会受到限制,增加数据量也会增加存储成本。分层存储支持为不同类型的数据选择节约成本又合适的存储。例如,仅在引导(回填)应用程序中会用到历史数据,因此可以为历史数据选择不同的存储类型。
Pulsar 的存储层采用分片架构,分片分布在存储节点上。使用 Pulsar,既可以写入分片到主存储,也可以卸载分片到其他类型的存储中。因此,Pulsar 支持分层存储,但 Kafka 目前还不支持分层存储。分层存储提供多个存储层,如主存储(基于 SSD)、历史存储(S3)等,因此可以轻松获取每一层的存储情况。
基于 quorum 复制(改善延迟一致性)
Pulsar 采用基于 quorum 的算法进行复制,而 Kafka 采用基于 leader-follower 的算法。虽然 Pulsar 和 Kafka 的保证相同,但基于 quorum 方式产生的延迟一致性更高。对于很多应用程序来说,延迟一致性很重要,例如,获取某些 SLA(如查询的响应时间)。
跨地域复制(高可用)
Pulsar 原生支持跨地域复制,因此 Pulsar 可以跨不同地理位置的数据中心复制数据。当数据中心中断或网络分区时,在多个数据中心存有消息副本尤为重要,提高可用性。
多租户(简化架构和管理)
Pulsar 支持多租户,即多个用户组通过访问控制或在完全不同的命名空间中共享同一集群。Kafka 目前不支持多租户,因此要共享集群就需要基于消息系统搭建一个抽象的层,或者每个用户组单独使用一个集群。
信息加密(提高安全性)
Pulsar 提供从客户端到存储节点的端到端完全加密。完全加密一般是对数据安全性的要求。Kafka 目前不支持端到端加密。
多协议支持(易与现有应用程序集成)
Pulsar 不仅支持多种协议(如 RabbitMQ、AMQP、Kafka),还支持使用 Presto[2] 并行读取历史流事件。
Pulsar Functions(一站式流处理)
Pulsar Functions 是基于 Pulsar 的轻量级流处理方式,其概念类似于 Kafka Streams。Pulsar Functions 直接部署在 broker 节点上(或作为 Kubernetes 集群中的容器),而 Kafka Streams 则是一个单独的应用程序。通过 Pulsar Functions,Pulsar 可以直接解决许多流处理任务,简化操作。
Apache Flink 集成(批处理和流处理)
Pulsar 社区就 Pulsar Functions 的局限性展开了一系列公开讨论,例如状态管理、DAG 流程等。如果 Pulsar Functions 不适用于你的使用场景,你可以考虑另一个广受欢迎的开源工具——Pulsar Flink connector[3]。
Pulsar 已经过实践检验(已用于大规模生产环境)
Pulsar 在设计上具有诸多优势。最初由雅虎团队开发,用于雅虎内部。2016 年,雅虎将 Pulsar 捐赠给 Apache 软件基金会[4]。之后,很多任务关键型应用程序都采用了 Pulsar,例如腾讯、Splunk[5]等等[6]。
Pulsar 并非十全十美
Pulsar 需要两个系统:Apache BookKeeper 和 Apache ZooKeeper,而 Kafka“只”需要 ZooKeeper。多个系统会增加操作复杂性,但也正因为采用多个系统,Pulsar 才更灵活。由于 Kafka 和 Pulsar 都使用了其他系统,二者都需要设置和维护。
在 Pulsar 和 Kafka 之间作出选择并不容易,这一决定也会带来一系列影响。我在本文中总结了 Pulsar 和 Kafka 之间的主要差异,希望这些信息可以帮助你和你的团队作出选择。如需进一步了解 Apache Pulsar 的信息,可以访问 pulsar.apache.org 或订阅邮件通知[7]。如果想要与社区的小伙伴取得联系,可以扫描文末二维码加入微信交流群。
相关阅读
· 译文|Iterable:从 Kafka 到 Pulsar,我们选对了!
引用链接
[1]
Apache BookKeeper: https://bookkeeper.apache.org/[2]
Presto: https://prestodb.io/[3]
Pulsar Flink connector: https://github.com/streamnative/pulsar-flink[4]
Apache 软件基金会: https://apache.org/[5]
Splunk: https://www.splunk.com/en_us/blog/it/life-beyond-kafka-with-apache-pulsar.html[6]
等等: https://pulsar.apache.org/en/powered-by/[7]
订阅邮件通知: https://pulsar.apache.org/contact/