Kailas Jawadekar
September 15, 2021
合著者: Kailas Jawadekar & Julio Suarez, Arm 基础设施业务线
在当今互联的世界中,流数据可以从许多来源生成,例如应用程序、日志、Web 服务器、设备和事物。流数据本质上是连续生成的小规模事件,通常具有低延迟要求。对于企业而言,实时处理这些事件至关重要,因为这些数据的价值会随着时间的推移而显着降低。
从更侧重于批处理的传统系统到旨在以实时方式处理、转换和处理流数据事件的事件驱动系统,正在发生重大转变。
举个例子,让我们考虑一个电子商务网站,网站的访问者点击各个页面,搜索东西,并将东西添加到购物车中。这些是事件,您需要对这些事件进行实时处理和分析,以收集有关用户正在做什么以及产品如何执行的见解。根据这些见解,您可以决定提供实时促销或建议,以吸引用户购买某些商品。
同样,还有其他示例,例如信用卡公司跟踪您的卡交易以进行欺诈检测,监控系统检测特定位置的感兴趣事件。此外,工业物联网传感器会在边缘生成各种事件,您可能希望系统根据这些事件触发某些操作。
这样的用例非常适合像 Apache Kafka 这样的平台。事实上,Apache Kafka 已经成为事件流平台的事实上的标准。Apache Kafka 是一个开源事件流平台,支持广泛的工业、金融和消费者应用程序中的实时决策。今天,Apache Kafka 被 1000 家公司使用,其中包括 35% 的财富 500 强公司,用于高性能数据管道、流分析、数据集成和关键任务应用程序。其中许多公司的首选部署模型是在云服务提供商(例如 Amazon Web Services)上部署 Apache Kafka。
在 AWS 上,您可以在 EC2 或 Kubernetes 之上运行自我管理的 Kafka。Apache Kafka 部署和管理可能很复杂,因此如果您想降低复杂性和运营开销,您还可以使用 Amazon Managed Kafka (MSK) 流媒体。
Apache Kafka 每天可以处理数万亿个事件,并且需要在内存密集型实例上运行,这些实例可以快速高效地处理非常大的数据集。Amazon EC2 提供了多个内存优化实例,可以支持 Apache Kafka 工作负载,但运行时成本可能会有很大差异,具体取决于实例。
在本博客中,我们对在基于 64 位 Arm Neoverse 的 AWS Graviton2 处理器上运行的自我管理的 Apache Kafka 进行了性能基准测试。基于 64 位 Arm Neoverse N1 内核的 AWS Graviton2 处理器是使用现代 7nm 技术构建的自定义 CPU。这些 CPU 从头开始构建,专为云原生工作负载而设计和优化。与当前一代基于 X86 的实例相比,基于 Arm Neoverse 的高效架构帮助 AWS Graviton2 为各种工作负载提供高达 40% 的性价比。
下图表示我们设置的三节点 Kafka 集群和三节点 Zookeeper 集群。这用于跟踪 Kafka 集群中节点的状态并维护 Kafka 主题和消息的列表。
我们的基准测试测量 Kafka 集群上写入和读取事件的吞吐量和延迟。我们使用的吞吐量指标是每秒记录数 (RPS),延迟指标是以毫秒 (ms) 为单位的 99% 延迟。上图显示了 Kafka 集群由 m6g 实例组成。但是,作为测试的一部分,我们还通过创建具有各种其他实例类型和大小的三节点集群进行了测试。
作为测试的一部分,我们首先测量了各种实例的生产者 RPS 数字。然后为了探索性能/美元,我们将 RPS 数字除以各个实例的实例成本。结果如下图所示。
性价比数据显示,xlarge 实例更适合运行 Kafka 和 xlarge 实例。我们观察到基于 AWS Graviton2 的 Amazon EC2 r6g.xlarge 实例提供了最佳价值。平均而言,r6g.xlarge 实例比基于 x86 的 Amazon EC2 r5.xlarge 实例提供约 30% 的性能/美元优势,以及比 Amazon EC2 r5a.xlarge 实例约 19% 的成本性能优势。
有关我们的测试环境设置、基准和结果的更详细信息, 我们鼓励您下载以下白皮书,在 AWS Graviton2 上对 Apache Kafka 进行基准测试。