Un monde d'octets

Aller au contenu | Aller au menu | Aller à la recherche

mercredi, septembre 4 2019

Kafka : voir les topics et leurs informations

avoir un kafka qui fonctionne est une chose, être capable devoir ce qu'il fait est encore autre chose voici quelques commandes impératives à connaitre :

Lister les topics

kafka-topics.sh --list --zookeeper localhost:2181

Informations sur partitions et réplicats d'un topic

kafka-topics.sh --describe --zookeeper localhost:2181

Création d'un topic

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 4 --topic poolparty

Si on ne précise pas "replication-factor" et "partitions", les valeurs par défaut seront celles du server.proprietes de kafka. Il faut savoir aussi que sans sécurité, tout producer peut ouvrir un topic en y envoyant un message.

Suppression d'un topic

kafka-topics.sh --delete --zookeeper localhost:2181 --topic poolparty

Modification des paramêtres d'un topic

kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 5 --topic poolparty

Il est possible d'ajouter des partitions à un topic (mais pas d'en enlever, cela conduirait à une perte de messages). Il n'est pas possible avec "alter" d'ajouter ou supprimer des réplicats.

Kafka : producing et consuming

Sur un de mes containers lxc j'ai des scripts de test simple de production et consommation de messages. Lors de la production, nous spécifions des informations de création :

producer = KafkaProducer(bootstrap_servers=['192.168.1.144:9092'],
                         value_serializer=lambda x:
                         dumps(x).encode('utf-8'))

data = {'number' : e}
producer.send('numtest', value=data, key=b'foo')

On voit ici que le topic est numtest et que nous assurons un suivit de partition avec la clef 'foo';$

Ici l'ouverture du message kafka n'a précisé que le topic "numtest" et la clef "foo". Nous obtenons donc un pool topic/partitions qui suit les directives du serveur :

~kafka/config/server.properties

# The default number of log partitions per topic. More partitions allow greater
num.partitions=3

Kafka : suivre les consommateurs

Connaitre les topics et partitions et leurs consommation :

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups

Consumer group 'my-group' has no active members.

GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
my-group        numtest         0          281             281             0               -               -               -
my-group        numtest         1          234             234             0               -               -               -
my-group        numtest         2          2270            2270            0               -               -               -

Si je lance un consumer, voici ce qui se passe :

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --all-groups

GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                             HOST            CLIENT-ID
my-group        numtest         0          281             281             0               kafka-python-1.4.6-6c083338-43ec-4911-9bc8-86a1b8031806 /192.168.1.90   kafka-python-1.4.6
my-group        numtest         1          234             234             0               kafka-python-1.4.6-6c083338-43ec-4911-9bc8-86a1b8031806 /192.168.1.90   kafka-python-1.4.6
my-group        numtest         2          2270            2270            0               kafka-python-1.4.6-6c083338-43ec-4911-9bc8-86a1b8031806 /192.168.1.90   kafka-python-1.4.6

Avec les informations suivantes :

  • CURRENT-OFFSET : l'offset du dernier message lu
  • LOG-END-OFFSET : l'offset du dernier message reçu
  • LAG : le delta entre LOG-END et CURRENT

bref, cette commande nous permet de voir si des messages ont été postés et/ou consommés et aussi si il y'a des consommateurs actuellement actifs.