我正在尝试从AWS Lambda函数向正在写入本地数据存储的本地CDAP应用程序发送数据(可能大于10MB)。
我知道我可以在本地应用程序上使用REST接口让Lambda进行调用,但我想知道是否可以使用消息传递系统将本地资源与AWS Lambdas集成(即,Lambda写一个Kafka主题,本地应用程序可以从中读取。)
我不知道这样做的最佳做法是什么,或者是否已经完成。我想弄清楚这样做的不同选择是什么。
提前感谢您的帮助。
**在我们的本地解决方案中,我们遇到了Kafka对邮件大小限制为10MB的问题。
答案 0 :(得分:2)
更新了针对OP对Kafka的偏好以及解决10MB限制的帐户答案:
让Lambda向Kafka发送消息。
为此,您可以:
要解决10MB限制,请将整个数据(超过10MB)拆分为较小的块并向Kafka发送多条消息。然后,如有必要,处理应用程序中块的连接。
原始答案: 我的建议是:
让您的Lambda写入本地应用程序可以订阅的SNS主题。
这是因为这是最容易实现的解决方案。但是,SNS可能不是您应用程序的最佳选择。
其他选项包括:
与上述相同,但使用Kinesis代替SNS 。是否使用SNS或Kinesis的决定取决于您的应用需求。
在VPC中运行您的Lambda并将您的VPC连接到您的VPN 。这将让您的lambda访问您专用网络中的资源(如Kafka实例)。
答案 1 :(得分:1)
您可以使用AWS SNS(推送)或AWS SQS(Pull),具体取决于AWS Lambda函数的负载规模,而不是维护Apache Kafka集群。
由于SQS或SNS都不支持10MB的消息大小,因此每次执行后,您可以将10MB数据推送到AWS S3,其中桶配置了事件以向SQS或SNS主题发送通知。您的On-Premise资源可以从SQS和SNS读取消息,并从S3下载文件(包含10MB数据)。
答案 2 :(得分:0)
使用Confluent REST代理从AWS Lambda发布到AWS托管的Apache Kafka群集。这甚至可以是像AWS一样运行的托管服务,也可以是您自己的VPC中的Kafka集群。然后,您可以通过多种方式将数据从AWS Kafka集群复制到本地集群,包括Mirror Maker,Confluent Replicator,另一个HTTPS或WSS代理等。它应该是来自本地端和隧道的“拉”通过SSL / TLS或它不会转换大多数客户端防火墙。
Kafka消息没有10 MB的硬限制。最大邮件大小是可配置参数。但是,最佳做法是将邮件大小保持在10MB甚至1MB以下,这是默认的最大大小值设置。对于较大的消息,您通常要么压缩它们,要么将它们分成一系列较小的消息(使用公共密钥使它们保持有序并转到同一分区),或者将大消息存储在S3或其他外部存储中,然后发布对存储位置的引用,以便消费者可以从Kafka带外检索它。
答案 3 :(得分:0)