将 Lambda 与自行管理的 Apache Kafka 结合使用
本主题介绍了如何将 Lambda 与自行管理的 Kafka 集群结合使用。在Amazon术语中,自行管理的群集包括非Amazon托管 Kafka 集群。例如,可以通过 Confluent Cloud
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 ] } ] } ] } }