在这篇文章中,我们将会介绍 MemQ(发音为 mem - queue),它是一种用于 Pinterest 云端开发的高效可扩展 PubSub 系统,从 2020 年年中开始就为我们的近实时数据传输用例提供了支持,它是 Kafka 的一个补充,并且在成本效益方面高达 90%
历史
近十年来,Pinterest 一直依赖Apache Kafka作为唯一的 PubSub 系统。由于 Pinterest 的发展,数据的数量也在不断增加,因此,在运行一个超大规模的分布式 PubSub 平台上所面临的挑战也与日俱增。Apache Kafka 的规模化经营使我们对构建可扩展的 PubSub 系统有了深刻的认识。在深入研究了 PubSub 的运营和可扩展性之后,我们得到了如下主要的结论:
-
并非所有的数据集都要求亚秒级的延迟,延迟和成本应该成反比(更低的延迟应该花费更多的成本)。
-
为了实现基于资源的独立可扩展性,必须将 PubSub 系统中的存储和服务组件分离。
-
根据读而非写来进行排序,为特定的消费者用例提供所需的灵活性(对于同一数据集,不同的应用程序可能会有不同的需求)。
-
在大多数情况下,严格的分区排序在 Pinterest 是没有必要的,并且常常会带来可扩展性方面的问题。
-
Kafka 中的再平衡成本很高,常常会造成性能的降低,并且会对已饱和的集群用户造成不利的影响。
-
在云环境中进行自定义复制会花费很大。
2018 年,我们对一个能够原生利用云计算的全新 PubSub 系统进行了测试。2019 年,我们开始正式探讨各种方案,以应对 Pinterest 的可扩展性,并基于运营成本以及现有技术的再设计成本,对各种 PubSub 技术进行了评估。最后得出的结论是,我们必须要有一个基于 Apache Kafka、 Apache Pulsar和 Facebook Logdevice 的 PubSub 技术,它是为了云计算而创建的。
MemQ 是一个新的 PubSub 系统,它加强了 Pinterest 的 Kafka。该系统采用了与 Apache Pulsar 和Facebook Logdevice 相类似的解耦存储与服务架构;但是,其主要依靠可插入式复制存储层,也就是对象存储/DFS/NFS 来存储数据。最后的结果就是一个 PubSub 系统:
-
处理 GB/s 流量
-
独立地扩展、写入和读取
-
不需要昂贵的再平衡来处理流处理的增长
-
比我们的 Kafka 足迹高出 90%