¿Cómo se pueden solucionar los problemas del agente de Amazon Kinesis en una máquina Linux?

Actualización más reciente: 05-05-2022

Intento utilizar el agente de Amazon Kinesis en una máquina Linux. Sin embargo, se presenta un problema. ¿Cómo se soluciona esto?

Descripción breve

Este artículo aborda los siguientes problemas:

  • El agente de Kinesis envía eventos duplicados.
  • El agente de Kinesis causa limitaciones controladas de escritura y registros fallidos en la secuencia de Amazon Kinesis.
  • El agente de Kinesis no puede leer o transmitir archivos de registro.
  • Persisten los errores en el servidor de Amazon Elastic Computing (Amazon EC2) porque el tamaño del montón de Java es insuficiente.
  • El uso de la CPU de Amazon EC2 es muy alto.

Resolución

El agente de Kinesis envía eventos duplicados

Si recibe duplicados cada vez que envía registros desde el agente de Kinesis, es probable que haya una rotación de archivos en la que el patrón de coincidencia no se encuentre correctamente calificado. Cada vez que se envía un registro, el agente de Kinesis comprueba el latestUpdateTimestamp de cada archivo que coincide con el patrón de archivo. De forma predeterminada, el agente de Kinesis elige el archivo actualizado más recientemente, e identifica un archivo activo que coincide con el patrón de rotación. Si se actualiza más de un archivo al mismo tiempo, el agente de Kinesis no puede determinar cuál es el archivo activo que debe seguir. Por lo tanto, el agente de Kinesis comienza a seguir los archivos actualizados desde el principio, lo que provoca varios duplicados.

Para evitar este problema, cree diferentes flujos de archivos para cada archivo individual, asegurándose de que el patrón de archivos realice un seguimiento de las rotaciones en su lugar.

Nota: Si realiza un seguimiento de una rotación, es una práctica recomendada utilizar la configuración de crear o volver a nombrar rotación de registro, en lugar de copytruncate.

Por ejemplo, puede utilizar un flujo de archivos similar a este:

"flows": [
        {
            "filePattern": "/tmp/app1.log*",
            "kinesisStream": "yourkinesisstream1"
        },
        {
            "filePattern": "/tmp/app2.log*",
            "kinesisStream": "yourkinesisstream2"
        }
    ]

El agente de Kinesis también reintenta cualquier registro que no consigue devolver cuando hay problemas de redes intermitentes. Si el agente de Kinesis no recibe la confirmación del lado del servidor, lo intenta de nuevo, lo que crea duplicados. En este ejemplo, la aplicación descendente debe deshacer la duplicación.

También se pueden producir duplicados cuando el archivo de punto de control se modifica o se elimina. Si un archivo de punto de control se almacena en /var/run/aws-kinesis-agent, entonces es posible que el archivo se limpie durante una reinstalación o un reinicio de la instancia. Cuando se vuelve a ejecutar el agente de Kinesis, se produce un error en la aplicación en cuanto se lee el archivo, lo que provoca duplicados. Por lo tanto, mantenga el punto de control en el directorio principal del agente y actualice la configuración del agente de Kinesis con una nueva ubicación.

Por ejemplo:

"checkpointFile": "/aws-kinesis-agent-checkpoints/checkpoints"

El agente de Kinesis provoca limitaciones controladas de escritura y registros fallidos en la secuencia de datos de Amazon Kinesis

De forma predeterminada, el agente de Kinesis intenta enviar los archivos de registro lo más rápido posible, lo cual supera los umbrales de rendimiento de Kinesis. Sin embargo, los registros fallidos se vuelven a poner en cola y se reintentan continuamente para evitar cualquier pérdida de datos. Cuando la cola está llena, el agente de Kinesis deja de seguir el archivo, lo que puede hacer que la aplicación se retrase.

Por ejemplo, si la cola está llena, el registro tiene un aspecto similar al siguiente:

com.amazon.kinesis.streaming.agent.Agent [WARN] Agent: Tailing is 745.005859 MB (781195567 bytes) behind.

