paris kafka meetup - concepts & architecture
TRANSCRIPT
![Page 1: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/1.jpg)
Paris Apache Kafka Meetup
Florian HUSSONNOISZenika
@fhussonnois
![Page 2: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/2.jpg)
Qu’est-ce que Kafka ?
Les concepts et l’architectureStructure et distribution des messagesLa tolérance à la panneLa consommation des messages
Les nouvelles APIsKafka Connect et Kafka Streams
(PIZZAS)
Comment développer avec les APIs Clients ?API ProducerAPI Consumer
![Page 3: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/3.jpg)
A high-throughput distributed messaging system
![Page 4: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/4.jpg)
Kafka est un projet créé à l’origine chez
Open-source en 2011
Broker
Broker
Broker
Producer
Producer
Producer
Consumer
Consumer
Consumer
Publish Subscribe
ClusterDistribué
Hautement scalable
Durable
Tolérant à la panne
Un simple système de messages
![Page 5: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/5.jpg)
Spécification3 machines : « commodity hardware »
Intel Xeon 2.5 GHz processor with six cores
Six 7200 RPM SATA drives (JBOD)
32GB of RAM
1Gb Ethernet
Scenario (message = 100 octets)
Three producers, 3x async replication
2,024,032 records/sec (193.0 MB/sec)O(1)
![Page 6: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/6.jpg)
Fast Writes
Toutes les écritures sont mises dans le page-cache (c.à.d RAM)
Zero-Copy
Evite les copies redondantes de données entre des buffers intermédiaires
Réduit les context-swithes entre Kernel et Application.
API Java NIO (java.nio.channels.FileChannel)
transferTo() transfert des données depuis un fichier vers une socket
Unix – sendfile()
![Page 7: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/7.jpg)
Construction de data pipelines à très faible latence
Log delivery, collection processing
Data integration
Activity stream, Data pipeline
Real-Time monitoring / Event Tracking
![Page 8: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/8.jpg)
Kafka Core
Le système de messagerie distribué
Kafka Client
API Clients pour publier / consommer des messages (Java, C++, Go, etc)
Kafka Connect
API pour connecter des systèmes à Kafka en tant que Source ou Sink
Kafka StreamFramework pour développer des applications data-driven / realtime stream processing
![Page 9: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/9.jpg)
Topic, Partition, Stockage et Rétention
![Page 10: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/10.jpg)
Clé Valeur
Optionnelle (Primary Key)
Bytes (Texte, JSON, XML, Images, etc)
![Page 11: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/11.jpg)
• Un Producer produit des messages vers un Topic
• Un ou plusieurs Consumers s’abonnent à un topic pour lire les messages
Nouveaux messagesAnciens messages Temps
Producer
Consumer Consumer
Append-Only
K1V1
K2V2
nullV4
K1V5
nullV7
K5V8
K2V10
Clé
Valeur
K2V10
K1V3
K5V9
Write-ahead Log
![Page 12: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/12.jpg)
• Clé• Round-Robin• Implémentation Custom
Messages partitionnés par :
Topic : User_Activity
Partition 0
Partition 1
Partition 2
Producer Consumer
Broker 2
Broker 3
Broker 1
![Page 13: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/13.jpg)
Partition
Segment 1
Segment 2
Segment N
File Segments (défaut 1Go)
ActiveTemps
Une partition est :• Immuable• Stockée sur un disque• Divisée en segments
Configuration• log.segment.bytes• log.roll.hours
![Page 14: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/14.jpg)
Partition
Segment 1
Segment 2
Segment N
File Segments (défaut 1Go)
ActifTemps
• Temps – 7 jours• Taille maximum d’un log• Clé - Compaction
Les anciens messages sont automatiquement supprimés
![Page 15: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/15.jpg)
Permet la suppression des messages avec un payload à null.
K1 K2 K1 K1 K3 K2 K4 K5 K5 K2 K6
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
K1 K3 K4 K5 K2 K6
V4 V5 V7 V9 V10 V11Log après compaction
Clé
Valeur
Clé
Valeur
Log avant compaction
![Page 16: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/16.jpg)
Cas d’utilisation
K1 K2 K1 K1 K3 K2 K4 K5 K5 K2 K6
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11
K1 K3 K4 K5 K2 K6
V4 V5 V7 V9 V10 V11Log après compaction
Clé
Valeur
Clé
Valeur
Log avant compaction
• Distribuer les changements d’états d’une base de données• Event-sourcing• Cache distribué clé / valeur• State journaling (Hight Availability)
![Page 17: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/17.jpg)
Application(Producer)
Application(Consumer)
Topic avec compaction
Application(Consumer)
Application(Consumer)
Embedded Database
Embedded Database
Embedded Database
Application(Producer)
Application(Producer)
Application Servers Application Servers
![Page 18: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/18.jpg)
Réplication, Disponibilité et Consistance
![Page 19: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/19.jpg)
Topic : User_Activity
Broker 2
Broker 3
Broker 1
Partition Leader 0
Partition Follower 2
Partition Leader 1
Partition Follower 0
Partition Leader 2
Partition Follower 1
Producer Consumer
Kafka accepte (#réplicas - 1) broker down avant de perdre des données
![Page 20: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/20.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2, 3]
Producer
1
2
Acknowledgment(Optionnel)
3
![Page 21: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/21.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2]
Producer
1
2
Acknowledgment(Optionnel) Out-of-Sync
Down
replica.lag.time.max.ms (10secondes)
3
![Page 22: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/22.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2, 3]
Producer
Acknowledgment
request.required.acks
0 : Le Producer n’attend aucun acquittement
de la part du leader.
? ? ?
![Page 23: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/23.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2, 3]
Producer
Acknowledgment
request.required.acks
1 : Le leader garantit avoir écrit le message
? ?
![Page 24: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/24.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2]
Producer
Acknowledgment
request.required.acks
all : Le leader attend d’avoir reçu un acquittement
de la part de tous les in-sync réplicas.
1
2
3 Out-of-SyncDown
?
![Page 25: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/25.jpg)
min.insync.replicasNombre minimum de réplicas qui doivent acquitter un message lorsque request.required.acks = -1 (all)
Compromis entre
Disponibilité et Consistance
Configuration possible
replication_factor = 3; request.required.acks = all; min.insync.replicas=2
![Page 26: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/26.jpg)
Broker 1 Broker 2 Broker 3
P0R1
P0R2
P0R3
ISR (in-sync replicas) = [1, 2]
Producer
1
2
Consumer
3
Acknowledgment(Optionnel) committed Out-of-Sync
Down
replica.lag.time.max.ms (10secondes)
![Page 27: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/27.jpg)
Apache ZooKeeperMétadonnées sur les Leaders et réplicas
In-sync replicas: réplicas éligiblent à devenir leader
ControllerDétecte les erreurs au niveau broker
Sélectionne les leaders pour toutes les partitions
![Page 28: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/28.jpg)
Offsets, Consumer Groups et Auto-rebalancing
![Page 29: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/29.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3 4
5 6
5
Consumer 1
Consumer 2
2
3
1
• Un offset est un identifiant unique et incrémental par partition• Un message est identifié par le triplet : Topic / Partition / Offset
![Page 30: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/30.jpg)
• Les offsets des consumers sont stockés dans un topic système• Si aucune position, 2 stratégies possibles : Earliest ou Latest
0 1 2 3 4 42 44 45 4643
Current Position
Last Committed Offset High Watermark
Log End Offset
ProducerAppend-Only
![Page 31: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/31.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3
5 6
5
2
3
1
Consumer 1
Consumer 2
Consumer 3
Consumer 1
Consumer 2
Consumer Group Vert
Consumer Group Bleu• Une partition est assignée automatiquement à un unique consumer au sein d’un groupe• Plusieurs groupes peuvent souscrire à un même topic
4
![Page 32: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/32.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3
5 6
5
2
3
1
Consumer 1
Consumer 2
Consumer Group Vert
Consumer 3
• Les consumers se coordonnent automatiquement pour se distribuer les partitions.• Le nombre de partitions définit le niveau de parallélisme maximum pour consommer un topic• Il n’est pas possible de définir plus de consumers que de partitions
4
![Page 33: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/33.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3
5 6
5
2
3
1
Consumer 1
Consumer 2
Consumer Group Vert
Consumer 3
Crash ou arrêt d’un consumer4
![Page 34: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/34.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3
5 6
5
2
3
1
Consumer 1
Consumer 2
Consumer Group Vert
Consumer 3
La partition est automatiquement réassignée à l’un des consumers4
![Page 35: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/35.jpg)
Topic : User_Activity
Partition 0
Partition 1
Partition 2
0 1 3 4
Consumer 10 1 2 4
0 2 3
5 6
5
2
3
1
Consumer 1
Consumer 2
Consumer Group Vert
Consumer 3
Partition 3 0 2 3 4 51
• La nouvelle partition est assignée à un des consumers
4
![Page 36: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/36.jpg)
• Les messages sont stockés dans l’ordre dans lequel ils sont produits
• L’ordre de lecture des messages est garanti uniquement par partition
• En cas de panne, certains messages peuvent-être produits ou consommés plusieurs fois (At-Least Once)
0 2 3 4
Consumer v1
Last Committed Offset
Consomme et commit le message à l’Offset 1
1
![Page 37: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/37.jpg)
• Les messages sont stockés dans l’ordre dans lequel ils sont produits
• L’ordre de lecture des messages est garanti uniquement par partition
• En cas de panne, certains messages peuvent-être produits ou consommés plusieurs fois (At-Least Once)
0 1 3 4
Consumer v1
Last Committed Offset
Se déplace à l’offset 2
2
![Page 38: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/38.jpg)
• Les messages sont stockés dans l’ordre dans lequel ils sont produits
• L’ordre de lecture des messages est garanti uniquement par partition
• En cas de panne, certains messages peuvent-être produits ou consommés plusieurs fois (At-Least Once)
0 1 3 4
Consumer v1
Last Committed Offset
Crash
2
![Page 39: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/39.jpg)
• Les messages sont stockés dans l’ordre dans lequel ils sont produit
• L’ordre de lecture des messages est garanti uniquement par partition
• En cas de panne, certains messages peuvent-être produits ou consommés plusieurs fois (At-Least Once)
0 3 4
Consumer v2
Last Committed Offset
21
Re-consomme le message à l’Offset 2 (doublon)
![Page 40: Paris Kafka Meetup - Concepts & Architecture](https://reader033.vdocuments.net/reader033/viewer/2022051300/58ecf2091a28ab945e8b4695/html5/thumbnails/40.jpg)
KEEP
CALMAND
STREAM
YOUR DATA