Академический Документы
Профессиональный Документы
Культура Документы
Hamed.K – 20171104
Dernier Maj: 20180118
Intro
Kafka: c’est quoi?
https://kafka.apache.org/intro
Kafka: c’est quoi?
● Distributed streaming platform
● Aims to provide a unified, high-throughput, low-
latency platform for handling real-time data feeds.
● Massively scalable pub/sub message queue
architected as a distributed transaction log
Kafka: c’est quoi?
● Distributed streaming platform
● Aims to provide a unified, high-throughput, low-
latency platform for handling real-time data feeds.
● Massively scalable pub/sub message queue
architected as a distributed transaction log
Kafka: c’est quoi?
Kafka: c’est quoi?
Carte d’identité
● Initialement développé par linkedIn
● Devenu open source début 2011 (agé de 6+ ans)
● A intégré Apache le 23 octobre 2012
● Écrit en scala et java, Licence Apache 2.0
● Plusieurs références: LinkedIn, Amadeus, Netflix, eBay, Uber,
Paypal, Cisco systems...etc
● Le nom semble provenir de l’écrivain Franz Kafka, étant une
plateforme optimisée en écrire
source: https://en.wikipedia.org/wiki/Apache_Kafka
kafka dans notre contexte
● On pense l’utiliser pour les communications asynchrones entre nos
microservices: tracer l’utilisation des CRs, synchroniser les données non
normalisées, etc.
● kafka pourrait être une brique d’architecture indispensable, une fois on migre
vers une architecture CQRS.
Pourquoi Kafka
● s’adapte bien avec notre contexte (tourne sur JVM, supporté
par spring-cloud-stream, s’intègre bien avec spring boot...etc)
Pourquoi Kafka
● s’adapte bien avec notre contexte (tourne sur JVM, supporté
par spring-cloud-stream, s’intègre bien avec spring boot...etc)
source: https://www.openhub.net
Kafka vs la concurrence
source: https://www.openhub.net
Kafka vs la concurrence
source: https://www.openhub.net
Kafka vs la concurrence
source: https://stackshare.io/stackups/
Kafka vs la concurrence
source: https://trends.google.com/trends
Architecture et Terminologie
terminologie
● producer
● consumer
● message
● broker
● cluster
● topic
● partitions
● leader, follower et replicas
● offsets
● consumer-groups, coordinator, leader
producer
émetteur
communication classique,
request/response pattern,
via restTemplate, feign
client...etc
consumer
récepteur
producer
émetteur
communication classique,
request/response pattern,
via restTemplate, feign
client...etc Avantages
+ communication synchrone, temps réel
émetteur(s): émet des messages à + feedback rapide (response)
destination d’un ou plusieurs
récepteur (par exemple un Inconvénients
microservice, une application - lorsque la communication prend plus de temps que
externe...etc) prévue -> timeout -> le statut d’exécution reste floue
- le rythme du “consumer” est géré par le “producer”
récepteur(s): reçoit et traite les - Couplage fort: les threads du producers restent bloqués
messages qui sont produit en attente des réponses -> risque de panne
consumer
récepteur
Broker: c’est le serveur kafka. il joue producer
producer
le rôle de médiateur entre les
producers et les consumers en leur
permettant de communiquer
efficacement avec un minimum de
couplage entre eux
Le consommateur 1 veut
consommer les messages
Broker1 Broker2 Broker3
produit par le producteur 1 mais
pas ceux du producteur 2 et 3.
consumer1 consumer2
producer1 producer2 producer3
poussons encore plus le use- ⇒ besoin d’identifier les flux -> On parle de topic
case, le consommateur ne veux
consommer que les messages
zookeeper
traitant le changement de
l’employé.
consumer1 consumer2
producer1 producer2 producer3
consumer1 consumer2
producer1 producer2 producer3
topic: un topic est un nom
taille de T1
unique de flux kafka, vers lequel dépasse les
limites du
les message sont publiés. broker 1
Exemple:cr-country-affectation T1 T1 T1
T2
}
T1/P1 T1/P1
Partition 1
Topic 1
Partition 2 T1/P2 T1/P2
Chaque partition est une
séquence ordonnée et immuable
d'enregistrements. T2
consumer1 consumer2
producer1 producer2 producer3
}
T1/P1 T1/P1
Partition 1
vue que la nature des flux
destinés aux topics 1 et 2 sont Topic 1
Partition 2 T1/P2 T1/P2
différents, nous voulons partager
le premier sur 2 brokers et le
T2 T2 T2
deuxième sur 3 brokers.
consumer1 consumer2
producer1 producer2 producer3
}
T1/P1 T1/P1
Partition 1
replication-factor: le
Topic 1
replication-factor permet de Partition 2 T1/P2 T1/P2
spécifier le nombre de copie de
partition à effectuer pour chaque T2 T2 T2
topic.
consumer1 consumer2
producer1 producer2 producer3
}
T1/P1 T1/P1
Partition 1
bien synchrones?
Topic 1
Partition 2 T1/P2 T1/P2
⇒ besoin de synchroniser les
partitions, risque de perte de
T2 T2 T2
donnée lors de crash d’un
broker.
zookeeper
consumer1 consumer2
producer1 producer2 producer3
question: comment s’assurer
leader of follower
que les flux (les topics Partition 1
partitionnés et clusterisés) sont
bien synchrones?
}
T1/P1 T1/P1
Partition 1
Topic 1
⇒ besoin de synchroniser les Partition 2 T1/P2 T1/P2
partitions
T2 T2 T2
pour répondre à ce besoin,
kafka désigne un replicas
comme leader et le reste des
réplicas sont appelés ‘follwers’.
zookeeper
Toutes les demandes d'écriture
passent par le leader et le leader
propage les écritures au suiveur.
consumer1 consumer2
producer1 producer2 producer3
Lorsqu’un consommateur
récupère des messages à partir Partition 1 T1/P1 T1/P1
}
consommé (donc à ignorer) et T2
les nouveaux messages (donc à
M1 M2 M3 M4 M5 M6
consommer)?
}
messages déjà lus
zookeeper
consumer1 consumer2
producer1 producer2 producer3
Lorsqu’un consommateur
récupère des messages à partir
d’une partition, comment peut-il Partition 1 T1/P1 T1/P1
}
les nouveaux messages (donc à T2
consommer)?
M1 M2 M3 M4 M5 M6
⇒ besoin d’un indicateur de
}
position de lecture, on parle
messages déjà lus position de
alors d’offset. zookeeper lecture?
consumer1 consumer2
offset: un offset est un numéro producer1 producer2 producer3
d'identification séquentiel qui identifie
de façon unique chaque
enregistrement dans la partition.
}
T2
Les messages dans chaque log de
partition sont ensuite lus M1 M2 M3 M4 M5 M6
séquentiellement. 0 1 2 3 4 5
zookeeper
consumer
producer1 producer2 producer3
supposons que nous avons
plusieurs producteurs et un
seule consommateur. La charge
produite devient alors largement Partition 1 Topic
1
supérieure à la vitesse de
consommation. Partition 2 T1/P2 T1/P2
zookeeper
Partition 1 Topic
1
même temps.
consumer
consumer
Pour éviter ce risque, une partition
n’est jamais partagée par des
membres du même groupe en Consumer group 1
même temps.
consumer
consumer
consumer
Pour éviter ce risque, une partition
n’est jamais partagée par des Consumer group 1
membres du même groupe en
consumer
même temps.
consumer
consumer
consumer
Pour éviter ce risque, une partition
n’est jamais partagée par des
membres du même groupe en Consumer group 1
même temps.
consumer
autre consommateur.
Si nous ajoutons un nouveau
groupe de consommateurs Group2
Consumer group 1
avec un seul consommateur, ce
consommateur recevra tous les consumer
messages du topic
consumer
indépendamment de ce que fait
Group1. consumer
consumer
Group2 dans son ensemble
recevra toujours tous les consumer
messages indépendamment des
autres groupes de
consommateurs.
Pour éviter ce risque, une partition
n’est jamais partagée par des
membres du même groupe en
Consumer group 1
même temps.
consumer
si les membres du groupe
dépassent le nombre des consumer
on parle de rééquilibrage
consumer
(Rebalance) à chaque fois que la
liste des consommateurs change.
kafka prévoit un coordinateur de
group qui :
consumer
- initie l’activité de
rééquilibrage et consumer
communique les affectations
aux consommateur. consumer
consumer
on parle de rééquilibrage
(Rebalance) à chaque fois que la
liste des consommateurs change.
● consumer
● message
● broker
Broker
consumer
consumer
● producer
producer1 producer2 producer3
● consumer
● message
● broker
● cluster
Broker1 Broker2 Broker3
zookeeper
consumer1 consumer2
● consumer producer1 producer2 producer3
● message
● broker
}
Partition 1 T1/P1 T1/P1
● cluster Topic 1
Partition 2 T1/P2 T1/P2
● topic
T2 T2 T2
● partitions
zookeeper
consumer1 consumer2
● consumer producer1 producer2 producer3
● message
● broker
}
Partition 1 T1/P1 T1/P1
● cluster Topic 1
Partition 2 T1/P2 T1/P2
● topic
T2 T2 T2
● partitions
zookeeper
consumer1 consumer2
● consumer
producer1 producer2 producer3
● message
● broker
}
Partition 1 T1/P1
cluster T1/P1
Topic 1
● topic Partition 2 T1/P2 T1/P2
● partitions M1 M2 M3 M4 M5 M6
0 1 2 3 4 5
● leader, follower et replicas
● offsets
zookeeper
consumer1 consumer2
● consumer
● broker
● cluster
}
Partition 1 T1/P1 T1/P1
Topic 1
● topic
Partition 2 T1/P2 T1/P2
● partitions
● offsets
● consumer-groups, zookeeper
coordinator, leader
consumer consumer 2
consumer
Mettre la main
à la pâte
Fully
Distributed
Apache
Kafka
Cluster
producer1 producer2 producer3
zookeeper
consumer1 consumer2
Objectif de la manip:
:9092
zookeeper :2181
● bin/zookeeper-server-start.sh config/zookeeper.properties
● bin/kafka-server-start.sh config/server.properties
P0 session2
Broker0
:9092
zookeeper :2181
P0 session2
Broker0
:9092
zookeeper :2181
P0 session2
Broker0
:9092
zookeeper :2181
consumer1
zookeeper :2181
● cp config/server.properties config/server-1.properties
● cp config/server.properties config/server-2.properties
zookeeper :2181
step 6:
P0 session2
zookeeper :2181
consumer1
step 7: