Kafka - comment engager offset après chaque message en utilisant le consommateur de haut niveau?

j'utilise le consommateur de haut niveau de Kafka. Parce que J'utilise Kafka comme une "file d'attente de transactions" pour mon application, je dois absolument m'assurer que je ne manque pas ou relire des messages. J'ai 2 questions au sujet de ceci:

  1. Comment puis-je verser la compensation à zookeeper? Je vais désactiver l'auto-propagation et la propagation offset après chaque message consommé avec succès. Je n'arrive pas à trouver des exemples de code réels de la façon de faire cela en utilisant le consommateur de haut niveau. Quelqu'un peut m'aider avec cela?

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

20
demandé sur Hongyi Li 2014-08-13 22:34:11

2 réponses

il y a deux paramètres pertinents de http://kafka.apache.org/documentation.html#consumerconfigs.

auto.commit.enable

et

auto.commit.interval.ms

si vous voulez le définir de telle sorte que le consommateur commette l'offset après chaque message, ce sera difficile puisque le seul réglage est après un intervalle de temps, pas après chaque message. Vous devrez faire une prédiction du taux des messages entrants et définir l'heure en conséquence.

En général, il n'est pas recommandé de garder cet intervalle trop petit parce qu'il augmente considérablement les taux de lecture/écriture dans zookeeper et zookeeper se ralentit parce qu'il est fortement cohérent à travers son quorum.

20
répondu laughing_man 2014-08-20 01:10:36

vous pouvez d'abord désactiver auto commit:auto.commit.enable=false

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

19
répondu Yueheng Li 2015-04-29 18:55:53