我正在尝试将数据(可能大于10mb)从aws lambda函数发送到正在写入本地数据存储的本地cdap应用程序。
我知道我可以使用on prem应用程序上的rest接口让lambda调用,但我想知道是否可以使用消息传递系统将on prem资源与aws lambdas集成(即lambda写入on prem应用程序可以读取的kafka主题)。
我不知道做这件事的最佳实践是什么,也不知道是否已经做到了。我想知道做这件事有哪些不同的选择。
事先谢谢你的帮助。
**我们的on-prem解决方案中kafka对消息大小的10mb限制遇到了问题。
4条答案
按热度按时间5cnsuln71#
更新的答案,以解释op对Kafka的偏好,并解决10mb的限制:
让兰姆达给Kafka发个信。
为此,您可以:
使您的kafka示例在网络外部可用,以便lambda可以访问它。或者,
将lambda放入专有网络,并将专有网络连接到您的内部网络(如果未设置直接连接)。
要绕过10mb的限制,可以将整个数据(超过10mb)分割成更小的数据块,并向Kafka发送多条消息。然后,如果需要,处理应用程序中块的连接。
原始答案:我的建议是:
让你的lambda写一个sns主题,onprem应用程序可以订阅这个主题。
这是因为这是最容易实现的解决方案。不过,sns可能不是应用程序的最佳选择。
其他选项包括:
同上,但使用运动代替sns。是否使用sns或kinesis取决于应用程序的需要。
在vpc中运行lambda并将vpc连接到vpn。这将允许lambda访问私有网络中的资源(如kafka示例)。
oug3syen2#
根据aws lambda函数的负载规模,可以使用aws sns(push)或aws sqs(pull),而不是维护apache kafka集群。
如果规模更大,或者内部基础设施中没有流式处理或排队功能来处理负载,或者内部资源中没有冗余,请使用sqs(完全管理的队列服务)。使用sqs时,您可以使用内部部署环境中的sqs SDK调用具有iam相关权限的sqs。
如果您的环境中有多个资源需要基于lambda执行触发,并且您需要基础结构设置来处理更高的规模,那么可以使用sns(完全管理的发布子消息服务)。在使用sns时,可以使用http触发器调用内部资源。
由于sqs或sns都不支持10mb的消息大小,因此在每次执行之后,您可以将10mb数据推送到aws s3,在aws s3中,bucket配置了向sqs或sns topic发送通知的事件。您的内部资源可以从sqs和sns读取消息,并从s3下载文件(包含10mb数据)。
rwqw0loc3#
从aws lambda发布到使用合流rest代理的aws托管的apachekafka集群。它甚至可以是一个托管服务,比如运行在aws中的confluent cloud,也可以是您自己专有网络中的kafka集群。然后,您可以通过多种方式将数据从aws kafka群集复制到on-prem群集,包括mirror maker、confluent replicator、另一个https或wss代理等。它应该是来自on-prem端和ssl/tls隧道的“拉”,否则它不会转换大多数客户端防火墙。
Kafka消息没有10 mb的硬限制。最大消息大小是一个可配置参数。但是,最好将消息大小保持在10mb甚至1mb以下,这是默认的最大大小值设置。对于较大的消息,您通常要么压缩它们,要么将它们分解为一系列较小的消息(使用一个公共密钥,使它们保持有序并转到同一个分区),要么将较大的消息存储在s3或其他外部存储中,然后发布对存储位置的引用,以便使用者可以从kafka带外检索它。
00jrzges4#