AWS Kinesis, procesamiento Lambda concurrente con pedido garantizado

Aug 19 2020

Tengo un Lambda con una fuente de eventos apuntada a un consumidor de transmisión de Kinesis (con un número arbitrario de fragmentos)

Me gustaría asegurarme de que Lambda procese los elementos de la secuencia con la misma 'clave de partición' en secuencia y no simultáneamente. (Esto se está utilizando como la identidad del objeto y no quiero que varias Lambdas realicen la lógica en el mismo objeto simultáneamente).

Por ejemplo, si los elementos de la secuencia tienen claves de partición:

1,2,1,3,4,1,2,1

Si tomamos el orden de procesamiento de izquierda a derecha, Lambda procesaría un elemento con cada una de las claves de partición 1, 2, 3 y 4 al mismo tiempo. Luego, cuando ha terminado un artículo con una clave de partición específica, puede comenzar a procesar otro con esa clave.

¿Es esto posible de alguna manera, sin el uso de un bloqueo distribuido que haría un uso ineficiente de Lambda?

Gracias

Respuestas

numX Aug 20 2020 at 13:23

Parece que estaba abordando el problema de manera incorrecta. Lambda garantiza que dentro de un fragmento, la instancia de Lambda se invoca en un lote a la vez. Por lo tanto, no hay necesidad de un bloqueo distribuido ya que, en el peor de los casos, habrá varios registros pertenecientes a la misma entidad en el mismo lote y su procesamiento en orden se puede administrar en la memoria dentro de la propia función Lambda.

Referencia de las preguntas frecuentes de AWS http://aws.amazon.com/lambda/faqs/

P: ¿Cómo procesa AWS Lambda los datos de las transmisiones de Amazon Kinesis y las transmisiones de Amazon DynamoDB?

Los registros de Amazon Kinesis y DynamoDB Streams enviados a su función de AWS Lambda están estrictamente serializados, por fragmento. Esto significa que si coloca dos registros en el mismo fragmento, Lambda garantiza que su función Lambda se invocará correctamente con el primer registro antes de que se invoque con el segundo registro . Si la invocación de un registro se agota, se acelera o se encuentra con cualquier otro error, Lambda volverá a intentarlo hasta que tenga éxito (o el registro alcance su vencimiento de 24 horas) antes de pasar al siguiente registro. No se garantiza el orden de los registros en diferentes fragmentos, y el procesamiento de cada fragmento se realiza en paralelo.