Kafka Producers

  • Les Consumers lisent les données d’un Topic (identifié par son nom) : pull model
  • Les Consumers connaissent automatiquement sur quel broker se connecter
  • Les consumers savent gérer automatiquement la perte d’un broker
  • Les données sont lues dans l’ordre du plus petit au plus grand offser pour chaque partition Kafka Consumer

Deserializer

  • Le Deserializer permet de transformer les Bytes en objet/data
  • C’est utiliser sur les Value & Key des messages
  • Les Deserializer communs:
    • String (incl. JSON)
    • Int, Float
    • Avro
    • Protobuf
  • Le type de Serializer/Deserializer ne peut pas changer durant le cycle de vie (créer un nouveau topic à la place)

Kafka Deserializer

Consumer Groups

  • Tous les Consumers dans une application lisent les données en tant que Consumer Groups
  • Chaque Consumer dans un groupe lit depuis une/des partitions spécifiques Kafka Consumer Groups

Qu’est qu’il se passe s’il y a beaucoup de consumer ?

  • Si il y a plus de consumers que de partitions, il y aura des consumers inactifs.

Kafka Many Consumer Groups

Multiple Consumers sur un topic

  • Kafka accepte d’avoir plusieurs consumer-group sur un même topic Kafka Many Consumer Groups

Offsets

  • Kafka stoque les offsets de chaque consumer-group qui ont été lus
  • Les offsets commités sont stoqués dans un topic nommé __consumer_offsets
  • Quand un consumer dans un groupe a traité des doonées de Kafka, il doit commiter périodiquement les offsets (c’est le Kafka broker écrit dans le topic __consumer_offsets)
  • Si un consommateur meurt, il sera en mesure de relire à partir de l’endroit où il s’est arrêté grâce à l’offset qu’il a commité Kafka Many Consumer Groups

Delivery semantics pour les consumers

  • Par défaut, les consumers Java vont automatiquement commiter les offsets (at least once)
  • Il y a 3 Delivery semantics que l’on peut choisir en commitant manuellement
    • At least once (principalement utilisé)
      • Les offsets sont commités après que le message soit processé
      • S’il y a un problème dans le processing du message, il redevient disponible en lecture
      • Il peut en résulter une duplication de processing de message, il faut s’assurer que le process est idempotent
    • At most once
      • Les offsets sont commités aussitôt que les messages sont reçus
      • S’il y a un problème dans le processus, des messages peuvent être perdu (ils ne pourront plus être lus)
    • Exactly once
      • Pour Kafka: Kafka workflows, utiliser the transactional API (facile avec Kafka Streams API)
      • Pour Kafka: External systm workflows: utiliser un consumer idempotent.