当前位置: 首页 > article >正文

【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战

【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战

推荐超级课程:

  • 本地离线DeepSeek AI方案部署实战教程【完全版】
  • Docker快速入门到精通
  • Kubernetes入门到大师通关课
  • AWS云服务快速入门实战

目录

  • 【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战
    • 概述
    • ESM的预留模式
    • 激活ESM的预留模式
      • 使用AWS CLI激活
      • 使用AWS Lambda控制台激活
    • Kafka ESM的预留模式实战
      • Kafka ESM按需模式的基线性能配置文件
      • 场景1:配置最小事件轮询器并自动扩展
        • 配置10个最小事件轮询器
        • 配置100个最小事件轮询器
        • 场景2:默认最小事件轮询器,以及自动扩展
    • 可观察性和定价
    • 最佳实践和考虑因素
    • 结论

概述

当您使用事件驱动架构(Event-Driven Architectures,EDAs)构建现代应用程序时,事件生产者发布事件,然后由事件源连接器(如ESM)处理,并路由到无服务器计算消费者,如Lambda函数。Apache Kafka是一个流行的开源平台,用于构建使用Lambda函数作为消费者的实时流数据处理应用程序。AWS Lambda的完全托管MSK ESM或自管理的Kafka ESM从Kafka作为事件源读取事件,执行过滤和批处理等操作,并调用Lambda函数。这两种ESM都提供了与事件源的内置集成、自动扩展以及批处理和过滤等功能。创建Kafka ESM时,Lambda ESM分配一个事件轮询器以开始轮询Kafka主题中的消息。然后,ESM使用OffsetLag指标评估主题中所有分区的消息积压,并自动扩展事件轮询器以高效处理消息。

许多使用Kafka的实时应用程序对突发流量高峰非常敏感,这可能导致最终用户体验明显延迟。以前,在使用Kafka ESM时,没有控制可以优化对性能敏感的工作负载的吞吐量。这迫使您探索替代解决方案以满足具有严格性能要求的工作负载,这增加了架构的复杂性。为了将Lambda的功能用于这些性能敏感的应用程序,您需要能够控制Kafka ESM的吞吐量并确保响应式的自动扩展行为。

ESM的预留模式

ESM的预留模式是一个功能,帮助您控制ESM的吞吐量,并为对性能敏感的应用程序实现增强的性能配置文件,特别是那些遇到突发流量高峰的应用程序。您可以在一系列Kafka或Kafka兼容的流数据平台提供商(如Amazon MSK、Confluent、Redpanda和自管理的Kafka)上使用Kafka ESM的预留模式。
主要优势包括:

  1. 优化吞吐量的控制:您现在可以通过配置称为“事件轮询器”的最小和最大资源数量来微调ESM的吞吐量。事件轮询器(或“轮询器”)代表在预留模式下支持ESM的计算资源,并分配最多5 MB/s的吞吐量。
  2. 响应式自动扩展:在预留模式下,您的Kafka ESM会检测Kafka主题中所有分区的OffsetLag指标的增大,并以响应式的方式自动扩展事件轮询器。在空闲期间,您的ESM会自动缩减到您设置的最小事件轮询器数量。
  3. 简化的网络体验和费用:以前,您需要配置AWS PrivateLink或NAT网关,以使Lambda能够轮询VPC中的Kafka集群的消息并调用Lambda函数。在预留模式下,您不再需要配置PrivateLink或NAT网关。这种方法减少了开销并改善了开发者体验,使您能够专注于构建应用程序而不是管理网络设置。因此,当您在预留模式下使用Kafka作为Lambda的事件源时,不会收取PrivateLink VPC端点的费用,从而降低了您的网络费用。

激活ESM的预留模式

