web-dev-qa-db-fra.com

Kafka politique de rétention et de suppression optimale

Je suis assez nouveau pour kafka alors pardonnez-moi si cette question est triviale. J'ai une configuration très simple à des fins de chronométrage comme suit:

Machine A -> écrit sur le sujet 1 (Broker) -> La machine B lit le sujet 1 Machine B -> écrit le message juste lu sur le sujet 2 (Broker) -> La machine A lit le sujet 2

Maintenant, j'envoie des messages d'environ 1400 octets dans une boucle infinie remplissant très rapidement l'espace sur mon petit courtier. J'expérimente avec la définition de différentes valeurs pour log.retention.ms, log.retention.bytes, log.segment.bytes et log.segment.delete.delay.ms. J'ai d'abord défini toutes les valeurs au minimum autorisé, mais il semblait que ces performances se dégradaient, puis je les ai définies au maximum que mon courtier pouvait prendre avant d'être complètement plein, mais encore une fois, les performances se dégradent lorsqu'une suppression se produit. Existe-t-il une meilleure pratique pour définir ces valeurs afin d'obtenir le délai minimum absolu?

Merci pour l'aide!

10
Mohammad Ahmad

Apache Kafka utilise la structure de données Log pour gérer ses messages. La structure de données Log est essentiellement un ensemble ordonné de segments tandis qu'un segment est une collection de messages. Apache Kafka assure la rétention au niveau du segment plutôt qu'au niveau du message. Par conséquent, Kafka continue de supprimer les segments de son extrémité car ceux-ci violent les politiques de rétention.

Apache Kafka nous fournit les politiques de rétention suivantes -

  1. rétention basée sur le temps

Dans le cadre de cette politique, nous configurons la durée maximale pendant laquelle un segment (d'où les messages) peut vivre. Une fois qu'un segment a dépassé le temps de rétention configuré, il est marqué pour suppression ou compactage en fonction de la politique de nettoyage configurée. Le temps de rétention par défaut pour les segments est de 7 jours.

Voici les paramètres (par ordre décroissant de priorité) que vous pouvez définir dans votre fichier de propriétés du courtier Kafka:

Configure le temps de rétention en millisecondes

log.retention.ms = 1680000

Utilisé si log.retention.ms n'est pas défini

log.retention.minutes = 1680

Utilisé si log.retention.minutes n'est pas défini

log.retention.hours = 168

  1. rétention basée sur la taille

Dans cette stratégie, nous configurons la taille maximale d'une structure de données de journal pour une partition de rubrique. Une fois que la taille du journal atteint cette taille, il commence à supprimer les segments de sa fin. Cette stratégie n'est pas populaire car elle n'offre pas une bonne visibilité sur l'expiration des messages. Cependant, cela peut être utile dans un scénario où nous devons contrôler la taille d'un journal en raison de l'espace disque limité.

Voici les paramètres que vous pouvez définir dans votre fichier de propriétés du courtier Kafka:

Configure la taille maximale d'un journal

log.retention.bytes = 104857600

Donc, selon votre cas d'utilisation, vous devez configurer log.retention.bytes afin que votre disque ne soit pas plein.

8
Abhimanyu