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, a la 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 en los agentes (agentes activos) y desviaciones en las operaciones normales, como picos en 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
- Tasas de solicitudes Un cliente mal configurado podría inundar los agentes con una alta tasa de solicitudes pequeñas (0 a 1,000 bytes por solicitud), lo que reduce 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 solucionas problemas de capacidad de procesamiento. Aísla cualquier problema en agentes específicos.
Tasas de error de solicitud
La topic_error_count
métrica hace un seguimiento de la cantidad de solicitudes de recuperación y producción fallidas en el servidor. Sin embargo, algunas clases de error no se reflejan en esta métrica. Por ejemplo:
Los parámetros de configuración de autorización mal configurados pueden 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.
Retraso del consumidor
El retraso 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 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
Te recomendamos que crees paneles y alertas personalizados para supervisar estos indicadores. En la siguiente tabla, se muestran las consultas de Prometheus Query Language (PromQL) que puedes usar para supervisar el estado del cliente.
| Indicador | Consulta 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 solicitud | 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 cola y se reintentan.
Si el control de flujo está mal configurado, es posible que un cliente produzca más mensajes de los que puede enviar la cantidad asignada de subprocesos. Aunque la capacidad de procesamiento puede ser coherente, una acumulación creciente 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 tasas de error altas en los registros. Sin embargo, algunos clientes de Kafka ocultan 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 informar las siguientes métricas:
- Tasas de error de solicitud
(
kafka.producer:type=producer-metrics,client-id="{client-id}") - Latencia promedio de la solicitud
(
kafka.producer:type=producer-metrics,client-id="{client-id}")
Envía estas métricas a una solución de supervisión si es posible. Si puedes conectarte a los puertos JMX en las máquinas que ejecutan las instancias del cliente, también puedes leer estas métricas de forma interactiva.
Mitigaciones
Si ves problemas en tus aplicaciones cliente, considera las siguientes mitigaciones:
Busca una carga desequilibrada en 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
max.request.sizeybatch.sizeen el productor.Verifica las configuraciones del cliente para la autenticación, la red 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 que se debe aumentar su escala.
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?
- Supervisa un clúster de Kafka
- Supervisa los clústeres de Kafka para garantizar la confiabilidad
- Crea y administra paneles personalizados