Estoy en el proceso de escribir una función Lambda que procesa elementos de un flujo de DynamoDB.
Pensé que parte del objetivo detrás de Lambda era que, si tengo una gran cantidad de eventos, activará suficientes instancias para pasar por ellas simultáneamente, en lugar de alimentarlas secuencialmente a través de una sola instancia. Siempre que dos eventos tengan una clave diferente, estoy de acuerdo con que se procesen fuera de servicio.
Sin embargo, acabo de leer esta página sobre Comprender el comportamiento de reintento , que dice:
Para orígenes de eventos basados en flujos (Amazon Kinesis Data Streams y flujos de DynamoDB), AWS Lambda sondea su flujo e invoca su función de Lambda. Por lo tanto, si una función de Lambda falla, AWS Lambda intenta procesar el lote de registros erróneo hasta el momento en que vencen los datos, lo que puede demorar hasta siete días para Amazon Kinesis Data Streams. La excepción se trata como un bloqueo y AWS Lambda no leerá ningún registro nuevo de la transmisión hasta que el lote de registros con errores caduque o se procese correctamente. Esto garantiza que AWS Lambda procese los eventos de transmisión en orden.
¿"AWS Lambda procesa los eventos de transmisión en orden" significa que Lambda no puede procesar varios eventos al mismo tiempo? ¿Hay alguna forma de que procese eventos de claves distintas al mismo tiempo?
Con AWS Lambda admite el factor de paralelización para los orígenes de eventos de Kinesis y DynamoDB, el orden aún está garantizado para cada clave de partición, pero no necesariamente dentro de cada fragmento cuando los lotes simultáneos por fragmento se establecen en más de 1. Por lo tanto, la respuesta aceptada debe revisarse .
Los registros de flujo se organizan en grupos o fragmentos.
Según la documentación de Lambda, la simultaneidad se logra a nivel de fragmento. Dentro de cada fragmento, los eventos de transmisión se procesan en orden.
Orígenes de eventos basados en secuencias : para funciones de Lambda que procesan secuencias de Kinesis o DynamoDB, la cantidad de fragmentos es la unidad de simultaneidad. Si su transmisión tiene 100 fragmentos activos, habrá como máximo 100 invocaciones de funciones de Lambda ejecutándose simultáneamente. Esto se debe a que Lambda procesa los eventos de cada fragmento en secuencia.
Y de acuerdo con Limits en DynamoDB ,
No permita que más de dos procesos lean del mismo fragmento de DynamoDB Streams al mismo tiempo. Superar este límite puede provocar la limitación de solicitudes.