我正在尝试在 AWS 服务之上构建数据收集管道。总体架构如下;
总之,系统应该从 API 网关 (1) 获取事件(每个事件一个请求),并且数据应该写入 Kinesis (2)。
我期待每秒约 10 万个事件。我的问题与 Lambda 函数上的 KPL 使用有关。在第 2 步中,我计划使用 KPL 编写一个 Lambda 方法,以在 Kinesis 上以高吞吐量写入事件。但我不确定这是否可行,因为 API Gateway 分别为每个事件调用 lambda 函数。
在这种架构中使用 KPL 是否可能/合理,还是我应该使用 Kinesis Put API?
1 2 3 4
+----------------+ +----------------+ +----------------+ +----------------+
| | | | | | | |
| | | | | | | |
| AWS API GW +-----------> | AWS Lambda +-----------> | AWS Kinesis +----------> | AWS Lambda |
| | | Function with | | Streams | | |
| | | KPL | | | | |
| | | | | | | |
+----------------+ +----------------+ +----------------+ +-----+-----+----+
| |
| |
| |
| |
| |
5 | | 6
+----------------+ | | +----------------+
| | | | | |
| | | | | |
| AWS S3 <-------+ +----> | AWS Redshift |
| | | |
| | | |
| | | |
+----------------+ +----------------+
我也在考虑直接写入 S3 而不是从 api-gw 调用 lambda 函数。如果第一个架构不合理,这可能是一个解决方案,但在这种情况下,我会延迟将数据写入 kinesis
1 2 3 4 5
+----------------+ +----------------+ +----------------+ +----------------+ +----------------+
| | | | | | | | | |
| | | | | | | | | |
| AWS API GW +-----------> | AWS Lambda +------> | AWS Lambda +-----------> | AWS Kinesis +----------> | AWS Lambda |
| | | to write data | | Function with | | Streams | | |
| | | to S3 | | KPL | | | | |
| | | | | | | | | |
+----------------+ +----------------+ +----------------+ +----------------+ +-----+-----+----+
| |
| |
| |
| |
| |
6 | | 7
+----------------+ | | +----------------+
| | | | | |
| | | | | |
我不认为在这里使用 KPL 是正确的选择。KPL 的关键概念是,记录在客户端收集,然后作为批处理操作发送到 Kinesis。由于 Lambda 每次调用都是无状态的,因此很难存储用于聚合的记录(在将其发送到 Kinesis 之前)。
我认为您应该查看以下 AWS 文章,其中解释了如何将 API-Gateway 直接连接到 Kinesis。这样,您可以避免仅转发您的请求的额外 Lambda。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句