En este documento, se describe cómo supervisar un clúster de Managed Service para Apache Kafka para garantizar la confiabilidad de tus cargas de trabajo de Kafka.
Descripción general
La confiabilidad es la capacidad de un sistema para funcionar de forma correcta y coherente a lo largo del tiempo. Para las cargas de trabajo basadas en Kafka, la confiabilidad abarca los clústeres de Kafka y las aplicaciones cliente que producen y consumen mensajes.
Managed Service para Apache Kafka está diseñado para tolerar y recuperarse de muchas fallas comunes. Por ejemplo, el servicio coloca réplicas en diferentes zonas para la tolerancia a fallas y reinicia automáticamente los agentes que fallan. Sin embargo, otros factores que afectan la confiabilidad están fuera del control directo del servicio, como los siguientes:
- Configuración del cliente
- Carga en el clúster, incluida la carga promedio y los picos
- Cantidad de particiones y réplicas
- Configuraciones de temas, como la retención de mensajes
Para lograr operaciones confiables, es importante supervisar el clúster en relación con estos parámetros operativos y mantenerlos dentro de los rangos recomendados. En las siguientes secciones, se describen algunas métricas clave que son importantes para la confiabilidad.
Capacidad del clúster
Para evitar la sobrecarga de un clúster, supervisa los siguientes indicadores. Crea alertas para que te notifiquen si se salen del rango recomendado durante un período prolongado.
Uso de CPU : Intenta mantener el uso de CPU por debajo del 80% en todos los agentes.
Uso del disco del agente: Asegúrate de que el uso del disco del agente se mantenga por debajo del 80%.
Recuento de particiones : Intenta mantener menos de 4,000 particiones por agente y menos de 100,000 particiones por clúster.
Si tu clúster tiene poca capacidad, considera las siguientes mitigaciones:
Aumenta el recuento de CPU virtuales del clúster. Para obtener más información, consulta Actualiza un clúster de Kafka.
Aumenta la escala del clúster para agregar más agentes. Para obtener información sobre cómo el servicio aprovisiona agentes, consulta Aprovisionamiento de agentes.
En la siguiente tabla, se muestran las consultas de Prometheus Query Language (PromQL) para estas métricas que puedes agregar a un panel personalizado de Cloud Monitoring.
| Indicador | Consulta de PromQL |
|---|---|
| Uso de CPU | rate( { "managedkafka.googleapis.com/cpu/core_usage_time", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/cpu/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Uso del disco del agente | max_over_time( { "managedkafka.googleapis.com/disk/used_bytes", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Tamaño del segmento por partición | # Assumes that segment files are 225 MiB. Check your cluster configuration. 2*225*(1024*1024) * max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) / min_over_time( { "managedkafka.googleapis.com/disk/limit", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) |
| Particiones por agente | max by (resource_container, location, cluster_id, broker_index) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Particiones por clúster | max by (resource_container, location, cluster_id) ( max_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
Desequilibrio de particiones
Una carga desigual puede impedir que un clúster de Kafka procese las solicitudes del cliente de forma adecuada. La cantidad de particiones asignadas a un solo agente debe mantenerse dentro del 10% del recuento promedio de particiones por agente. Busca valores atípicos en esta métrica.
Para mantener particiones balanceadas, considera habilitar el reequilibrio automático al escalar verticalmente de tu clúster.
En la siguiente tabla, se muestran las consultas de PromQL que puedes usar para supervisar los desequilibrios de particiones.
| Indicador | Consulta de PromQL |
|---|---|
| Recuentos de particiones por agente | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Desequilibrio de particiones | sum by (resource_container, location, cluster_id, broker_index) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) / on (resource_container, location, cluster_id) group_left avg by (resource_container, location, cluster_id) ( avg_over_time( { "managedkafka.googleapis.com/partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) - 1 |
Replicación de particiones
La replicación de datos es fundamental para garantizar que tus cargas de trabajo sean tolerantes a errores. En un clúster en buen estado, cada partición de un tema tiene la cantidad completa de réplicas, según el factor de replicación configurado del tema.
Usa los siguientes indicadores para supervisar la replicación de particiones:
Por debajo de las réplicas mínimas sincronizadas (ISR) : Si una partición tiene menos ISR sincronizadas que el mínimo configurado (
min.insync.replicas), existe un riesgo grave de pérdida de datos y disponibilidad. Por lo general, esta situación se debe a una capacidad insuficiente en uno o más agentes, o a fallas de infraestructura.Particiones con réplicas insuficientes : Una partición tiene réplicas insuficientes cuando la cantidad de réplicas sincronizadas cae por debajo del factor de replicación. Si una partición permanece con réplicas insuficientes durante decenas de minutos, es posible que haya un problema con los agentes, la capacidad de almacenamiento o algún otro factor.
Durante un reinicio progresivo, los agentes dejan de estar disponibles a medida que se reinician, lo que provoca una replicación insuficiente temporal. Esta situación es esperada y no requiere intervención.
En la siguiente tabla, se muestran las consultas de PromQL que puedes usar para supervisar la replicación.
| Indicador | Consulta de PromQL |
|---|---|
| Por debajo de las ISR mínimas | max by ( resource_container, location, cluster_id ) ( max_over_time( { "managedkafka.googleapis.com/broker/under_min_isr_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[${__interval}] ) ) |
| Por debajo de la replicación | max by ( resource_container, location, cluster_id ) ( min_over_time( { "managedkafka.googleapis.com/broker/under_replicated_partitions", monitored_resource="managedkafka.googleapis.com/Cluster" }[10m:${__interval}] ) ) |
¿Qué sigue?
- Supervisa un clúster de Kafka
- Supervisa las aplicaciones cliente de Kafka
- Planifica el tamaño de tu clúster de Kafka
- Crea y administra paneles personalizados