要为新创建或现有的Kafka ESM激活预留模式,您可以配置ESM的最小事件轮询器、最大事件轮询器或两者。最小事件轮询器的允许值范围是1到200,最大事件轮询器的允许值范围是1到2000。请注意,要激活预留模式,您必须配置至少一个最小或最大事件轮询器。当您只配置最小事件轮询器数量(‘仅最小值’)时,您的ESM将分配这个最小数量,并且可以动态扩展到最大值。这个最大值由OffsetLag决定,受限于分区数量或默认的最大事件轮询器数量,以较低者为准。当您只配置最大事件轮询器数量(“仅最大值”)时,您的ESM默认从一名最小轮询器开始,并且可以扩展到最大事件轮询器数量或分区数量,以较低者为准。当您同时配置最小和最大事件轮询器数量(“最小和最大”)时,您的ESM可以在配置的最小和最大事件轮询器范围内自动扩展。

使用AWS CLI激活

您可以在创建新的ESM时或通过更新现有的ESM来激活预留模式。指定**–provisioned-poller-config**参数。

aws lambda create-event-source-mapping \
    --region <区域名称> \
    --function-name <函数名称> \
    --event-source-arn <事件源ARN> \
    --provisioned-poller-config '{"MinimumPollers":<数字>, "MaximumPollers":<数字>}'

使用AWS Lambda控制台激活

在创建新的ESM或更新现有的ESM时,选择配置预留模式以激活预留模式。

在控制台中激活ESM的预留模式的图像。

Kafka ESM的预留模式实战

要查看Kafka ESM预留模式下的性能配置文件,请部署一个订阅Amazon MSK主题的Lambda函数。使用Serverless Land上的参考模式并查看这篇博客文章,其中概述了为Lambda函数配置MSK ESM的步骤。在这种情况下,生产者向MSK主题写入2000万条消息,每条消息的有效负载大小为1KB,均匀分布在100个分区上。使用100的批量大小,函数持续时间设置为100ms,并将StartingPosition设置为TRIM_HORIZON以从流的开始处理。

注意观察默认按需模式下的基线性能配置文件。然后分析激活预留模式下的两种配置。

  • 场景1 使用不同的最小事件轮询器配置
  • 场景2 使用默认的最小事件轮询器,并让Lambda通过自动扩展来管理事件轮询器。

Kafka ESM按需模式的基线性能配置文件

在禁用预留模式的情况下,Lambda大约需要20分钟来清空2000万条消息的积压。达到最大并发执行需要4分钟。使用这个结果作为比较预留模式ESM的基线。

没有预留模式的ESM基线性能图像。
图2:没有预留模式的ESM基线性能

场景1:配置最小事件轮询器并自动扩展

为了优化ESM的吞吐量并减少清空消息积压的时间,请配置最小事件轮询器。选择10和100作为最小事件轮询器的值,并观察结果。

配置10个最小事件轮询器

Lambda在最小轮询器设置为10的情况下,大约需要11分钟来清空2000万条消息的积压。这比没有预留模式的基线快了45%。达到最大并发执行大约需要6分钟。

最小事件轮询器设置为10的性能配置文件图像。

图3:最小事件轮询器设置为10的性能配置文件

配置100个最小事件轮询器

为了进一步提高处理性能,将最小事件轮询器配置为100。Lambda现在只需要6分钟来清空2000万条消息的积压,这比基线快了70%。立即达到最大并发执行。最小事件轮询器设置为100的性能配置文件图像。

图4:最小事件轮询器设置为100的性能配置文件

场景2:默认最小事件轮询器,以及自动扩展

在某些情况下,工作负载可能对性能不那么敏感。在您的Kafka主题中保持2000万条消息的相同数量,为ESM激活预留模式。从默认的最小事件轮询器(设置为1)开始,并让Lambda根据传入流量自动扩展事件轮询器。

Lambda会自动增加事件轮询器来处理传入的消息,并在积压清除后减少它们。使用默认的最小和最大事件轮询器,Lambda大约需要12分钟来清除2000万条消息的积压,这比基线快了40%。Lambda需要7分钟达到最大并发执行。

