查看原文
其他

Apache Pulsar 分层存储帮你省钱

Jesse Anderson ApachePulsar 2021-10-18


企业在考虑部署实时消息系统时,总体硬件成本是很重要的。通过预先规划,企业可以节省高达 85% 的总体存储成本。


在比较存储成本之前,我先简要介绍一下 Apache Kafka 和 Apache Pulsar 如何存储数据,它们之间有何差异,以及为什么这些差异很重要。




Kafka 中的数据存储


在 Kafka 中,Broker 进程负责移动并存储数据。Producer 将数据发送到 Broker 进程中。当 Consumer 轮询数据时,从 Broker 中检索数据。Broker 进程接收到数据时,会将数据存储在单独的本地目录中。



Kafka 集群支持同时运行多个不同的 Broker 进程,而每个 Broker 进程分别运行在物理上独立的计算机或容器上。


Pulsar 中的数据存储


可以通过几种不同的方式建立 Pulsar 集群。这种可扩展性正是优化存储成本的方式。


简单的 Pulsar 设置


在 Pulsar 中,Broker 进程负责移动数据。Producer 将数据发送到 Broker 进程中。当 Consumer 推送数据时,数据来自 Broker。当 Broker 接收到数据时,会将数据存储在一个共置的 BookKeeper Bookie(BookKeeper 中存储数据的进程)中。


Pulsar 集群支持同时运行多个不同的 Broker 进程,而每个 Broker 进程分别运行在物理上独立的计算机或容器上。


具有独立 BookKepper 集群的 Pulsar


如图所示,Pulsar Broker 不直接存储数据,而是使用 Apache BookKeeper 来存储数据。数据发送/接收和存储的解耦使得 BookKeeper 可以在物理上独立的计算机或容器上运行。


在 Broker 保存消息时,只会将消息发送到 BookKeeper 进程中。这使 BookKeeper 集群和 Pulsar 集群可以相互独立地扩展。如果需要收发大量消息但只存储较短时间,则可以配置很多 Broker 和较少的 Bookie 节点;相反,如果收发消息速度慢但需要长时间存储,则可以配置少量的 Broker 和较多的 Bookie。


一个常见的问题是,将 Broker 和 Bookie 放在不同的计算机上是否会影响性能。Broker 会在内存中保留最新消息的缓存。但实际上,99.9% 的消息是缓存命中,因为大多数 consumer 只接收最新的消息。


卸载数据到 S3



Pulsar 的解耦存储架构确实是 Pulsar 的一个新特点,即分层存储。BookKeeper 可以根据管理员配置的策略自动将存储在 Bookie 上的数据移动存储到 S3 中。


注意: 虽然我建议卸载数据到 S3,但这并不是唯一的选择。S3 支持 Google Cloud Storage,并且将会支持 Azure Blob Storage,因此可以将 S3 看作你将会选择的云存储的简称。


虽然数据存储在 S3 中,但是由于 Bookie 负责数据移动,Broker 仍然可以访问 S3 中的数据。另外,S3 的 IO 比本地存储的数据慢。


存储的主要区别


在存储方面,Kafka 和 Pulsar 的主要区别在于是否耦合。在 Kafka 中,存储耦合到 Broker 中;在 Pulsar 中,存储与 BookKeeper 分离。



Kafka 确实能够将数据存储在 S3 中,可以通过手动设置 Kafka Connect 或编写自定义 Consumer 来实现。



上图展示了卸载数据到 S3 的注意事项。一旦数据卸载到 S3,就不能再通过 Kafka API 进行访问。必须使用支持 S3 的另一个计算引擎对数据进行后续处理或使用,否则需要将数据重新流回 Kafka 主题,再进行处理。



使用 Pulsar 就可以与计算引擎共享数据,也就是说,Broker 和计算引擎都可以访问旧数据。


例如,Spark 可以处理 S3 中的旧消息,同时,Pulsar Consumer 能够请求这些旧消息。请注意,在其他计算引擎中读取 Pulsar 数据需要一种自定义输入格式,这种格式可以理解 Pulsar 的磁盘格式。在撰写本文时,Pulsar 支持用于 Spark、Flink 和 Presto 的连接器。




计算成本


我们已经分别介绍了 Kafka 和 Pulsar 如何存储数据,接下来可以开始计算成本了。为了使计算简单而具体,我们将采用 Amazon Web Service 2019 年 1 月在美国东部(俄亥俄州)地区的定价。S3 每 GB 每月的费用为 0.023 美元,Amazon EBS 通用 SSD 预配置存储每 GB 每月费用为 0.10 美元。


在这种情况下,假设每天存储 500 GB 的消息,需要存储 14 天,大约有 7000 GB 的原始事件消息。


在 Kafka 和 Pulsar 中,为提高可用性,数据以三副本形式保存,这就需要 21,000 GB 的存储空间。不考虑 S3,Kafka 和 Pulsar 仅存储每年就要花费 25200 美元。


使用 Pulsar 和 S3,就不需要在 BookKeeper 上存储 14 天,可以只在 Pulsar 上存储 1 天,另外 13 天存储在 S3 上(大部分情况下,使用几分钟前的数据)。也就是说,需要 1,500 GB 的 EBS(500 GB x 3 份副本)和 6,500 GB 的 S3(S3 不直接对冗余收费)。


EBS 每年的费用为 1,794 美元,S3 每年 1,800 美元,总共为 3,594 美元。显然,S3 请求的成本没有包含在内,但每年的费用应该在 50-300 美元之间。


在不损失数据可用性的条件下,这两种选择的费用相差了 85.7%。为了估算成本差异,我做了一个 Pulsar_Storage_Savings 文件。在表格中输入数据,就可以看到价格差异。


关于费用的补充


对于云用户而言,S3 中数据的归档存储已经纳入预算,这样可以节省费用。


还有一些更便宜的 S3 层,SLAs 更低,价格也更低,例如:Glacier。选用 Glacier,S3 每 GB 每月的费用将从 0.023 美元降至 0.004 美元。


可以根据用例和集群需要,选择合适数量的 Pulsar Brokers 与 BookKeeper Bookie 节点来优化成本。EC2 成本通常要比存储成本高得多。


了解 Kafka 和 Pulsar 在存储上的差异,的确可以优化存储支出。在灵活地交付业务所需的内容的同时,还可以降低 IT 开销。


想要随时掌握 Pulsar 的研发进展、用户案例和热点话题吗?快来关注 Apache Pulsar 和 StreamNative 微信公众号,我们第一时间在这里分享与 Pulsar 有关的一切。

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存