将 Lambda 与自行管理的 Apache Kafka 结合使用 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 Lambda 与自行管理的 Apache Kafka 结合使用

本主题介绍了如何将 Lambda 与自行管理的 Kafka 集群结合使用。在Amazon术语中,自行管理的群集包括非Amazon托管 Kafka 集群。例如,可以通过 Confluent Cloud 等云提供程序来托管 Kafka 集群。

Apache Kafka 作为事件源,运行方式与使用 Amazon Simple Queue Service (Amazon SQS) 或 Amazon Kinesis 相似。Lambda 在内部轮询来自事件源的新消息,然后同步调用目标 Lambda 函数。Lambda 批量读取消息,并将这些消息作为事件有效负载提供给您的函数。最大批处理大小是可配置的(默认值为 100 条消息)。有关更多信息,请参阅 批处理行为

要优化自我管理的 Apache Kafka 事件源映射的吞吐量,请配置预调配模式。在预调配模式下,您可以定义分配给事件源映射的事件轮询器的最小和最大数量。这可以提高事件源映射处理意外消息激增的能力。有关更多信息,请参阅预调配模式

警告

Lambda 事件源映射至少处理每个事件一次,有可能出现重复处理记录的情况。为避免与重复事件相关的潜在问题,我们强烈建议您将函数代码设为幂等性。要了解更多信息,请参阅 Amazon 知识中心的如何让我的 Lambda 函数保持幂等性

对于基于 Kafka 的事件源,Lambda 支持处理控制参数,例如批处理时段和批处理大小。有关更多信息,请参阅 批处理行为

有关如何使用自行管理的 Kafka 作为事件源的示例,请参阅Amazon计算博客上的使用自行托管的 Apache Kafka 作为 Amazon Lambda 事件源

事件示例

当 Lambda 调用 Lambda 函数时,它会在事件参数中发送一批消息。事件负载包含一个消息数组。每个数组项目都包含 Kafka 主题和 Kafka 分区标识符的详细信息,以及时间戳和 base64 编码的消息。

{ "eventSource": "SelfManagedKafka", "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.cn-north-1.amazonaws.com.cn:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.cn-north-1.amazonaws.com.cn:9092", "records":{ "mytopic-0":[ { "topic":"mytopic", "partition":0, "offset":15, "timestamp":1545084650987, "timestampType":"CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers":[ { "headerKey":[ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ] } }