Solucionar problemas de los productores de Amazon Kinesis Data Streams
En los temas siguientes se ofrecen soluciones a problemas comunes de los productores de Amazon Kinesis Data Streams:
Mi aplicación productora escribe a una velocidad menor que lo esperado
Los motivos más comunes para que el rendimiento de escritura sea menor que lo esperado son:
Límites de servicio superados
Para saber si se superan los límites de servicio, compruebe si el productor crea excepciones de rendimiento desde el servicio y valide qué operaciones de la API se están viendo limitadas. Tenga en cuenta que hay diferentes límites en función de la llamada, consulte Cuotas y límites. Por ejemplo, además de los límites de nivel de fragmento para escrituras y lecturas más conocidos, existen los siguientes límites para el nivel de la secuencia:
Las operaciones CreateStream, DeleteStream, ListStreams, GetShardIterator y MergeShards están limitadas a 5 llamadas por segundo. La operación DescribeStream está limitada a 10 llamadas por segundo. La operación DescribeStreamSummary está limitada a 20 llamadas por segundo.
Si estas llamadas no son el problema, asegúrese de que ha seleccionado una clave de partición que le permita distribuir de manera uniforme las operaciones put en todos los fragmentos, y que no tiene una clave de partición en particular que alcance los límites del servicio sin que el resto lo hagan. Esto requiere que mida los picos de rendimiento y que tenga en cuenta el número de fragmentos de su secuencia. Para obtener más información acerca de cómo administrar secuencias, consulte Crear y administrar Kinesis Data Streams.
sugerencia
Recuerde que debe redondear al kilobyte más cercano para calcular la limitación controlada del rendimiento al utilizar la operación de un solo registro PutRecord, mientras que la operación multirregistro PutRecords redondea a la suma acumulativa de los registros en cada llamada. Por ejemplo, una solicitud PutRecords con 600 registros de 1,1 KB no será objeto de limitación controlada.
Deseo optimizar mi productor
Antes de empezar a optimizar el productor, debe completar las siguientes tareas clave. En primer lugar, identifique el rendimiento máximo deseado en términos de tamaño del registro y registros por segundo. A continuación, descarte la capacidad de la secuencia como factor limitante (Límites de servicio superados). Si ha descartado la capacidad de la secuencia, recurra a los siguientes consejos para solucionar problemas y directrices de optimización para los dos tipos comunes de productores.
Productor grande
Un productor grande se suele ejecutar desde un servidor en las instalaciones o una instancia de Amazon EC2. Los clientes que necesitan un mayor rendimiento de un productor grande normalmente se preocupan de la latencia por registro. Entre las estrategias para afrontar los asuntos relacionados con la latencia se incluyen las siguientes: si el cliente puede crear microlotes o almacenar en memoria los registros, use Amazon Kinesis Producer Library (que cuenta con lógica de agregación avanzada), la operación multirregistro PutRecords o agregue registros en un archivo de mayor tamaño antes de utilizar la operación para un único registro PutRecord. Si no puede crear lotes o almacenar en memoria, use varios subprocesos para escribir en un servicio de Kinesis Data Streams al mismo tiempo. El AWS SDK para Java y otros SDK incluyen clientes asíncronos que pueden hacer esto con una cantidad de código muy pequeña.
Productores pequeños
Un productor pequeño suele ser una aplicación móvil, un dispositivo de IoT o un cliente web. Si se trata de una aplicación móvil, le recomendamos que utilice la operación PutRecords o el grabador de Kinesis del SDK para móviles de AWS. Para obtener más información, consulte la Guía de introducción a AWS Mobile SDK for Android y la Guía de introducción a AWS Mobile SDK for iOS. Las aplicaciones móviles deben administrar conexiones intermitentes inherentemente y necesitan algún tipo de inserción por lotes, como por ejemplo PutRecords. Si no puede crear lotes por algún motivo, consulte la información sobre productores grandes que aparece anteriormente. Si su productor es un navegador, la cantidad de datos generados suele ser muy pequeña. Sin embargo, estará ubicando las operaciones put en la ruta crítica de la aplicación, lo que no es recomendable.
Uso indebido de las operaciones de flushSync()
Un uso incorrecto de flushSync() puede afectar notablemente al rendimiento de escritura. La operación de flushSync() está diseñada para las situaciones de cierre, a fin de garantizar que todos los registros almacenados en búfer se envíen antes de que finalice la aplicación KPL. Si implementó esta operación después de cada operación de escritura, puede agregar una latencia adicional sustancial, de unos 500 ms por escritura. Asegúrese de haber implementado flushSync() únicamente para el cierre de la aplicación, a fin de evitar demoras adicionales innecesarias en el rendimiento de escritura.
Recibo un error de permiso no autorizado de clave maestra de KMS
Este error se produce cuando una aplicación productora escribe en una secuencia cifrada sin permisos para la clave maestra de KMS. Para asignar permisos a una aplicación de modo que pueda obtener acceso a una clave de KMS, consulte Uso de políticas de claves en AWS KMS y Uso de políticas de IAM con AWS KMS.
Solucionar otros problemas comunes para los productores
-
¿Por qué mi flujo de datos de Kinesis devuelve un error de servidor interno 500?
-
¿Cómo soluciono los errores de tiempo de espera al escribir desde Flink a Kinesis Data Streams?
-
¿Cómo puedo solucionar los errores de limitación en Kinesis Data Streams?
-
¿Cómo puedo colocar registros de datos en un flujo de datos de Kinesis mediante KPL?