最小事件轮询器设置为1的性能配置文件图像。

图5:最小事件轮询器设置为1的性能配置文件

以下表格总结了使用ESM预留模式分析工作负载的性能提升情况。

ESM模式清空消息积压所需时间提升百分比
按需模式20分钟基线
预留模式:场景1(微调最小事件轮询器)
最小事件轮询器 = 1011分钟45%
最小事件轮询器 = 1006分钟70%
预留模式:场景2(默认最小事件轮询器)
最小事件轮询器 = 112分钟40%

表格:激活ESM预留模式前后参考测试案例的性能配置文件

可观察性和定价

您可以通过监控ProvisionedPollers Amazon CloudWatch指标来观察事件轮询器的使用情况,该指标测量在最后5分钟窗口内至少处理了一个事件的活动事件轮询器数量。

定价基于预留的最小事件轮询器和自动扩展期间消耗的事件轮询器数量。预留模式引入了一个名为事件轮询器单元(EPU)的计费单位。每个EPU支持高达20 MB/s的事件轮询吞吐量。分配在EPU上的事件轮询器数量取决于每个事件轮询器消耗的吞吐量。您为使用的EPU数量和它们运行的时间(以事件轮询器单元小时计)付费。详情请参考AWS Lambda定价。

最佳实践和考虑因素

对于您的Kafka事件源映射(ESM)的最小和最大事件轮询器的最佳配置取决于您的应用程序性能要求。从默认的最小事件轮询器开始,以建立性能配置文件的基础,并根据观察到的消息处理模式和您的应用程序性能要求调整事件轮询器。对于流量波动大且性能要求严格的工作负载,增加最小事件轮询器以处理突发流量。您可以通过评估所需的吞吐量、观察到的吞吐量(这取决于每秒摄入的消息数量和平均有效负载大小)以及一个事件轮询器的吞吐量能力(最多5 MB/s)来微调所需的最小事件轮询器数量。请注意,为了保持分区内的有序处理,Lambda将最大事件轮询器数量限制在主题的分区数量上。

在激活预留模式时,请更新您的网络设置,以删除现有ESM的PrivateLink VPC端点和相关权限。

结论

Lambda ESM的预留模式允许您通过配置最小和最大事件轮询器数量来微调Kafka ESM的吞吐量。这对于具有严格性能要求且流量不可预测和波动较大的Kafka应用程序提供了响应式的自动扩展行为。您可以根据需求微调配置的事件轮询器,并通过CloudWatch指标监控使用情况。预留模式还通过消除配置PrivateLink的要求简化了网络配置。


http://www.kler.cn/a/592433.html

相关文章:

  • Spring Boot集成MyBatis与MySQL
  • Swagger-告别手写文档
  • 第十五届蓝桥杯C/C++组:宝石组合题目(从小学奥数到编程题详解)
  • 【嵌入式Linux】基于ArmLinux的智能垃圾分类系统项目
  • 构建高效复杂系统的关键:架构与模块详解
  • 【Java】Mybatis学习笔记
  • k8s常用知识点总结
  • Matlab 汽车振动多自由度非线性悬挂系统和参数研究
  • USB(Universal Serial Bus)详解
  • ETL中的实用功能以及数据集成方式
  • 基于Spring Boot的流浪动物救助平台的设计与实现(LW+源码+讲解)
  • Vmware中的centos7连接上网
  • ==和equals的区别?
  • VLLM专题(三十六)—自动前缀缓存
  • Java 中的引导类加载器(Bootstrap ClassLoader) 详解
  • 如何理解分布式光纤传感器?
  • 49.71.79.51和49.71.79.42算不算同一个子网中的ip地址吗?
  • Day20:丑数
  • 解码软件需求的三个维度:从满足基础到创造惊喜
  • dart学习记录3(函数)