web-dev-qa-db-fra.com

Comment supprimer un groupe de consommateurs Kafka pour réinitialiser les compensations?

Je souhaite supprimer un groupe de consommateurs Kakfa afin que, lorsque l'application crée un consommateur et s'abonne à un sujet, celle-ci puisse commencer au début des données du sujet.

Il s’agit d’un vm à nœud unique utilisant la dernière version de Confluent Platform 3.1.2, qui utilise Kafka 0.10.1.1.

J'essaie la syntaxe normale:

Sudo /usr/bin/kafka-consumer-groups --new-consumer --bootstrap-server localhost:9092 --delete --group my_consumer_group

Je reçois l'erreur:

Option [delete] is only valid with [zookeeper]. Note that there's no need to delete group metadata for the new consumer as the group is deleted when the last committed offset for that group expires.

Si j'essaie la variante zookeeper:

Sudo /usr/bin/kafka-consumer-groups --zookeeper localhost:2181 --delete --group my_consumer_group

Je reçois:

Delete for group my_consumer_group failed because group does not exist.

Si je liste en utilisant le "vieux" consommateur, je ne vois pas mon groupe de consommateurs (ni aucun autre groupe de consommateurs)

Sudo /usr/bin/kafka-consumer-groups --zookeeper localhost:2181 --list

Si je liste en utilisant le "nouveau" consommateur, je peux voir mon groupe de consommateurs mais apparemment, je ne peux pas le supprimer:

Sudo /usr/bin/kafka-consumer-groups --new-consumer --bootstrap-server localhost:9092 --list
6
clay

La mise à niveau vers la nouvelle version de Confluent Platform 3.2 avec Kafka 0.10.2 a résolu le problème sous-jacent. Lorsque je supprime un sujet, les informations de décalage sont maintenant correctement réinitialisées. Ainsi, lorsque je crée un sujet portant le même nom, les consommateurs démarrent au début des nouvelles données.

Je ne parviens toujours pas à supprimer les nouveaux groupes de consommateurs de styles avec l'outil kafka-consumer-groups, mais le problème sous-jacent est résolu.

Avant Kafka 0.10.2, il y avait des hacks, mais aucune solution propre à ce problème.

3
clay

Dans Kafka 0.11 (ou Confluent 3.3), vous pouvez réinitialiser les décalages de tout groupe de consommateurs existant sans avoir à supprimer le sujet. En fait, vous pouvez remplacer les décalages par une valeur de décalage absolue, un horodatage ou une position relative. 

Ces nouvelles fonctions sont toutes ajoutées avec le nouvel indicateur --reset-offsets dans l'outil de ligne de commande kafka-consumer-groups.

Voir les détails de KIP-122 ici https://cwiki.Apache.org/confluence/display/KAFKA/KIP-122%3A+Add+Reset+Consumer+Group+Offsets+tooling

4
Hans Jespersen

Si vous utilisez un client Java, vous pouvez d'abord obtenir le décalage de début.

TopicPartition partition = new TopicPartition("YOUR_TOPIC", YOUR_PARTITION);
Map<TopicPartition, Long> map = consumer.beginningOffsets(Collections.singleton(partition));

Et l'offset utilisé par le consommateur pour commencer le traitement (si ce n'est pas supprimer le groupe de consommateurs).

Long committedOffset = consumer.committed(partition).offset();

Maintenant, si vous pensez que commencer à partir de committedOffset est correct, interrogez simplement les enregistrements . Si vous voulez le décalage de début, consumer.seek (partition, map.get (partition));

3
zeromem

Cela peut être fait avec Kafka 1.1.x. De la documentation:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --delete --group my-group --group my-other-group

2
Bitswazsky