

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.

# Optimizar sus productores de Amazon Kinesis Data Streams
<a name="advanced-producers"></a>

Se puede optimizar incluso un poco más sus productores de Amazon Kinesis Data Streams según el comportamiento específico que ve. Revise los siguientes temas para identificar soluciones.

**Topics**
+ [Personalizar el comportamiento de reintentos y límites de velocidad en KPL.](kinesis-producer-adv-retries-rate-limiting.md)
+ [Aplicar las mejores prácticas a la agregación de KPL](kinesis-producer-adv-aggregation.md)

# Personalizar el comportamiento de reintentos y límites de velocidad en KPL.
<a name="kinesis-producer-adv-retries-rate-limiting"></a>

Cuando agrega registros de usuario de Amazon 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`. Esta stamp/deadline combinación de tiempo 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 time-to-live valor del registro

Esta estrategia permite incluir los registros de usuarios de KPL reintentados en las siguientes llamadas a la API de Kinesis Data Streams para mejorar el rendimiento y reducir la complejidad y, al mismo tiempo, reforzar el valor del registro de Kinesis Data Streams. time-to-live 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
<a name="kinesis-producer-adv-retries-rate-limiting-rate-limit"></a>

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.

# Aplicar las mejores prácticas a la agregación de KPL
<a name="kinesis-producer-adv-aggregation"></a>

Aunque el esquema de números secuenciales de los registros de Amazon Kinesis Data Streams resultantes sigue siendo el mismo, la agregación hace que la indexación de registros de usuario de Amazon Kinesis Producer Library (KPL) contenidos en un registro agregado de Kinesis Data Streams comience en 0 (cero); sin embargo, siempre y cuando no dependa de los números secuenciales para identificar exclusivamente sus registros de usuario de KPL, el código puede pasar por alto esta información, ya que la agregación (de los registros de usuario de KPL en un registro de Kinesis Data Streams) y la desagrupación posterior (del registro de Kinesis Data Streams en registros de usuario de KPL) se encarga de todo eso automáticamente. Esto se aplica tanto si su consumidor utiliza la KCL como el SDK. AWS Para usar esta funcionalidad de agregación, tendrás que incorporar la parte de Java de la KPL a tu compilación si tu usuario está escrito con la API proporcionada en el AWS SDK.

Si va a utilizar números secuenciales como identificadores únicos para sus registros de usuario de KPL, se recomienda que utilice las operaciones persistentes `public int hashCode()` y `public boolean equals(Object obj)` proporcionadas en `Record` y `UserRecord` para permitir la comparación de sus registros de usuario de KPL. Además, si desea examinar el número subsecuencial de su registro de usuario de KPL, puede transmitirlo a una instancia `UserRecord` y recuperar su número subsecuencial.

Para obtener más información, consulte [Implementar la desagregación de consumidores](kinesis-kpl-consumer-deaggregation.md).