Supervisa las aplicaciones cliente de Kafka

En este documento, se describe cómo supervisar el estado de los clientes que producen o consumen datos en tu clúster de Managed Service para Apache Kafka.

Es importante supervisar las aplicaciones cliente como parte de tu estrategia general de confiabilidad. Las métricas, como la capacidad de procesamiento, las tasas de error y el retraso del consumidor, pueden indicarte si las aplicaciones cliente tienen problemas de confiabilidad. Los problemas pueden deberse a la configuración del cliente, la distribución desigual de las claves entre las particiones o problemas del clúster que afectan solo a una partición específica.

Métricas del servidor

Si bien es útil supervisar el comportamiento del cliente de forma directa, las métricas del servidor no requieren ninguna instrumentación adicional y pueden ayudarte a detectar problemas del cliente que afectan la confiabilidad.

Las métricas del servidor son especialmente útiles para detectar desequilibrios de carga entre los agentes (agentes activos) y las desviaciones en las operaciones normales, como los aumentos repentinos de la latencia.

Capacidad de procesamiento

Supervisa las siguientes métricas de capacidad de procesamiento y compáralas con la capacidad de procesamiento esperada:

  • Tasa de mensajes, por agente y por tema.
  • Tasa de bytes, por agente y por tema.
  • Porcentajes de solicitudes. Un cliente mal configurado puede inundar los agentes con una tasa alta de solicitudes pequeñas (de 0 a 1,000 bytes por solicitud), lo que reduce la capacidad de procesamiento.
  • Latencia de la solicitud. Los aumentos repentinos en la latencia de las solicitudes del productor pueden indicar una carga desequilibrada o un problema con la configuración del cliente.

Kafka ofrece métricas de capacidad de procesamiento por tema y para el clúster. Estas métricas no siempre tienen los mismos valores cuando se agregan para todos los temas. Usa una métrica agregada para la supervisión y las alertas de alto nivel, y observa las métricas por tema cuando soluciones problemas de capacidad de procesamiento. Aislar cualquier problema en agentes específicos

Tasas de errores de solicitudes

La métrica topic_error_count realiza un seguimiento de la cantidad de solicitudes de recuperación y producción con errores en el lado del servidor. Sin embargo, algunas clases de error no se reflejan en esta métrica. Por ejemplo:

  • La configuración de autorización incorrecta puede impedir que un cliente produzca en un tema, sin que el error aparezca en esta métrica.

  • Las fallas del clúster pueden impedir que un agente responda a las solicitudes.

Por este motivo, también debes supervisar los errores del cliente, incluidos los errores de tiempo de espera de la solicitud.

Retraso del consumidor

El retraso del consumidor mide qué tan lejos está un cliente consumidor de un desplazamiento determinado. Agregar esta métrica por tema, partición y agente es útil para determinar si el retraso se debe a agentes o particiones específicos.

Considera crear una alerta basada en el retraso máximo en el subconjunto de temas que son fundamentales para tu carga de trabajo.

Consultas de paneles personalizados

Recomendamos crear paneles y alertas personalizados para supervisar estos indicadores. En la siguiente tabla, se muestran las consultas del lenguaje de consulta de Prometheus (PromQL) que puedes usar para supervisar el estado del cliente.

