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

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

注意

如果想要将数据发送到 Lambda 函数以外的目标,或要在发送数据之前丰富数据,请参阅 Amazon EventBridge Pipes(Amazon EventBridge 管道)。

Lambda 支持将 Apache Kafka 作为事件源。Apache Kafka 是一个开源事件流平台,支持数据管道和流分析等工作负载。

您可以使用AWS托管的 Kafka 服务 Amazon Managed Streaming for Apache Kafka(Amazon MSK),简称自行管理的 Kafka 集群。有关结合 Amazon MSK 使用 Lambda 的详细信息,请查阅 结合 Amazon MSK 使用 Lambda

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

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

警告

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

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

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

示例事件

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

{ "eventSource": "SelfManagedKafka", "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com: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 ] } ] } ] } }