Telechargé par tigoudrne

apachekafka-altic-owf2014-141031124043-conversion-gate01

publicité
Apache Kafka
Un système distribué
de messagerie
hautement performant
Charly CLAIRMONT
CTO
ALTIC
http://altic.org
[email protected]
@egwada
Petite bio
Co-fondateur Altic
10 ans maintenant
Un des mes premiers jobs : « mettre de
l'open source à tous les étages » dans
l'entreprise !
Mes technos
(orientées décisionnelles mais pas que)
Altic
@Altic_Buzz
Métier
Informatique Décisionnelle
Intégration de données
Valeurs
–
Innovations
–
Open Source
Une maîtrise de toute la chaîne de valeur du Big Data
Apache Kafka
Un système distribué de messagerie
hautement performant
tolérant aux panes
Agenda
Introduction
Apache Kafka, qu'est ce que c'est ?
Concepts élémentaires
Topics, partitions, replicas, offsets
Producteurs, brokers, consommateurs
Écosystème
Agenda
Introduction
Apache Kafka, qu'est ce que c'est ?
Introduction
Apache Kafka, qu'est-ce que c'est ?
●
Distribué, très haut débit, système de messagerie
publication / abonnement (pub-sub)
–
●
Rapide, Robuste, Scalable, Durable
Principaux cas d'utilisation
–
Agrégation de logs, traitement temps réel, monitoring,
files d'attente
●
Développé à l'origine chez LinkedIn
●
Écrit en Scala (un peu de Java)
●
TLP Apache depuis 2012
●
9 core commiteurs, en eviron 20 contributeurs
●
http://kafka.apache.org
Introduction
Comparaison avec d'autres
brokers
Traditionnels: JMS, xxxMQ/AMQP
Nouvelle génération: Kestrel, Scribe, Flume, Kafka
Messagerie file d'attente
Débit faible, faible latence
RabbitMQ
JMS
ActiveMQ
Qpid
8
Agrégateur de logs
Débit très fort, forte latence
Flume
Kafka
Hedwig
Scribe
Batch jobs
Kestrel
Introduction
Performance chez LinkedIn
●
Statistiques sur l'un des importants clusters
Apache Kafka (aux heures de pointe):
–
15 brokers
–
15 500 partitions (réplication facteur 2)
–
En entrée
–
400 000 msg / sec.
● 70 Mo / sec.
En sortie
●
●
400 Mo / sec.
Introduction
Adoption de Kafka & Cas
d'utilisation
●
LinkedIn
–
flux d'activité, suivi indicateurs opérationnels, bus de données
–
400 nodes, 18k topics, 220 milliards msg/day (pic 3.2 millions
msg/s), Mai 2014
●
OVH : Anti-DDOS
●
Netflix : Suivi temps réel, traitement temps réel
●
Twitter : Composant de leur architecture temps réel, couplée à Storm
●
Spotify : Traitement de log (de 4h à 10s), Hadoop
●
Loggly : Collecte et traitement de log
●
Mozilla : Gestion de métrique
●
Airbnb, Cisco, Gnip, InfoChimps, Ooyala, Square, Uber, …
Introduction
Pourquoi Apache Kafka ?
On va imaginer que vous collectez vos logs!
Introduction
Pourquoi Apache Kafka ?
Jusqu'ici tout va bien !
Introduction
Pourquoi Apache Kafka ?
Là ça va encore !
Introduction
Pourquoi Apache Kafka ?
Mais là ? Diriez-vous la même chose ?
Introduction
Pourquoi Apache Kafka ?
Je n'en suis pas si sûr !
Introduction
Pourquoi Apache Kafka ?
Un bel exemple celui de Spotify.
https://www.jfokus.se/jfokus14/preso/Reliable­real­time­processing­with­Kafka­and­Storm.pdf (Feb 2014)
Introduction
Pourquoi Apache Kafka est-il si rapide ?
●
Écritures rapides:
–
●
Bien que Kafka persiste toutes les données sur le disque,
toutes les écritures vont essentiellement « page cache » de
l'OS, soit la RAM.
Lectures rapides:
–
Très efficace pour transférer des données à partir du
« page cache » vers une socket réseau
–
Linux: sendfile() appel système
●
« Zéro-copy »
●
Combinaison des deux = rapide Kafka!
●
Compression de bout en bout
Agenda
Introduction
c'est quoi Apache Kafka
Concepts élémentaires
Topics, partitions, offsets, réplicas
producteur, brokers ,consommateurs,
Ecosystème
Concepts élémentaires
Vue Globale
●
●
Les producteurs publient des données
vers les brockers.
Les consommateurs s'abonnent et
récupèrent les données depuis les
brockers.
●
Tous les services sont distribués
●
Les données
–
Les données sont stockées dans des
topics.
–
Les topics sont divisés en partitions,
et sont répliqués.
Concepts élémentaires
Vue Globale
« broker » = serveur
Partitions :
distribuées
et
répliquées
sur les
brokers
(donc les
serveurs)
topic = « zerg.hydra »
Concepts élémentaires
Topics
Topic: correspond au nom du flux sur lequel les messages vont
être publiés
•
Par exemple : “zerg.hydra”
Kafka élague depuis la “tête” en se basant sur
l'âge ou la taille maximale or la « clé »
Producteur A1
Kafka topic
…
anciens messages
Nouv.
Producteur A2
…
Producteur An
Nouveaux messages
Les producteurs ajoutent toujours à la fin du de la file
(penser à l'ajout dans un fichier)
Broker(s)
Concepts élémentaires
Topics
Consommateur groupe C1
Les consommateurs emploient un « pointeur de lecture »
( “offset pointer”) pour tracer et contrôler là où il en est
(et décide du rythme de consommation)
Consommateur groupe C2
Producteur A1
Kafka topic
…
anciens messages
Nouv.
Nouveaux messages
Broker(s)
Producteur A2
…
Producteur An
Concepts élémentaires
Message
Protocole léger
Traitement des messages par lot (Producteur & Consommateur)
Compression de bout en bout
Message
lle rsion ksum ad
i
a
t
Ve
ec Paylo
h
C
Concepts élémentaires
Partitions
Les partitions
–
Ordonnées
–
Séquence immuable
–
Le nombre de
partitions
détermine le
nombre maximum de
(groupes de)
consommateurs
Concepts élémentaires
partition offsets
●
A chaque message est
attribué un « id »
unique et trié
appelé « offset ».
Les consommateurs
déplacent leur
pointeur via la
combinaison (offset,
partition, topic)
Consommateur groupe 1
Concepts élémentaires
réplicas
●
Uniformément distribués
●
« sauvegarde » des partitions
●
●
Existent uniquement pour éviter les pertes de
données
Si numReplicas == 3 alors 2 brokers peuvent tomber
logs
logs
logs
logs
topic1-part1
topic1-part2
topic2-part1
topic2-part2
topic2-part2
topic1-part1
topic1-part2
topic2-part1
topic2-part1
topic2-part2
topic1-part1
topic1-part2
broker 1
broker 2
broker 3
broker 4
Concepts élémentaires
réplicas
Flux de réplication
Producteur
2
1
Accusé de réception
2
leader
follower
follower
3
4
Consommateur
commit
topic1-part1
topic1-part1
topic1-part1
broker 1
broker 2
broker 3
Type de « Récepton Accusé » par
le Producteur ?
Latence
Durabilité en cas de faille
Pas d'accusé de récepton
Pas de retard réseau
qlq données perdues
Attente de l'électon du leader
1 aller-retour du réseau
Peu de données perdues
Attente de validaton (commit)
2 allers-retours du réseau
Pas de perte de données
Seules les donnés validées sont présentées au consommateur
Concepts élémentaires
réplicas
Flux de réplication
Producteur
leader
follower
topic1-part1
Producteur
topic1-part1
leader
topic1-part1
follower
topic2-part1
follower
broker 1
follower
follower
topic2-part1
follower
Producteur
topic2-part1
leader
topic3-part1
topic3-part1
topic3-part1
broker 2
broker 3
broker 4
http://kafka.apache.org/documentation.html#replication
Concepts élémentaires
Producteurs
Publier des messages dans Kafka
–
C'est assez simple
–
Vous pouvez aussi directement agréger vos traces
Log4J
–
Liste complète des exemples
https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+Produce
r+Example
Concepts élémentaires
Producteurs
API
–
ProducerType (sync/async)
–
CompressionCodec (none/snappy/gzip)
–
BatchSize
–
EnqueueSize/Time
–
Encoder/Serializer
–
Partitioner
–
#Retries
–
MaxMessageSize
–
…
Concepts élémentaires
Consommateurs
Possibilité d'utiliser un consommateur pour publier dans Kafka
Les consommateurs sont responsables de vérifier où ils en sont
dans leur lecture
Il y a une API simple, et une autre bien plus performante
–
High-level (consumer group, auto-commit)
–
Low-level (simple consumer, manual commit)
Concepts élémentaires
Consommateurs
API
Agenda
Introduction
Apache Kafka, qu'est-ce que c'est ?
Concepts élémentaires
Topics, partitions, replicas, offsets
Producteurs, brokers, consommateurs
Écosystème
Écosystème
Intégration
Producteurs
Consommateur
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Java (in standard dist)
Scala (in standard dist)
Log4j (in standard dist)
Logback: logback-kafka
Udp-kafka-bridge
Python: kafka-python
Python: pykafka
Python: samsa
Python: pykafkap
Python: brod
Go: Sarama
Go: kafka.go
C: librdkafka
C/C++: libkafka
Clojure: clj-kafka
Clojure: kafka-clj
Ruby: Poseidon
Ruby: kafka-rb
Ruby: em-kafka
PHP: kafka-php(1)
PHP: kafka-php(2)
PHP: log4php
Node.js: Prozess
Node.js: node-kafka
Node.js: franz-kafka
Erlang: erlkafka
Java (in standard dist)
Scala (in standard dist)
Python: kafka-python
Python: samsa
Python: brod
Go: Sarama
Go: nuance
Go: kafka.go
C/C++: libkafka
Clojure: clj-kafka
Clojure: kafka-clj
Ruby: Poseidon
Ruby: kafka-rb
Ruby: Kafkaesque
Jruby::Kafka
PHP: kafka-php(1)
PHP: kafka-php(2)
Node.js: Prozess
Node.js: node-kafka
Node.js: franz-kafka
Erlang: erlkafka
Erlang: kafka-erlang
Écosystème
Intégration
Intégratons connues
Stream Processing
Storm - A stream-processing framework.
Samza - A YARN-based stream processing framework
Spark
Metrics
Mozilla Metrics Service - A Kafka and Protocol Bufers
based metrics and logging system
Ganglia Integration
Hadoop Integraton
Camus - LinkedIn's Kafka=>HDFS pipeline. This one is
used for all data at LinkedIn, and works great.
Kafka Hadoop Loader A diferent take on Hadoop
loading functionality from what is included in the main
distribution.
Packing and Deployment
RPM packaging
Debian
packaginghtps://github.com/tomdz/kafka-deb-packagi
ng
Puppet integration
Dropwizard packaging
AWS Integraton
Automated AWS deployment
Kafka->S3 Mirroring
Logging
klogd - A python syslog publisher
klogd2 - A java syslog publisher
Tail2Kafka - A simple log tailing utility
Fluentd plugin - Integration with Fluentd
Flume Kafka Plugin - Integration with Flume
Remote log viewer
LogStash integration - Integration with LogStash and
Fluentd
Official logstash integration
Misc.
Kafka Mirror - An alternative to the built-in mirroring
tool
Ruby Demo App
Apache Camel Integration
Infobright integration
Écosystème
Intégration
Kafka + X pour le traitement des données
–
Storm, Spark, Samza
–
Akka Actors, Java multi-thread
–
Camus : de Kafka à Hadoop
Producer
Producer
Producer
Process1
Kafka
topic1
Process1
Process2
Kafka
topic2
Process1
Process2
Process2
System1
System2
Écosystème
Architecture Matérielle
●
●
●
●
Machines uniquement dédiées à Kafka, rien d'autre
–
1 instance d'un broker Kafka par machine
–
2 x 4-core Intel Xeon (ou plus)
–
64 GB RAM (up from 24 GB)
Seuls 4 GB sont utilisés par le broker Kafka, les 60 GB
restants pour page cache
Disques
–
RAID10 avec 14 spindles
–
Plus il y a de spindles, plus le débit du disque est
important
–
8x SATA drives (7200rpm) JBOD
Réseau
–
1 GigE de préférence
A défaut d'un bon livre, une très bonne
ressource pour débuter
Apache Kafka 0.8 basic training
http://www.slideshare.net/miguno/apache­kafka­08­basic­training­verisign
Questons
Merci !
Charly CLAIRMONT
CTO
ALTIC
http://altic.org
[email protected]
@egwada
@ALtic_Buzz
Téléchargement