IndicadorConsulta de PromQL
Capacidad de procesamiento: Tasas de mensajes por agente
sum by (resource_container, location, cluster_id, broker_index) (
  rate(
    {
      "managedkafka.googleapis.com/message_in_count",
      monitored_resource="managedkafka.googleapis.com/Topic"
    }[${__interval}]
  )
)
Capacidad de procesamiento: Tasas de mensajes por agente y por tema, para los 5 temas más grandes
topk(5,
  sum by (resource_container, location, cluster_id, broker_index, topic_id) (
    rate(
      {
        "managedkafka.googleapis.com/message_in_count",
        monitored_resource="managedkafka.googleapis.com/Topic"
      }[${__interval}]
    )
  )
)
Capacidad de procesamiento: Ancho de banda por tema y agente
sum by (resource_container, location, cluster_id, broker_index, topic_id) (
  rate(
    {
      "managedkafka.googleapis.com/byte_in_count",
      monitored_resource="managedkafka.googleapis.com/Topic"
    }[${__interval}]
  )
)
Porcentaje de solicitudes
sum by (resource_container, location, cluster_id, request) (
  rate(
    {
      "managedkafka.googleapis.com/request_count",
      monitored_resource="managedkafka.googleapis.com/Cluster",
      "request"="Produce"
    }[${__interval}]
  )
)
Porcentaje de solicitudes, totales del clúster
sum by (resource_container, location, cluster_id, request) (
  rate(
    {
      "managedkafka.googleapis.com/topic_request_count",
      monitored_resource="managedkafka.googleapis.com/Topic",
      "request"="Produce"
    }[${__interval}]
  )
)
Latencia de la solicitud
sum by (resource_container, location, cluster_id, broker_index, request) (
  avg_over_time(
    {
      "managedkafka.googleapis.com/request_latencies",
      monitored_resource="managedkafka.googleapis.com/Cluster",
      "percentile"="95",
      "request"="Produce"
    }[${__interval}]
  )
)
Recuentos de errores de solicitudes
sum by (resource_container, location, cluster_id, broker_index, request) (
  rate(
    {
      "managedkafka.googleapis.com/topic_error_count",
      monitored_resource="managedkafka.googleapis.com/Topic"
    }[${__interval}]
  )
)
Retraso del consumidor: Las 5 particiones principales por retraso de desplazamiento
topk(5,
  max by (resource_container, location, cluster_id, topic_id, partition_index) (
    max_over_time(
      {
        "managedkafka.googleapis.com/offset_lag",
        monitored_resource="managedkafka.googleapis.com/TopicPartitionConsumerGroup"
      }[${__interval}]
    )
  )
)
Retraso del consumidor: Los 5 grupos de consumidores principales por retraso de desplazamiento
topk(5,
  max by (resource_container, location, cluster_id, consumer_group_id) (
    max_over_time(
      {
        "managedkafka.googleapis.com/offset_lag",
        monitored_resource="managedkafka.googleapis.com/TopicPartitionConsumerGroup"
      }[${__interval}]
    )
  )
)

Métricas del cliente

A veces, los problemas del cliente no aparecen en las métricas del servidor. Por ejemplo:

  • Si la autenticación o las herramientas de redes están mal configuradas, es posible que los mensajes se acumulen en las colas internas del cliente. A medida que se agota el tiempo de espera de las solicitudes, los mensajes se vuelven a poner en cola y se reintentan.

  • Si el control de flujo está mal configurado, un cliente puede producir más mensajes de los que puede enviar la cantidad asignada de subprocesos. Aunque la capacidad de procesamiento puede ser constante, una lista de solicitudes pendientes en aumento vence antes de que se puedan enviar.

Si tus clientes se ejecutan en Compute Engine, Google Kubernetes Engine o Cloud Run, puedes usar métricas basadas en registros en Cloud Monitoring para detectar tasas de error altas en los registros. Sin embargo, algunos clientes de Kafka ocultan las excepciones que generan reintentos prolongados, a menos que configures niveles de registro más altos. Por lo tanto, también debes supervisar el aumento de las latencias de las solicitudes.

Los clientes de Java exponen muchas métricas a través de Java Management Extensions (JMX). Para obtener más información, consulta Supervisión en la documentación de Apache Kafka. Si es posible, prioriza la instrumentación de tus clientes para que informen las siguientes métricas:

  • Tasas de error de solicitudes (kafka.producer:type=producer-metrics,client-id="{client-id}")
  • Latencia promedio de la solicitud (kafka.producer:type=producer-metrics,client-id="{client-id}")

Si es posible, envía estas métricas a una solución de supervisión. Si puedes conectarte a los puertos JMX en las máquinas que ejecutan las instancias de cliente, también puedes leer estas métricas de forma interactiva.

Mitigaciones

Si ves problemas en tus aplicaciones cliente, considera las siguientes mitigaciones:

  • Busca cargas desequilibradas entre los agentes (agentes activos). Asegúrate de que el reequilibrio automático esté habilitado en tu clúster.

  • Si el porcentaje de solicitudes parece inusualmente alto, verifica si el cliente envía una gran cantidad de solicitudes pequeñas. Verifica las configuraciones de max.request.size y batch.size en el productor.

  • Verifica la configuración del cliente para la autenticación, las redes y el control de flujo.

  • Un retraso excesivo en todos los temas o particiones de un clúster puede indicar que el clúster está sobrecargado y se debe escalar verticalmente.

  • Un retraso excesivo en todos los temas o particiones de un agente puede indicar que el agente está sobrecargado. Intenta mejorar la distribución de claves o reasignar particiones a diferentes agentes.

¿Qué sigue?

Apache Kafka® es una marca registrada de The Apache Software Foundation o sus afiliados en Estados Unidos y otros países.