Reintentos y limitación de la velocidad en KPL - Amazon Kinesis Data Streams

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Reintentos y limitación de la velocidad en KPL

Cuando agrega registros de usuario de Kinesis Producer Library (KPL) mediante la operación addUserRecord() de KPL, cada registro recibe una marca de tiempo y se agrega a un búfer con un plazo fijado por el parámetro de configuración RecordMaxBufferedTime. La combinación de la marca temporal y el plazo establece la prioridad del búfer. Los registros se vacían del búfer en función de los siguientes criterios:

  • Prioridad del búfer

  • Configuración de agregación

  • Configuración de recopilación

Los parámetros de configuración de agregación y recopilación que afectan al comportamiento del búfer son los siguientes:

  • AggregationMaxCount

  • AggregationMaxSize

  • CollectionMaxCount

  • CollectionMaxSize

A continuación, los registros vaciados se envían al flujo de datos de Kinesis como registros de Amazon Kinesis Data Streams a través de una llamada a la operación PutRecords de la API de Kinesis Data Streams. La operación PutRecords envía solicitudes a su secuencia que, de vez en cuando, presentan errores totales o parciales. Los registros con errores se agregan automáticamente al búfer de KPL. La nueva fecha límite se establece en función del mínimo de estos dos valores:

  • La mitad del valor configurado RecordMaxBufferedTime actual

  • El valor del tiempo de vida del registro

Esta estrategia permite que los registros de usuario de KPL reintentados se incluyan en las llamadas a la API de Kinesis Data Streams posteriores para mejorar el rendimiento y reducir la complejidad, a la vez que se aplica el valor del tiempo de vida del registro de Kinesis Data Streams. No hay ningún algoritmo de retardo, por lo que esta estrategia de reintento resulta relativamente agresiva. El envío de spam debido a los reintentos excesivos se evita mediante una limitación de velocidad, que se aborda en la siguiente sección.

Limitación de la velocidad

KPL incluye una característica de limitación de velocidad, que limita el rendimiento por partición enviada desde un único productor. La limitación de velocidad se implementa a través de un algoritmo de bucket de token con buckets independientes para registros y bytes de Kinesis Data Streams. Cada operación de escritura correcta en un flujo de datos de Kinesis agrega un token (o varios) a cada bucket, hasta un límite determinado. Este límite se puede configurar, pero de forma predeterminada se establece un 50 por ciento superior al límite real del fragmento, para permitir la saturación del fragmento desde un único productor.

Puede reducir este límite para disminuir el envío de spam debido a los reintentos excesivos. Sin embargo, es recomendable que cada productor intente por todos los medios alcanzar el máximo rendimiento y que administre las limitaciones controladas resultantes determinadas como excesivas mediante la expansión de la capacidad de la secuencia y la implementación de una estrategia adecuada para la clave de partición.