Apache kafka big data track

40
Charly CLAIRMONT CTO ALTIC http://altic.org [email protected] @egwada Apache Kafka Un système distribué de messagerie hautement performant

description

Apache KAFKA

Transcript of Apache kafka big data track

Page 1: Apache kafka   big data track

Charly CLAIRMONTCTOALTIChttp://altic.org

[email protected]@egwada

Apache Kafka

Un système distribué de messagerie hautement performant

Page 2: Apache kafka   big data track

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)

Page 3: Apache kafka   big data track

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

Page 4: Apache kafka   big data track

Apache KafkaUn système distribué de messagerie

hautement performant tolérant aux panes

Page 5: Apache kafka   big data track

Agenda

IntroductionApache Kafka, qu'est ce que c'est ?

Concepts élémentairesTopics, partitions, replicas, offsets

Producteurs, brokers, consommateurs

Écosystème

Page 6: Apache kafka   big data track

Agenda

Introduction

Apache Kafka, qu'est ce que c'est ?

Page 7: Apache kafka   big data track

IntroductionApache 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

Page 8: Apache kafka   big data track

IntroductionComparaison avec d'autres

brokers

8

Kafka

Messagerie file d'attenteDébit faible, faible latence

JMS

ActiveMQ

Qpid

RabbitMQ

Agrégateur de logsDébit très fort, forte latence

Kestrel

Scribe

Flume Hedwig

Batch jobs

Traditionnels: JMS, xxxMQ/AMQPNouvelle génération: Kestrel, Scribe, Flume, Kafka

Page 9: Apache kafka   big data track

IntroductionPerformance 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.

Page 10: Apache kafka   big data track

IntroductionAdoption 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, …

Page 11: Apache kafka   big data track

IntroductionPourquoi Apache Kafka ?

On va imaginer que vous collectez vos logs!

Page 12: Apache kafka   big data track

IntroductionPourquoi Apache Kafka ?

Jusqu'ici tout va bien !

Page 13: Apache kafka   big data track

IntroductionPourquoi Apache Kafka ?

Là ça va encore !

Page 14: Apache kafka   big data track

IntroductionPourquoi Apache Kafka ?

Mais là ? Diriez-vous la même chose ?

Page 15: Apache kafka   big data track

IntroductionPourquoi Apache Kafka ?

Je n'en suis pas si sûr !

Page 16: Apache kafka   big data track

IntroductionPourquoi 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)

Page 17: Apache kafka   big data track

IntroductionPourquoi 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

Page 18: Apache kafka   big data track

Agenda

Introduction

c'est quoi Apache Kafka

Concepts élémentairesTopics, partitions, offsets, réplicas

producteur, brokers ,consommateurs,

Ecosystème

Page 19: Apache kafka   big data track

Concepts élémentairesVue 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.

Page 20: Apache kafka   big data track

Concepts élémentairesVue Globale

« broker » = serveur

topic = « zerg.hydra »

Partitions : distribuées et répliquées sur les brokers (donc les serveurs)

Page 21: Apache kafka   big data track

Broker(s)

Concepts élémentairesTopics

Nouv.

Producteur A1

Producteur A2

Producteur An…

Les producteurs ajoutent toujours à la fin du de la file(penser à l'ajout dans un fichier)

Kafka élague depuis la “tête” en se basant sur l'âge ou la taille maximale or la « clé »

anciens messages Nouveaux messages

Kafka topic

Topic:  correspond au nom du flux sur lequel les messages vont être publiés

• Par exemple : “zerg.hydra”

Page 22: Apache kafka   big data track

Broker(s)

Concepts élémentairesTopics

Nouv.

Producteur A1

Producteur A2

Producteur An…

anciens messages Nouveaux messages

Kafka topic

Consommateur groupe C1Les 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

Page 23: Apache kafka   big data track

Concepts élémentairesMessage

tailleVersio

n

Checksum

Payload

Message

Protocole légerTraitement des messages par lot (Producteur & Consommateur)Compression de bout en bout

Page 24: Apache kafka   big data track

Concepts élémentairesPartitions

Les partitions

– Ordonnées

– Séquence immuable

– Le nombre de partitions détermine le nombre maximum de (groupes de) consommateurs

Page 25: Apache kafka   big data track

Concepts élémentairespartition 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

Page 26: Apache kafka   big data track

Concepts élémentairesré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

topic1-part1topic1-part1

logs

broker 1

topic1-part2topic1-part2

logs

broker 2

topic2-part2topic2-part2

topic2-part1topic2-part1

logs

broker 3

topic1-part1topic1-part1

logs

broker 4

topic1-part2topic1-part2

topic2-part2topic2-part2 topic1-part1topic1-part1 topic1-part2topic1-part2

topic2-part1topic2-part1

topic2-part2topic2-part2

topic2-part1topic2-part1

Page 27: Apache kafka   big data track

Concepts élémentairesréplicas

Flux de réplication

broker 1

Producteur

leader

broker 2

follower

broker 3

follower

4

2

2

3

commit

Accusé de réception

topic1-part1topic1-part1 topic1-part1topic1-part1 topic1-part1topic1-part1Consommateur

1

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

Page 28: Apache kafka   big data track

Concepts élémentairesréplicas

Flux de réplication

broker 1 broker 2

topic3-part1topic3-part1

follower

broker 3

topic3-part1topic3-part1

follower

topic1-part1topic1-part1

Producteur

leader

topic1-part1topic1-part1

follower

topic1-part1topic1-part1

follower

broker 4

topic3-part1topic3-part1

leader

Producteurtopic2-part1topic2-part1

Producteur

leader

topic2-part1topic2-part1

follower

topic2-part1topic2-part1

follower

http://kafka.apache.org/documentation.html#replication

Page 29: Apache kafka   big data track

Concepts élémentairesProducteurs

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+Producer+Example

Page 30: Apache kafka   big data track

Concepts élémentairesProducteurs

API

– ProducerType (sync/async)

– CompressionCodec (none/snappy/gzip)

– BatchSize

– EnqueueSize/Time

– Encoder/Serializer

– Partitioner

– #Retries

– MaxMessageSize

– …

Page 31: Apache kafka   big data track

Concepts élémentairesConsommateurs

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)

Page 32: Apache kafka   big data track

Concepts élémentairesConsommateurs

API

Page 33: Apache kafka   big data track

Agenda

IntroductionApache Kafka, qu'est-ce que c'est ?

Concepts élémentairesTopics, partitions, replicas, offsets

Producteurs, brokers, consommateurs

Écosystème

Page 34: Apache kafka   big data track

ÉcosystèmeIntégration

Consommateur

• 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

Producteurs

• 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

Page 35: Apache kafka   big data track

ÉcosystèmeIntégration

Intégratons connues

Stream ProcessingStorm - A stream-processing framework.Samza - A YARN-based stream processing frameworkSpark

Hadoop IntegratonCamus - 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.

AWS IntegratonAutomated AWS deploymentKafka->S3 Mirroring

Loggingklogd - A python syslog publisherklogd2 - A java syslog publisherTail2Kafka - A simple log tailing utility Fluentd plugin - Integration with   FluentdFlume Kafka Plugin - Integration with   FlumeRemote log viewerLogStash integration - Integration with LogStash and FluentdOfficial logstash integration

MetricsMozilla Metrics Service - A Kafka and Protocol Bufers  based metrics and logging systemGanglia Integration

Packing and DeploymentRPM packagingDebianpackaginghtps://github.com/tomdz/kafka-deb-packagi 

ngPuppet integrationDropwizard packaging

Misc.Kafka Mirror - An alternative to the built-in mirroring toolRuby Demo App Apache Camel IntegrationInfobright integration

Page 36: Apache kafka   big data track

ÉcosystèmeIntégration

ProducerProducer

ProducerProducer

ProducerProducer

Kafka topic1Kafka topic1

Kafka topic2Kafka topic2

Process1Process1

Process1Process1

Process1Process1

Process2Process2

Process2Process2

Process2Process2

System1System1 System2System2

Kafka + X pour le traitement des données

– Storm, Spark, Samza

– Akka Actors, Java multi-thread

– Camus : de Kafka à Hadoop

Page 37: Apache kafka   big data track

ÉcosystèmeArchitecture 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

Page 38: Apache kafka   big data track

Apache Kafka 0.8 basic traininghttp://www.slideshare.net/miguno/apache­kafka­08­basic­training­verisign

A défaut d'un bon livre, une très bonne ressource pour débuter

Page 39: Apache kafka   big data track

Questons

Page 40: Apache kafka   big data track

Charly CLAIRMONTCTOALTIChttp://altic.org

[email protected]@egwada@ALtic_Buzz

Merci !