{:description "Kafka 0.10",
 :tags (),
 :date #inst "2019-01-07T23:00:00.000-00:00",
 :slug "kafka-synthese",
 :reading-time 3,
 :toc nil,
 :klipse/local nil,
 :layout "post.html",
 :author-uri "/blog/auteurs/francois-sarradin",
 :content
 "<p>Kafka 0.10</p><ul><li>Kafka Streams</li><li>Rack awareness</li></ul><p>Kafka 0.11</p><ul><li>Reco...",
 :formatted-archive-group "2019-01",
 :type :post,
 :title "Kafka : synthèse",
 :author "François Sarradin",
 :parsed-archive-group #inst "2018-12-31T23:00:00.000-00:00",
 :next
 {:tags #{"ZIO" "Scala" "Quick-tips"},
  :date #inst "2018-11-21T23:00:00.000-00:00",
  :slug "zio-mais-d-ou-vient-cette-stack-trace",
  :reading-time 3,
  :toc nil,
  :klipse/local nil,
  :layout "post.html",
  :formatted-archive-group "2018-11",
  :type :post,
  :title "ZIO : mais d'où vient cette stack trace ?",
  :author "Philippe Hong",
  :parsed-archive-group #inst "2018-10-31T23:00:00.000-00:00",
  :file-name "zio-mais-d-ou-vient-cette-stack-trace.html",
  :ghost
  "https://blog.univalence.io/zio-mais-dou-vient-cette-stack-trace/",
  :notion-id "65c624c5f3be4164bd26e2a531dc6c41",
  :uri "/blog/articles/zio-mais-d-ou-vient-cette-stack-trace/",
  :klipse/global {}},
 :file-name "kafka-synthese.html",
 :prev
 {:tags #{},
  :date #inst "2019-01-20T23:00:00.000-00:00",
  :slug
  "parler-de-programmation-fonctionnelle-a-l-universite-retour-sur-mon-intervention-a-l-universite-pari...",
  :reading-time 3,
  :toc nil,
  :klipse/local nil,
  :layout "post.html",
  :formatted-archive-group "2019-01",
  :type :post,
  :title
  "Parler de programmation fonctionnelle à l'université - retour sur mon intervention à l'Université Pa...",
  :author "François Sarradin",
  :parsed-archive-group #inst "2018-12-31T23:00:00.000-00:00",
  :file-name
  "parler-de-programmation-fonctionnelle-a-l-universite-retour-sur-mon-intervention-a-l-universite-pari...",
  :ghost
  "https://blog.univalence.io/parler-de-programmation-fonctionnelle-a-luniversite-retour-sur-notre-inte...",
  :notion-id "fa5823fc988c413c97a27b418e58abf4",
  :uri
  "/blog/articles/parler-de-programmation-fonctionnelle-a-l-universite-retour-sur-mon-intervention-a-l-...",
  :klipse/global {}},
 :ghost "https://blog.univalence.io/kafka-synthese/",
 :notion-id "ba1f971f0bdc4b2a965c2d0b17cc4c44",
 :uri "/blog/articles/kafka-synthese/",
 :klipse/global {}}

Kafka : synthèse

Kafka 0.10

  • Kafka Streams
  • Rack awareness

Kafka 0.11

  • Record headers
  • Exactly-once semantic

Kafka 1.0

  • Améliorations diverses

Kafka 2.0

  • ACLs, sécurité

https://www.youtube.com/watch?time_continue=3&v=lIGFH9TkL2w

(CEO of DataCumulus, une boite parisienne, fondée en Juillet 2018, spécialisé en Kafka + AWS)


Draft 0.2

NameCreatedTags
IntroductionDec 04, 2018 2:25 PM
Quels sont les usages de Kafka ?Dec 07, 2018 8:52 AM
Architecture et fonctionnementDec 04, 2018 2:27 PM
ÉcosystèmeDec 06, 2018 6:11 PM
ConclusionDec 06, 2018 6:12 PM

Draft 0.1

Kafka est sorti récemment en version 2.1. Cette version inclue un certains nombres de correctifs par rapport à la version 2.0, mais aussi l'intégration de Java 11 et la possibilité de un nouvel algorithme de compression développé par Facebook et plus rapide que GZip pour un taux de compression équivalent : ZStandard.

Cette article est l'occasion de revenir sur les dernières évolutions de Kafka par rapport aux versions encore assez utilisés dans les systèmes d'information actuels : nous allons pour cela partir de Kafka 0.10.

Le versioning dans Kafka

Les numéros de version de Kafka ne suivent pas exactement un schéma classique. Par exemple, les changements entre la 0.10 et la 0.11 sont plus important que les changements apparaissant entre la 0.11 et la 1.0, sachant que la 1.0 est plus une version de stabilisation. Autre exemple, les nouveautés la 2.1 crée un changement qui ne permet pas de revenir aux versions précédentes.

Kafka 0.10

Jusqu'à la version 0.10, Kafka était déjà connu comme un framework de messaging distribué.

Avec la version 0.10, Kafka devient aussi un framework de streaming.

Kafka 0.11

Dans un objectif de s'aligner avec la plupart des protocoles réseaux, comme HTTP ou TCP, ainsi que les systèmes de message, comme JMS ou QPID, la version 0.11 de Kafka permet d'ajouter un en-tête à chaque message. Un message est donc depuis cette version défini :

  • par un corps, composé d'une clé et d'une valeur ;
  • par une en-tête, qui est un ensemble clé-valeur.

L'en-tête permet d'ajouter des méta-données aux messages dans différents objectifs, comme le routage automatique des messages entre différents cluster, l'intégration d'informations d'audit comme l'ID client, l'ID cluster où a été produit le message, etc. ou enfin, la mise en place de métriques.

Une en-tête est représentée par l'interface Header. Dans celle-ci, la clé est sous forme d'une chaîne de caractères (String) au format UTF-8 et le contenu sous forme de tableau d'octet (byte[]). Ce qui permet d'y mettre toute sorte de données sérialisées.

Les Header sont rassemblés dans une structure mutable appelé Headers. Il s'agit d'une interface dérivé de Iterable<Header>. C'est cette structure qui rattachée aux Record depuis Kafka 0.11.

Dans Headers, les méthodes les plus intéressantes sont :

  • add(String key, byte[] value) pour ajouter une métadonnée ;
  • Iterable<Header> headers(String key) pour retourner toutes les en-têtes dont la clé est key.

Il y a aussi Header lastHeader(String key), qui retourne la "dernière" métadonnée de clé key. Mais il ne semble pas avoir d'explication sur ce qui est entendu par "dernière". Dans l'implémentation actuelle, un java.util.ArrayList est utilisé pour stocker les en-têtes. Dernière dans cette implémentation signifie l'élément avec le plus grand indice. La recherche se fait donc en O(n) en partant du dernier élément.

Exactly once

Il existe typiquement trois sémantiques de livraison de message dans un système répartie :

  • At-least-once : le système garanti qu'un message sera transmis et qu'il apparaît au moins une fois au niveau d'un consommateur. Ce qui veut dire qu'un message produit pourra être consommé. Ce qui veut aussi dire qu'un message peut être dupliqué.
  • At-most-once : le système garanti qu'un message ne sera pas dupliqué. Mais il peut ne pas transmettre le message.
  • Exactly-once : le système garanti qu'un message produit sera transmis et fourni en un seul exemplaire au consommateur.

What's New in Kafka 2.1?

La GetSet parisienne qui découvre Kafka

Les Cast Codeurs Podcast | LCC 193 - Interview Apache Kafka avec Florent Ramière