Académique Documents
Professionnel Documents
Culture Documents
1
Concept 1 : Message Queue
3
Présentation générale
§ Kafka est un système de messagerie distribué open source
§ Propriétés
• Tolérant aux pannes,
• performant, hautement distribuable
• adapté aux traitements batchs comme streams,
§ Standard dans les pipelines de traitements de données
§ Reference
• Ref : https://kafka-python.readthedocs.io/en/master/
4
Historique
§ En 2009, les équipes d'ingénieurs de LinkedIn unifient les different pipeline
en un seul (Kafka)
§ En 2011, les sources du projet sont ouvertes, ce qui fait de la version 0.6 la
première version publique du projet.
§ L'incubateur Apache s'intéresse au projet et le fait entrer dans la fondation en
2012.
§ En 2014, une partie de l'équipe à l'origine de Kafka quitte LinkedIn pour créer
Confluent, une entreprise qui va travailler activement au développement de
Kafka et d'une plateforme autour : la « Confluent Platform ».
5
Définitions
§ Producer : tout système qui envoit des données dans un ou plusieurs topics Kafka.
• Publisher dans pub-sub.
§ Consumer : tout système qui lit des données dans un ou plusieurs topics Kafka.
• Subscriber dans pub-sub.
6
Logs
§ Comme une file d'attente, le log est un tableau de messages ordonnés par rapport à leur ordre de
reception
• log ne veut pas dire journal d’évènements
7
Topics
• Un topic permet de représenter une catégorie, un type de données
• Les producers envoient donc des messages dans des topics
• Les consumers cherchent des messages dans ces mêmes topics
8
Les connecteurs de Kafka
Consumer
Group 1
Producer
Consumer
Producer Topic 2
Consumer
Connector Connector Group 2
Consumer
Consumer
9
Partitions
10
Load balancing et tolérance aux pannes
§ Cas d’un cluster Kafka avec 2 brokers hébergés sur deux machines distinctes.
• Si topic a 2 partitions et 2 réplicas,
• Chaque broker est « maitre » d'une partition.
§ Le producer envoit un message au maitre de la partition.
• Le maitre va enregistrer le message dans son log en local.
• Le second broker réplique le contenu du maitre dans son propre log.
§ Cas de panne du maître
• le deuxième prendra le relais et deviendra alors le nouveau maitre.
11
Comparison avec RabbitMQ
§ Meilleures performance
• Comparé à d’autres plateformes
publish/subscribe : RabbitMQ ou encore
ActiveMQ.
• Ref: https://softwaremill.com/mqperf/)
12
Stockage les données sur le disque
§ Les données enregistrées de manière séquentielle, les unes à la suite des autres,
• Plus rapidement accessibles sur un support mécanique.
• Le fait d'aller chercher des morceaux et de les rassembler a un coût, et même s'il paraît
négligeable à petite echelle
• Ref: ( http://queue.acm.org/detail.cfm?id=1563874
13
Mécanisme zero copy
14
Apache zookeeper
§ Boîte à outils pour systèmes distribués.
15
Utilisation de Kafka dans les grandes entreprises
§ Architecture évènementielle chez Meetic (https://fr.slideshare.net/VincentLepot/archictecture-
evenementiellemeetic?qid=acd402b4-bf21-4162-927c-aaece11ff590&v=&b=&from_search=6)
16
Architetcure de référence Big Data
17
17
Exemple: Système IoT
18
Exercice
§ Dans un système e-health, il ya plusieurs acteurs
• Le patient, les infirmières, le médecin, la BD
§ Quels sont les topics à mettre dans Kafka ?
§ Quel est le rôle de chaque élément de l’architetcure de référence ?
19
Installation
§ Environnement Docker
• Vérifier les images dans docker-compose.yml
• docker-compose up -d --build
20
Structure d’un message Kafka
§ Key : (hashed)
§ Value Message content (in Bytes)
§ Timestamp in milliseconds
§ Metadata headers : key-value metadata
§ Offset : pointer to the last message comited by the consumer
§ …
§ Default data size 1 MB
21
Commandes Kafka
§ Connecting to Kafka shell
• docker exec -it kafka bash
§ ‘topic1’ creation
• ./bin/kafka-topics.sh --create --topic topic1 --bootstrap-server localhost:9092 --partitions 2
§ ‘topic 1’ description
• ./bin/kafka-topics.sh --describe --topic topic1 --bootstrap-server localhost:9092
§ Listing of all topics
• ./bin/kafka-topics.sh ---bootstrap-server localhost:9092 --list
§ Publish a message
• $ ./bin/kafka-console-producer.sh --topic quickstart-events --broker-list localhost:9092
• > ‘A Message example’
§ Consume a message
• $ ./bin/kafka-console-consumer.sh --topic quickstart-events --bootstrap-server localhost:9092
• > ‘A Message example’
22
Producer en Python
Prérequis : installer la librairie
! pip install kafka-python
import json
from kafka import KafkaProducer
from Time import sleep
Exercice:
Créer ’topic2’ et tester les producers et les consumers pour les 2 différents topics.
24
Producer en Python : String message
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers= 'localhost:9092', value_serializer=str.encode,
key_serializer=str.encode)
event_stream_key = 'product_list'
event_stream_value = 'product1 product2 product3 product1'
producer.send('topic1', key = event_stream_key, value = event_stream_value)
producer.flush()
25
Producer lisant des données à partir URL
import requests
from kafka import KafkaProducer
TOPIC_NAME = 'topic1'
producer = KafkaProducer(bootstrap_servers='localhost:9092', value_serializer=str.encode)
# Suppose you have a dataset called dataset.txt
response=requests.get(‘http:// …//dataset.txt',verify=False)
response.raise_for_status()
lines = response.text.split('\n')
for line in lines:
print(line)
producer.send(TOPIC_NAME, line)
producer.flush()
26