前段时间,我写了一篇关于7个原因的帖子,我们选择阿帕奇脉冲星超过阿帕奇卡夫卡。从那时起,我一直在做一份详细的报告,比较卡夫卡和Pulsar,与开源Pulsar项目的用户交谈,并与我们的托管Pulsar服务,卡夫卡斯克的用户交谈。我意识到,我错过了一些原因,在第一个职位。所以,我想我可以做一个后续的帖子,添加到列表。
在深入探讨新原因之前,让我们快速回顾一下上一篇文章中提到的七个原因:
- 流和排队在一起:卡夫卡和兔子MQ在一个单一的平台,一个二对一的交易。
- 分区是可选的:使用 Pulsar,如果您不想使用,则无需乱搞分区。(我不想。
- 分布式日志:脉冲星日志是水平可扩展的,因为它被分发 —— 音乐到我的耳朵。
- 无状态代理:云原生梦想场景。我把自动缩放器放哪儿了?
- 本机异地复制:任何人,我的意思是任何人,都可以得到异地复制的工作。
- 它更快:测试已经表明。
- 所有ASF开源:没有人会从你下面拉出许可地毯。
这些是前七个原因。这些看起来很多,但我发现了更多。因此,让我们进入他们。
你也可能喜欢:卡夫卡以外的生活与阿帕奇脉冲星。
1. 与多租户相处
我真的应该在第一篇文章中谈论多租户,因为这是一件大事。即使您不打算构建托管 Pulsar 服务,除非您是一个事务者,否则将有多个团队使用消息传递基础结构处理多个项目。必须为每个团队或项目启动群集是一件痛苦。而且很贵。
使用 Pulsar,您可以有多个租户,并且这些租户可以有多个命名空间来保持有序。将其添加到每个命名空间的访问控制、配额和速率限制中,您可以想象将来,我们只需使用此群集即可相处。我们不仅能够想象这个未来,而且卡夫卡也能想象它。你可以在卡夫卡改进建议(KIP)KIP-37中读到。这件事已经讨论了一段时间了。
2. 我们有法定人数吗?复制
我们进入这里的杂草,但忍受我。您希望确保邮件永远不会丢失,因此请将邮件系统配置为在每条消息的两个或三个副本中,以防出现问题。
卡夫卡使用跟随式模式来这样做。领导者存储消息,跟随者复制该消息。一旦足够的追随者承认他们已经得到了它,卡夫卡是高兴的。脉冲星使用仲裁模型。它发送消息到一堆节点,一旦他们有足够的承认,他们已经得到了它,脉冲星很高兴多数人总是获胜,所有选票都是平等的。但这与技术无所谓。重要的是,仲裁复制往往会随着时间的推移提供更一致的行为。
这或许可以解释为什么 Pulsar 可提供更一致的延迟性能。如果你想进入卡夫卡和普尔萨尔延迟的血腥细节,看看我写的这个博客文章。(它很长。别说我没警告你。哦,卡夫卡也在考虑仲裁复制,以提高延迟一致性。查看KIP-250进行讨论。
3. 分层存储,事件采购梦想
像Kafka这样的流媒体系统最大的事情之一是它能够重播已经使用的消息。如果您第一次喜欢这些消息,重播它们以更正某些内容或围绕它们构建新应用程序很有趣。如果你这么喜欢这些消息,你想永远保留它们呢?比如说,如果你正在做事件采购。
这听起来是个好主意,但永远是一个巨大的时间,永远存储消息可能会变得昂贵,特别是如果你将它们存储在那些高性能的SSD,让你的邮件系统嗡嗡作响。
如果你能将这些旧消息(那些你需要保留的那些消息)转移到更便宜的存储解决方案上,这难道没有意义吗?如果你能像亚马逊S3水桶那样使用肮脏的廉价云存储,那岂不是很棒吗?你也许可以猜到我要去哪里借助 Pulsar分层存储,您可以自动将这些尘土飞扬的旧邮件推送到几乎无限、廉价的云存储中,并检索它们,就像您执行那些更新、新鲜、最新的消息一样。我敢打赌卡夫卡希望拥有这个功能。你猜对了,他们会的。它在KIP-405中描述。
4. 端到端加密和 Gobbledygook
显然,安全性很重要,您希望保护您的消息免受窥探。当然,您将在客户端和邮件系统之间使用 TLS(在传输中加密)。执行此操作时,邮件系统必须解密连接,以便它可以找出客户端试图说什么。
然后,它将在磁盘上保存未加密的消息。当然,您会坚持磁盘已加密,以便如果有人窃取了磁盘,您的邮件将是安全的(静态加密)。但在这两种情况下,邮件系统都有数据的键。如果没有,它将处理难以理解的吞噬流。
在许多情况下,这种级别的加密已经足够了,但是如果你想确保没有人可以偷看您的消息,你需要做端到端加密。生产者使用与接收消息的使用者共享的密钥在发送消息之前对其进行加密。当邮件保存在邮件系统的磁盘上时,它已加密,并且邮件系统没有密钥。邮件系统可以完成它的工作,但是您的消息对邮件系统是超级安全的。
Pulsar 可以在其 Java 客户端中执行端到端加密apache.org/confluence/display/KAFKA/KIP-317%3A+Add+end-to-end+data+encryption+functionality+to+Apache+Kafka”rel=”nofollow”目标\”\空白”[KIP-317。
5. 经纪人平衡法
在我的上一篇文章中,我谈到Pulsar经纪人是无国籍的,这是伟大的,但实际上有更多的故事。无状态组件是可取的,因为当一个组件过载时,只需添加另一个组件即可处理负载。当新客户端连接时,可以将它们定向到新实例。但是,这无助于首先超载的实例。您需要将一些工作从重载的实例转移到新的新实例。换句话说,您需要重新平衡负载。
脉冲星自动为您代理负载平衡。它监控 CPU、内存和网络(不是磁盘,我是否提到代理是无状态的?这意味着,你不必添加新的经纪人,直到你用完所有经纪人的容量,而不是因为其中一个是运行热。
您可以使用卡夫卡进行代理负载平衡。但是,你将不得不安装另一个包,如LinkedIn的巡航控制。或者,如果你喜欢(最终)支付的东西,你可以使用康康的再平衡工具。
社区和生态系统
我对上一篇文章的批评之一是,我没有提到卡夫卡社区和生态系统的规模和丰富性。这是一个公平的观点。在社区和生态系统类别中,卡夫卡击败了脉冲星。Kafka 作为一个开源项目有五年的起步时间,因此,它有理由认为,它将拥有更大的社区、更相关的项目,以及更多有关堆栈溢出的答案。
我只能说,脉冲星社区正在成长;人们定期贡献新的组件和集成,社区 Slack 渠道上的人们非常友好和支持。事实上,我还有一件事可以说。很显然,很多脉冲星都受到卡夫卡的启发和了解,而脉冲星则站在巨人的肩膀上。卡夫卡项目和社区值得高度赞扬和尊重。我知道有时听起来好像我是不尊重卡夫卡,但我真的只是对普尔萨尔感到兴奋。
合法的卡夫卡替代方案
在这篇文章和最后一个帖子之间,我最多有十几个理由选择普尔萨尔而不是卡夫卡。很酷的是,我越深入脉冲星,我发现的原因就越多。因此,将来可能需要第三篇博客文章。请继续关注。
我认为很显然,脉冲星是卡夫卡的一个合法替代者。Pulsar 支持与 Kafka 相同的大多数功能,但有几个(按我的计数计算为十几个)优势,并且随着更多的人了解它,其势头正在增强。如果你正在评估流媒体和/或排队系统,你欠自己看看ApachePulsar。