Note de lecture : Kafka : The Definitive Guide, par Neha Narkhede, Gwen Shapira & Todd Palino

Note : 7 ; Pour comprendre réellement Kafka, par ceux qui l’ont fait… Mais probablement hélas dépassé.

Voici un ouvrage qui, s’il n’est peut-être pas le « definitive guide » qu’il promet d’être (je reviendrais là-dessus) va nous permettre de réellement appréhender ce qui est aujourd’hui l’un des joueurs dominant du monde du big data. Qui de mieux placé pour cela que l’équipe qui fut à l’origine du projet chez LinkedIn ? C’est la promesse du livre et elle est bel et bien tenue.

Justement le texte, parlons-en. Ilse présente en 11 chapitres totalisant 280 pages. Il débute classiquement par un premier chapitre « Meet Kafka » qui nous présente la bête en 16 pages. En fait il fait bien mieux qu’une simple présentation. Certes, il évoque les principes généraux du middleware orienté messages, mais surtout ce chapitre permet d’appréhender le principe de la rétention basée sur le disque. Partitionning, réplication et mirroring sont aussi abordés mais ils seront plus développés par la suite. L’installation de Kafka est au cœur du second chapitre. Ou pas exactement, en fait. Certes, le chapitre aborde de manière bien décomposée l’installation de Kafka, mais aussi de Zookeeper. Mais ce qui occupe la plus grande partie des 20 pages de ce chapitre est consacré à la configuration du broker, mais aussi du cluster jusqu’à des questions assez délicates liées à la JVM ou aux écritures sur disque. En réalité, la configuration de Kafka va bien plus loin que cela, mais on est déjà largement au-delà du niveau « premier contact » !

Au chapitre 3, nous nous frottons à l’écriture d’un « producteur », c’est-à-dire de l’alimentation de Kafka, et ce via du code Java. J’ai bien aimé les extraits de code, ni trop courts faute de quoi il nous manque le contexte, ni trop long quand le code utile est noyé dans une litanie. La partie est plutôt complète, intégrant bien sûr la construction et l’envoi d’un message, puis intégrant progressivement, la configuration, la sérialisation avec Avro puis finalement le partitioning. Un régal. Le chapitre 4 lui fait écho en nous livrant le même exercice côté consommateur. Et l’on va assez loin, je dois dire : désérialisation, bien sûr, mais aussi rebalancing, groupes de consommateur et gestion de l’offset de lecture (qui est bel et bien un élément important à gérer côté consommateur).

Le chapitre 5 nous emmène vers les entrailles de Kafka. On débute directement par la gestion du cluster, où le propos manque cruellement d’illustration, mais j’ai plus été intéressé par la gestion des requêtes avec les I/O threads et les network threads ! D’autres mécanismes internes comme la gestion de la visibilité des messages (le « watermark ») sont aussi développés, tout comme la gestion du disque, ou le format physique des messages. S’il ne semble pas nécessaire pour utiliser Kafka, ce savoir peut s’avérer utile pour mieux en comprendre certains comportements. Au chapitre 6, il est question de la garantie de fiabilité. Évidemment, c’est l’occasion d’entrer en profondeur dans les mécanismes de réplication. Mais le sujet s’étend à la gestion des erreurs et à la redondance des producteurs et des consommateurs ! Un sujet plus que correctement traité.

Il est temps de mettre les morceaux ensemble, et c’est ce que fait le chapitre 7 en entrant dans les considérations de conception du « Data Pipeline » : format des messages, sécurité .. Mais c’est surtout Kafka Connect qui occupe l’espace ici. C’est une bonne chose, car c’est un sujet vaste et important. En fait il aurait bien mérité son propre chapitre. Le mirroring, qui permet la réplication entre plusieurs datacenters est un sujet qui commence à nous emmener loin. C’est l’objet du chapitre 8. Les principes, stratégies et cinématiques de fonctionnement sont très clairement expliquées. Mais outre qu’il s’agit d’aspects avancés, je doute que tout y figure. Ce serait plutôt l’objet d’un ouvrage consacré à l’administration de Kafka. Quoi qu’il en soit, le chapitre est un plaisir à lire.

L’administration Kafka, justement, est un sujet incontournable. Le chapitre 9 lui est consacré. Il s’agit plutôt d’un livre de recette des opérations, même si j’admets que c’est une grande partie de l’administration. Mais le propos nous éclaire peu sur la logique de gestion d’un cluster. Heureusement, le chapitre 10 consacré au monitoring vient compléter le propos. En dehors du propos initial sur les métriques internes et externes, il s’agit surtout d’un catalogue très complet sur les métriques exportées en JMX. Il s‘agit plus d’un chapitre à consulter en référence que d’un chapitre à lire. Enfin le chapitre 11 aborde le Stream procession, donc Kafka Stream, qui était en fait mon intérêt initial ! Il s’agit en fait d’une introduction au sujet, car si tous les concepts sont effectivement abordés, les exemples de mise en œuvre restent limités. Je pense particulièrement à la gestion des états avec RockDB ou au « stream join ».. Beaucoup de questions restent ouvertes ! De même, la conception des topologies manque d’exemple et de

clarté : où finit un nœud et où commence une topologie ? Un exemple sérieux aurait été bienvenu.
L’ouvrage est vraiment très complet sur les différentes facettes de Kafka. Mais s’il couvre bien en largeur, je doute qu’il couvre en profondeur comme le prétend le titre. Personnellement, cela me va très bien. Le propos est clair et excellemment illustré. Le plus gros défaut concerne son exposition à l’obsolescence. Fréquemment, les auteurs ont évoqué des évolutions en cours et à venir… et on n’en est ici qu’à la version 0.10, alors qu’en Mai 2021, c’est la version 2.7 qui est en GA. En version actualisée du texte est vraiment urgente à ce stade. Elle semble prévue pour la fin d’année 2021. Nous l’attendons avec impatience.

Référence complète : Kafka : The Definitive Guide – Neha Narkhede, Gwen Shapira & Todd Palino – O’Reilly 2017 – ISBN : 978-1-491-93616-0

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.