使用远程函数的Flink状态函数涉及Flink StateFun集群将计算任务的执行交给通过某些FaaS机制部署的远程工作人员,例如AWS Lambda。
AWS lambda受扩展限制(它们可以扩展多快以及扩展到什么限制),如文档中所述。请注意,Lambda的并发性配额适用于帐户,而不是每个单独的Lambda函数。
在大规模流系统中,特别是如果单个Lambda调用执行的工作相对于该期间数据流中遇到的键的数量相对较长,可以想象Flink StateFun集群可能会遇到Lambda throttling事件。换句话说,当试图通过API网关调用Lambda时,StateFun集群将从API网关收到429错误,因为同时调用Lambda的数量达到了限制。
Flink是如何处理的?它是否实现了回退/重试,以及如何处理数据流中事件的排序?
目前,StateFun将429状态码视为常规瞬态错误,并在应用指数回退后重试。
如何处理数据流中事件的排序?
StateFun保证每个地址的事件严格排序,即使存在背压或瞬态错误。它在技术上是通过将每个地址的有界队列保持为Flink状态来实现的。当这些队列中的任何一个超过其预定义的大小时,将对Ingress施加背压。