Stratégies efficaces pour la surveillance et l'alerte sur la santé de Kafka
Apache Kafka est devenu le standard de facto pour la construction de pipelines de données en temps réel et d'applications de streaming. Sa nature distribuée et tolérante aux pannes le rend incroyablement puissant, mais aussi complexe à gérer. Sans une surveillance et une alerte appropriées, des problèmes tels qu'un décalage élevé des consommateurs, des partitions déséquilibrées ou des défaillances de broker peuvent dégrader silencieusement les performances ou entraîner des interruptions de service complètes. Cet article présente des stratégies efficaces et des métriques essentielles pour surveiller la santé de Kafka, vous permettant d'identifier et de résoudre proactivement les problèmes avant qu'ils n'affectent vos utilisateurs.
La mise en œuvre d'une stratégie de surveillance robuste est cruciale pour maintenir la fiabilité et les performances de vos clusters Kafka. Elle vous permet d'obtenir une visibilité sur le fonctionnement interne de votre système distribué, d'identifier les goulots d'étranglement potentiels et de répondre rapidement aux événements critiques. En suivant les métriques clés et en configurant des alertes opportunes, vous pouvez passer d'une lutte réactive à une prévention proactive des problèmes, garantissant un environnement Kafka stable et performant.
Pourquoi la surveillance de Kafka est critique
L'architecture distribuée de Kafka présente plusieurs points de défaillance potentiels et de dégradation des performances. Comprendre ces problèmes potentiels et comment les surveiller est essentiel pour maintenir un cluster sain :
- Latence des données : Un décalage élevé des consommateurs peut indiquer que les consommateurs ne suivent pas le rythme du producteur, ce qui entraîne des données obsolètes et affecte les applications en aval.
- Utilisation des ressources : Un manque de CPU, de mémoire ou d'espace disque sur les brokers peut entraîner une dégradation des performances, une non-réactivité, voire des plantages de broker.
- Déséquilibre des partitions : Une distribution inégale des partitions entre les brokers peut entraîner une surcharge de certains brokers tandis que d'autres sont sous-utilisés, affectant le débit et la disponibilité.
- Disponibilité des brokers : Les défaillances de brokers peuvent entraîner une indisponibilité ou une perte de données si elles ne sont pas gérées correctement. La surveillance de la santé des brokers est primordiale pour la tolérance aux pannes.
- Problèmes réseau : Les partitions réseau ou une latence élevée entre les brokers ou entre les clients et les brokers peuvent gravement affecter les performances et la stabilité du cluster.
Métriques clés de Kafka à surveiller
Une surveillance efficace repose sur le suivi des bonnes métriques. Celles-ci peuvent être largement classées en métriques au niveau du broker, au niveau du topic et au niveau du client.
Métriques au niveau du broker
Ces métriques fournissent des informations sur la santé et les performances des brokers Kafka individuels.
-
Métriques de requêtes :
kafka.network.RequestMetrics.RequestsPerSec(Taux de requêtes entrantes)kafka.network.RequestMetrics.TotalTimeMs(Temps total passé à traiter les requêtes)kafka.network.RequestMetrics.ResponseQueueTimeMs(Temps passé dans la file d'attente des réponses)kafka.network.RequestMetrics.LocalTimeMs(Temps passé sur le broker)kafka.network.RequestMetrics.RemoteTimeMs(Temps passé à communiquer avec d'autres brokers)kafka.network.RequestMetrics.TotalBytesInPerSec&TotalBytesOutPerSec(Débit réseau)
-
Métriques de logs :
kafka.log.Log.Size(Taille des segments de log sur disque)kafka.log.Log.N.MessagesPerSec(Taux de messages écrits dans un segment de log)kafka.log.Log.N.BytesPerSec(Taux d'octets écrits dans un segment de log)kafka.log.Log.N.LogFlushStats.LogFlushRateAndTimeMs(Taux et temps de vidage des segments de log)
-
Métriques du contrôleur : (Important pour l'élection des leaders et la gestion des partitions)
kafka.controller.Controller.ControllerStateChangesPerSeckafka.controller.Controller.LeaderChangesPerSec
-
Métriques JVM : (Essentiel pour comprendre l'utilisation des ressources du broker)
kafka.server:type=jvm,name=HeapMemoryUsagekafka.server:type=jvm,name=NonHeapMemoryUsagekafka.server:type=jvm,name=GarbageCollectionkafka.server:type=jvm,name=Threads
Métriques au niveau du topic
Ces métriques se concentrent sur les performances et la santé des topics Kafka spécifiques.
-
Partitions sous-répliquées :
kafka.cluster.PartitionReplicaCount.UnderReplicatedPartitions(Nombre de partitions ayant moins de répliques que souhaité)- L'alerte sur cette métrique est critique pour la durabilité et la disponibilité des données.
-
Partitions hors ligne :
kafka.cluster.PartitionState.OfflinePartitionsCount(Nombre de partitions indisponibles)- Un nombre élevé indique un problème sérieux avec le leadership des partitions ou la disponibilité des brokers.
-
Taux d'élection de leader :
kafka.controller.Controller.LeaderChangesPerSec(Taux de réélections de leaders)- Un pic peut indiquer une instabilité ou des défaillances de brokers.
Métriques des groupes de consommateurs
Ces métriques sont essentielles pour comprendre le décalage des consommateurs et la vitesse de traitement de vos applications.
-
Décalage du consommateur : Il ne s'agit souvent pas d'une métrique Kafka directe, mais elle est calculée en comparant le dernier offset produit dans un topic avec le dernier offset consommé par un groupe. Les outils de surveillance fournissent généralement ce calcul.
- Alerte critique : Un décalage élevé du consommateur (par exemple, dépassant un seuil défini pendant une période prolongée) indique que les consommateurs prennent du retard.
-
Métriques de requêtes Fetch (du point de vue du consommateur) :
kafka.consumer.Fetcher.MaxLagkafka.consumer.Fetcher.MinFetchWaitMskafka.consumer.Fetcher.MaxFetchWaitMs
Mise en œuvre de solutions de surveillance
Plusieurs outils et approches peuvent être utilisés pour surveiller Kafka. Le choix dépend souvent de votre infrastructure existante et de vos besoins opérationnels.
JMX et Prometheus
Les brokers Kafka exposent une multitude de métriques via JMX (Java Management Extensions). Des outils comme Prometheus peuvent extraire ces métriques JMX à l'aide d'un adaptateur tel que jmx_exporter.
- Activer JMX : Kafka a généralement JMX activé par défaut. Assurez-vous que le port JMX est accessible.
- Configurer
jmx_exporter: Téléchargez et configurezjmx_exporterpour exposer les métriques JMX de Kafka dans un format compatible avec Prometheus. Vous aurez besoin d'un fichier YAML de configuration spécifiant les MBeans à extraire.
Exemple de snippet de configurationjmx_exporterpour JMX Kafka :jmx_exporter/example_configs/kafka-2-0-0.yml(souvent trouvé dans le référentiel jmx_exporter) - Configurer Prometheus : Ajoutez une cible dans votre configuration Prometheus pour extraire le point de terminaison exposé par
jmx_exporterfonctionnant aux côtés de vos brokers Kafka.
```yaml
scrape_configs:- job_name: 'kafka'
static_configs:- targets: ['
:9404'] # Port par défaut pour jmx_exporter
```
- targets: ['
- job_name: 'kafka'
- Visualiser avec Grafana : Utilisez Grafana pour créer des tableaux de bord affichant ces métriques Prometheus. Des tableaux de bord Kafka pré-construits sont facilement disponibles sur Grafana Labs.
Outils de surveillance spécifiques à Kafka
- Kafka Manager (anciennement Yahoo Kafka Manager) : Un outil web populaire pour gérer les clusters Kafka. Il fournit l'état des brokers, l'inspection des topics, la surveillance du décalage des consommateurs et la gestion des partitions.
- CMAK (Cluster Manager for Apache Kafka) : Un fork de Kafka Manager, activement maintenu et offrant des fonctionnalités similaires.
- Lenses.io / Confluent Control Center : Offres commerciales qui fournissent des capacités avancées de surveillance, de gestion et de visualisation des données Kafka.
- Piles de surveillance Kafka open source : Combinaisons telles que la pile ELK (Elasticsearch, Logstash, Kibana) avec les logs Kafka, ou la pile TICK (Telegraf, InfluxDB, Chronograf, Kapacitor) pour les données de séries temporelles.
Configuration d'alertes efficaces
Une fois que vous collectez des métriques, l'étape suivante consiste à configurer des alertes pour les conditions critiques. Votre stratégie d'alerte doit se concentrer sur les problèmes qui affectent directement la disponibilité des applications, l'intégrité des données ou les performances.
Alertes critiques à configurer :
- Partitions sous-répliquées > 0 : Il s'agit d'une alerte de haute priorité indiquant une perte de données potentielle ou une indisponibilité. Une enquête immédiate est requise.
- Nombre de partitions hors ligne > 0 : Similaire aux partitions sous-répliquées, cela signifie que des partitions sont entièrement indisponibles.
- Décalage élevé du consommateur : Définissez un seuil en fonction de la tolérance de votre application aux données obsolètes. Alertez lorsque le décalage dépasse ce seuil pendant une durée spécifique (par exemple, 5 minutes).
Exemple PromQL (conceptuel pour Prometheus/Grafana) :
promql avg_over_time(kafka_consumergroup_lag_max{group="your-consumer-group"}[5m]) > 1000
*Note : Le nom exact de la métrique et la façon dont le décalage est calculé dépendront de votre configuration de surveillance (par exemple, en utilisant les métriques de Kafka,kafka-exporter, ou les métriques côté client). - Utilisation CPU/Mémoire/Disque des brokers : Alertez lorsque l'utilisation dépasse les seuils prédéfinis (par exemple, 80% pour le CPU/mémoire, 90% pour le disque). L'espace disque est particulièrement critique pour Kafka.
- Latence de requête élevée : Alertez sur les augmentations soutenues de
RequestMetrics.TotalTimeMsou de types de requêtes spécifiques (par exemple, Produce, Fetch). - Redémarrage/Indisponibilité du broker : Configurez des alertes lorsque qu'un broker Kafka devient inaccessible ou arrête de rapporter des métriques.
- Pics du taux d'élection de leader : Alertez sur des taux inhabituellement élevés d'élections de leaders, ce qui peut indiquer une instabilité.
Intégration des outils d'alerte
Votre configuration Prometheus peut s'intégrer à des gestionnaires d'alertes tels qu'Alertmanager. Alertmanager gère la déduplication, le regroupement et le routage des alertes vers divers canaux de notification tels que l'e-mail, Slack, PagerDuty, etc.
-
Exemple de configuration Alertmanager (
alertmanager.yml) :
```yaml
route:
group_by: ['alertname', 'cluster', 'service']
receiver: 'default-receiver'
routes:
- receiver: 'critical-ops'
match_re:
severity: 'critical'
continue: truereceivers:
- name: 'default-receiver'
slack_configs:
- channel: '#kafka-alerts'- name: 'critical-ops'
slack_configs:- channel: '#kafka-critical'
pagerduty_configs: - service_key: '
'
```
- channel: '#kafka-critical'
- name: 'critical-ops'
Bonnes pratiques pour la surveillance et l'alerte de Kafka
- Établir des bases de référence : Comprenez le comportement opérationnel normal de votre cluster Kafka. Cela aide à définir des seuils d'alerte significatifs et à identifier les anomalies.
- Hiérarchiser vos alertes : Différenciez les alertes critiques nécessitant une action immédiate des alertes informatives qui nécessitent un examen mais n'exigent pas nécessairement une réponse d'urgence.
- Automatiser les actions : Pour les problèmes courants (par exemple, les avertissements d'espace disque), envisagez d'automatiser les étapes de résolution lorsque cela est sûr.
- Surveiller Zookeeper : Kafka dépend fortement de Zookeeper. Surveillez également la santé, la latence et la disponibilité des nœuds de Zookeeper.
- Surveiller le réseau : Assurez-vous que la connectivité réseau et la latence entre les brokers et les clients sont dans les limites acceptables.
- Examiner régulièrement les tableaux de bord : Ne vous fiez pas uniquement aux alertes. Examinez régulièrement vos tableaux de bord de surveillance pour repérer les tendances et les problèmes potentiels avant qu'ils ne déclenchent des alertes.
- Tester vos alertes : Testez périodiquement votre système d'alerte pour vous assurer que les notifications sont envoyées correctement et parviennent aux bonnes personnes.
Conclusion
Une surveillance et une alerte efficaces ne sont pas facultatives pour les clusters Kafka ; elles sont fondamentales pour maintenir une plateforme de streaming d'événements fiable, performante et évolutive. En suivant diligemment les métriques clés des brokers, des topics et des consommateurs, et en configurant des alertes opportunes et exploitables, vous pouvez réduire considérablement les temps d'arrêt, prévenir la perte de données et garantir que vos applications basées sur Kafka tiennent leurs promesses. Investissez dans une stratégie de surveillance robuste dès aujourd'hui pour sécuriser l'avenir de votre infrastructure de données en temps réel.