Kafka Connect & Kafka Streams - Paris Kafka User Group

download Kafka Connect & Kafka Streams - Paris Kafka User Group

of 28

Embed Size (px)

Transcript of Kafka Connect & Kafka Streams - Paris Kafka User Group

  • Paris Apache Kafka Meetup

    Herv RIVIEREZenika

    @_rv_

    hriviere

  • Source : confluent.io

  • Ingestion alimentation !

  • Script / application java home made avec des producers et/ou consumers

    Avantage : flexibilit

    Inconvnients : Pas toujours trivial, loadbalancing ?, fail over ?, standard de dveloppement ?

    Source : xkcd

  • Utiliser un connecteur spcifique dj existant (connecteur Elastic, Camus.) ou un ETL (Talend)

    Avantage : plug & play !

    Inconvnients : Pas de standard, chaque connecteur doit tre install / configur / monitor spcifiquement

    Source : xkcd

  • Utiliser Spark (streaming), Storm, Samza

    Avantages : Fail over, load balancing

    Inconvnients : Un nouveau cluster installer, connaissance du framework, luxueux pour de lingestion de donnes ?

    Source : made-in-bed-productions.tumblr.com

  • Utiliser Kafka Connect !

    Avantages : Dj inclus dans Kafka

    Connecteurs dj implments ou possibilit dcrire les siens

    Mutualisation configuration / runtimedes connecteurs

    Introduit des standard de dveloppements / utilisation

    Profite de lensembles des fonctionnalits de Kafka (fail-over / loadbalancing)

  • Depuis Kafka 0.9+ (dj inclus dans la distribution)

    Comprend :

    Des API (interfaces Java)

    Moteurs dexcution (standalone ou cluster)

    Service REST de monitoring

  • 2x2 interfaces Java : SourceConnector, SourceTask / SinkConnector, SinkTask

    Crer un connecteur : implmenter le couple interface Source et / ou Sink

    Load balancing, failover, offset dj partiellement implments (on indique le comportement)

    Pas envie de coder ? : utiliser une implmentation officielle http://www.confluent.io/developers/connectors

    http://www.confluent.io/developers/connectors

  • Standalone : une instance du connecteur (java cp )

    Usage : test, lecture / et ou criture dun fichier sur un nud spcifique

    Cluster : N instances du connecteur sur N nuds

    Usage : Fail-over / load balancing

    Exemple : Ecriture dun topic vers HDFS en HA

    Prrequis : Dmarrer des workers Kafka Connect pour constituer le cluster

  • En mode cluster :

    Pas de maitre-esclave

    Dploiement des connecteurs sur les workers via service REST Indication nom de la classe

    Nombre dinstance voulue

    Configuration

    Utilisation en arrire-plan des consumer groups (cf. prsentation prcdente )

  • DEMO !

    https://github.com/hriviere/demo-kafka-connect-streams

    https://github.com/hriviere/demo-kafka-connect-streams

  • Transformer !

  • Kafka Streams Spark streaming, Flink , Storm ...

    Outils ncessaires Kafla uniquement Kafka + cluster Spark ou Flink ou Storm ou .

    Connaissances requise Kafka + API Kafka Streams Kafka + API framework + comportement framework (config., HA.)

    Gestionnaire de ressource NON OUI

    Dploiement Une ou plusieurs application java (java -jar.)Uniquement Java est requis

    Via le cluster du framework

    Usage de Kafka Source / cible / donnes intermdiaires / metadata

    Topics classiques , topics compacts et topic avec une unique partition

    Source et cible uniquement Gnralement des topics classiques

    partitionns

    Et Samza ? : Kafka Streams Samza sans gestionnaire de ressource (mme philosophie)

  • Mme projet que Kafka

    A partir de Kafka 0.10 (release prvue pour dans quelques semaines). Directement dans distribution Kafka

    Tech preview disponible sur http://www.confluent.io/developer#streamspreview

    Kafka 0.10 actuellement en release candidate

    A utiliser vos risques et prils

    http://www.confluent.io/developer#streamspreview

  • Cl Valeur

    Lundi 1

    Jeudi 4

    Lundi 2

    Vendredi 3

    Lundi 2

    Kstreams : Transformation map ou filter sur un flux de donnes

    Pas dagrgation

    Pas dtat conserv

    KStream stream = builder.stream(new StringDeserializer(), new LongDeserializer(), "semaine"):

    KStream lundiStream = stream.filter((k, v) -> k.equals("lundi"));

    lundiStream.to("lundi-stream");

    Topic lundi-stream : (lundi,1), (lundi,2), (lundi,2)

  • Cl Valeur

    Lundi 1

    Jeudi 4

    Lundi 2

    Vendredi 3

    Lundi 2

    KTables : Transformation dagrgation sur un KStream

    Conservation dun tat

    Possibilit de raliser des fentre glissante

    KTable tableJour = stream.countByKey(new DeSererializer(), "table-jours");

    tableJour.to("comptage-jours");

    Topic comptage-jour : (Lundi, 1))

    Cl Value

    Lundi

    Jeudi

    Vendredi

    (Jeudi, 1) (Lundi, 2) (Vendredi, 1) (Lundi, 3)

    1

    1

    3

  • Pour permettre paralllisme : autant de KTables que de partitions du topic source !

    Persistance des KTables via des Stores In-Memory RocksDB (runtime) + topic compact Par dfaut Sa propre implmentation

    Au dmarrage de lapplication, les stores retrouvent leurs tats via le topic de sauvegarde

    Si fentre glissante : uniquement les donnes ncessaires conserves

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Nud 2

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Nud 2

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

    Instanciation du KTable du nud 2 sur le nud 1

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

    Le KTable recharge son tat grce la partition du topic de sauvegarde

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

    Une fois la Ktablesynchronise, consommation des messages de la partition 2

  • Topic source

    Partition 1

    Partition 2

    Nud 1

    Nud 2

    Topic Cible

    Partition 1

    Partition 2

    Partition 3

    Partition 1

    Partition 2

    Topic de sauvegarde des KTables

  • DEMO !

    https://github.com/hriviere/demo-kafka-connect-streams

    https://github.com/hriviere/demo-kafka-connect-streams

  • Source : confluent.io