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 rezago del consumidor pueden indicarte si las aplicaciones cliente tienen problemas de confiabilidad. Los problemas pueden deberse a la configuración del cliente, a una distribución desigual de las claves en las particiones o a 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 directamente, 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 intermediarios (intermediarios activos) y desviaciones en las operaciones normales, como picos en la latencia.

Capacidad de procesamiento

Supervisa las siguientes métricas de rendimiento y compáralas con el rendimiento esperado:

  • Tasa de mensajes, por agente y por tema.
  • Tasa de bytes, por agente y por tema.
  • Tasas de solicitudes Un cliente mal configurado podría inundar los intermediarios con una alta tasa de solicitudes pequeñas (de 0 a 1,000 bytes por solicitud), lo que reduciría la capacidad de procesamiento.
  • Latencia de la solicitud. Los picos 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 consulta las métricas por tema cuando soluciones problemas de rendimiento. Aislar los problemas en corredores específicos

Tasas de errores de solicitudes

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

  • La configuración incorrecta de la autorización podría impedir que un cliente produzca 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.

Desfase del consumidor

El rezago del consumidor mide qué tan atrasado está un cliente consumidor con respecto a un desplazamiento en particular. Agregar esta métrica por tema, partición y agente es útil para determinar si la latencia se debe a agentes o particiones específicos.

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

Consultas de panel personalizadas

Te recomendamos que crees 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 del consumidor
topk(5,
  max by (resource_container, location, cluster_id, broker_index, topic_id) (
    max_over_time(
      {
        "managedkafka.googleapis.com/consumer_lag",
        monitored_resource="managedkafka.googleapis.com/TopicPartition"
      }[${__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 la red 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 la cola y se reintentan.

  • Si el control de flujo está mal configurado, es posible que un cliente produzca más mensajes de los que pueden enviar la cantidad asignada de subprocesos. Si bien el rendimiento puede ser constante, una creciente acumulación de solicitudes 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 altas tasas de errores en los registros. Sin embargo, algunos clientes de Kafka ocultan las excepciones que provocan reintentos prolongados, a menos que configures niveles de registro más altos. Por lo tanto, también debes supervisar si aumentan 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 la tasa de solicitudes parece inusualmente alta, 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 podría indicar que el clúster está sobrecargado y que se debe aumentar su escala.

  • El 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 intermediarios.

¿Qué sigue?

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