web-dev-qa-db-fra.com

Kafka - Comment valider l'offset après chaque message en utilisant un consommateur de haut niveau?

J'utilise le consommateur de haut niveau de Kafka. Parce que j'utilise Kafka comme 'file d'attente de transactions' pour mon application, je dois m'assurer absolument de ne pas manquer ou relire les messages. J'ai 2 questions à ce sujet :

  1. Comment valider l'offset dans zookeeper? Je désactiverai la validation automatique et la compensation de validation après chaque message consommé avec succès. Je n'arrive pas à trouver des exemples de code réels sur la façon de le faire en utilisant un consommateur de haut niveau. Est-ce que quelqu'un peut m'aider avec ça?

  2. D'un autre côté, j'ai entendu dire que s'engager dans zookeeper pouvait être lent, donc une autre façon pourrait être de garder une trace locale des décalages? Cette méthode alternative est-elle recommandée? Si oui, comment l'aborderiez-vous?

24
Hongyi Li

Il existe deux paramètres pertinents de http://kafka.Apache.org/documentation.html#consumerconfigs .

auto.commit.enable

et

auto.commit.interval.ms

Si vous souhaitez le définir de telle sorte que le consommateur valide le décalage après chaque message, cela sera difficile car le seul paramètre est après un intervalle de temporisation, pas après chaque message. Vous devrez faire une prédiction de débit des messages entrants et régler l'heure en conséquence.

En général, il n'est pas recommandé de garder cet intervalle trop petit car il augmente considérablement les taux de lecture/écriture dans zookeeper et zookeeper est ralenti car il est fortement cohérent sur son quorum.

22
laughing_man

Vous pouvez d'abord désactiver la validation automatique: auto.commit.enable=false

Validez ensuite après avoir récupéré le message: consumer.commitOffsets(true)

25
Yueheng Li