Ce que tu vas faire
Kafka garde les messages dans un topic, qui est un journal : les producteurs ajoutent à la fin, et les consommateurs lisent à partir de n'importe quel endroit. Un topic est découpé en partitions, et chaque message reçoit un offset, son numéro dans sa partition, en comptant à partir de zéro. Ici, tu crées un topic, tu y ajoutes trois messages et tu les relis depuis le début.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de la leçon et attends qu'il indique qu'il est en marche. Le broker démarre en premier, puis la page, donc le premier démarrage dure environ une minute. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l'une après l'autre, dans la même session. Pour suivre les commandes ou taper les tiennes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.
1. Crée un topic
Cette commande demande à l'API web derrière Kafka UI un topic nommé orders avec trois partitions. Elle affiche 200, le code web qui veut dire « c'est fait », sur sa propre ligne : \n après %{http_code} termine la ligne. La deuxième commande liste les partitions : "partition":0, "partition":1 et "partition":2, chacune avec "offsetMax":0. Ce nombre est le prochain offset, celui que recevra le prochain message. Les trois partitions sont donc vides.
curl -s -X POST -H "Content-Type: application/json" -d '{"name":"orders","partitions":3,"replicationFactor":1,"configs":{}}' http://kafka-ui:8080/api/clusters/lab/topics -o /dev/null -w "%{http_code}\n"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
2. Produis trois messages
Chaque commande ajoute un message et affiche 200. Les deux premiers vont dans la partition 0 et le troisième dans la partition 1. Une commande doit nommer une partition. Dans la page elle-même, le bouton Produce Message (« produire un message ») du topic fait la même chose.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"coffee","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"tea","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":1,"key":"bob","value":"cake","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
3. Regarde les offsets et relis tout
Relance la première commande : la partition 0 dit maintenant "offsetMax":2, la partition 1 dit 1 et la partition 2 dit toujours 0. Chaque partition compte de son côté. La deuxième commande lit le topic depuis le début, comme le fait un nouveau consommateur. Elle affiche la partition et l'offset de chaque message à côté de sa valeur : coffee est dans la partition 0 à l'offset 0, tea dans la partition 0 à l'offset 1 et cake dans la partition 1 à l'offset 0. Les messages arrivent du plus récent au plus ancien, donc cake s'affiche avant coffee. L'ordre, c'est celui des offsets.
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
curl -s -N "http://kafka-ui:8080/api/clusters/lab/topics/orders/messages/v2?seekType=BEGINNING&limit=10" | grep -o '"partition":[0-9]*,"offset":[0-9]*\|"value":"[a-z]*"'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour les enseignants
Astuce
Cette leçon est un petit exemple de leçon travaillée dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie de chaque élève. Le lab compte deux services, un broker et la page qui le lit, et rien ici ne se corrige tout seul : l'élève rend les offsets avant et après, avec une phrase expliquant pourquoi chaque partition commence à zéro. Le broker ne garde rien quand le lab s'arrête. Copiez-la dans votre propre module et modifiez-la, ou créez-en une de zéro avec le menu Lab du créateur de leçons.