Nota: El tamaño de la cola depende del parámetro publishQueueCapacity (cuyo valor predeterminado es “100”).

Para investigar cualquier registro fallido o problemas de rendimiento en la secuencia de datos de Kinesis, intente lo siguiente:

  • Supervise la métrica RecordSendErrors en Amazon CloudWatch.
  • Revise los registros del agente de Kinesis para comprobar si se produjo algún retraso. La entrada ProvisionedThroughputExceededException es visible únicamente en el nivel de registro DEBUG. Durante este tiempo, la velocidad de envío de registros del agente de Kinesis puede ser más lenta si la mayor parte de la CPU se utiliza para analizar y transformar los datos.
  • Si observa que el agente Kinesis se retrasa, considere la posibilidad de escalar la secuencia de entrega de Amazon Kinesis.

El agente de Kinesis no puede leer o transmitir archivos de registro

Asegúrese de que la instancia de Amazon EC2 en la que se ejecuta el agente de Kinesis cuenta con los permisos adecuados para acceder a la secuencia de entrega de Kinesis de destino. Si el agente de Kinesis no puede leer el archivo de registro, compruebe si el agente de Kinesis cuenta con permisos de lectura para ese archivo. Para todos los archivos que coincidan con este patrón, se debe conceder permiso de lectura a aws-kinesis-agent-user. En el caso del directorio que contiene los archivos, los permisos de lectura y ejecución también se deben conceder a aws-kinesis-agent-user. De lo contrario, aparecerá un error de acceso denegado o una excepción de tiempo de ejecución de Java.

Persisten los errores en el servidor de Amazon EC2 debido a que el tamaño del montón de Java es insuficiente

Si persisten los errores en el servidor de Amazon EC2 porque el tamaño del montón de Java es insuficiente, aumente el tamaño del montón asignado al agente de Amazon Kinesis. Para configurar la cantidad de memoria disponible para el agente de Kinesis, actualice el archivo “start-aws-kinesis-agent”. Aumente los valores establecidos para los siguientes parámetros:

  • JAVA_START_HEAP
  • JAVA_MAX_HEAP

Nota: En Linux, la ruta del archivo correspondiente a “start-aws-kinesis-agent” es “/usr/bin/start-aws-kinesis-agent”.

La utilización de la CPU de Amazon EC2 es muy alta

La utilización de la CPU puede aumentar si el agente de Kinesis lleva a cabo una coincidencia de patrones de expresiones regulares y una transformación de registros que no están optimizadas. Si ya configuró el agente de Kinesis, intente eliminar todas las transformaciones y coincidencias de patrones de expresiones regulares (regex). Posteriormente, verifique si aún tiene problemas con la CPU.

Si aún experimenta problemas con la CPU, considere la posibilidad de ajustar los subprocesos y los registros que se almacenan en búfer en la memoria. Otra posibilidad es actualizar algunos de los parámetros predeterminados en el archivo de configuración /etc/aws-kinesis/agent.json. También puede disminuir varios parámetros en el archivo de configuración del agente de Kinesis.

Estos son los parámetros generales de configuración que puede intentar disminuir:

  • sendingThreadsMaxQueueSize: el tamaño de WorkQueue del threadPool para enviar datos al destino. El valor predeterminado es 100.
  • maxSendingThreads: el número de subprocesos para enviar datos al destino. El valor mínimo es 2. El valor predeterminado es 12 veces el número de núcleos de la máquina.
  • maxSendingThreadsPerCore: el número de subprocesos por núcleo para enviar datos al destino. El valor predeterminado es 12.
Estos son los parámetros de configuración del flujo que puede intentar disminuir:
  • publishQueueCapacity: el número máximo de búferes de registros que se pueden poner en cola antes de enviarlos al destino. El valor predeterminado es 100.
  • minTimeBetweenFilePollsMillis: el intervalo de tiempo en el que se sondea el archivo rastreado y los nuevos datos se comienzan a analizar. El valor predeterminado es 100.

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?