Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Application de données en continu avec Kafka St...

Avatar for avandel avandel
November 15, 2017

Application de données en continu avec Kafka Streams

Avatar for avandel

avandel

November 15, 2017

Other Decks in Programming

Transcript

  1. Programme • Kafka en 6 slides • Révisons les bases

    • Kafka Streams : les concepts clés • Zoom sur le DSL • Démonstration #DevoxxMA @aurevandel
  2. Qu’est ce que Kafka ? #DevoxxMA C’est un système de

    messagerie distribué open source, haut débit en mode publish-subscribe modélisé comme un commit log distribué. Il est tolérant aux pannes, efficace et performant. Il permet de prendre en charge l'ingestion de gros volume données avec des longues périodes de rétention. @aurevandel
  3. Architecture #DevoxxMA @aurevandel Kafka se lance dans des serveurs appelés

    brokers. Les producers sont les processus qui publient dans les brokers Kafka. Les messages publiés sont enregistrés dans des catégories appelés topics. Les topics sont divisés en partition répliquées. Les consumers souscrivent à des topics, lisent et traitent les messages des partitions.
  4. Consumer group #DevoxxMA @aurevandel Les consumers peuvent faire partis d’un

    consumer group. Chaque enregistrement publié dans un topic est lue par un seul consumer du groupe. Les partitions d’un topic permettent à chaque consumer de traiter un sous ensemble d’enregistrements. Un cluster Kafka avec un topic de 4 partitions et 2 consumer groups.
  5. Traitement de données en continu Avoir de la donnée de

    plus en plus rapidement afin de réduire la latence. Traiter des données de plus en plus massives et illimités. Répartir le travail plus uniformément et au fil du temps pour une meilleure gestion des ressources. #DevoxxMA @aurevandel
  6. Mais qu’est ce que le streaming ? #DevoxxMA @aurevandel “A

    type of data processing engine that is designed with infinite data sets in mind” Tyler Akidau
  7. Besoins des systèmes de streaming #DevoxxMA @aurevandel Exactitude : Permet

    d’obtenir la parité avec le batch. Cela se résume à un stockage cohérent pour permettre un traitement "exactly once". Des outils pour raisonner sur le temps : Cela vous permet d'aller au-delà du batch. De bons outils pour raisonner sur le temps sont essentiels pour traiter des données non ordonnées et avec divers biais sur le temps de l'événement.
  8. Windowing par temps d’événement #DevoxxMA @aurevandel Processing Time Event Time

    Input Output 12:00 10:00 11:00 09:00 12:00 11:00 10:00 09:00
  9. Yet Another Stream Processing Engine ? • Juste une librairie

    + APIs : Kafka et votre application ! • “Run everywhere” • Modèle simple • Performant et tolérant aux pannes • Traitement avec états • Exactly once sémantique #DevoxxMA @aurevandel
  10. Modèle Kafka Streams : mise à jour en continu #DevoxxMA

    @aurevandel + Alice Europe,25y,... Africa 3 ... ... Asia 7 Europe 6 Table New record Continuously updating table Africa 3 ... ... Asia 7 Europe 5
  11. Processor Topology #DevoxxMA @aurevandel Définit la logique de traitement de

    votre application streaming. Un source processor est un processeur qui ne possède aucun processeur en amont et qui produit un flux d'entrée à sa topologie à partir d'un ou de plusieurs topics Kafka. Un sink processor est un processeur qui n'a pas de processeur en aval et qui envoie les enregistrements reçus de ses processeurs en amont à un topic Kafka.
  12. APIs #DevoxxMA @aurevandel Processor API - API bas niveau -

    Processor, Topology & State store - 2 méthodes principales : process et punctuate - process sur chaque enregistrement - punctuate appelé périodiquement Streams DSL - API haut niveau - KStream, KTable - Windowing, map/reduce, group by, etc. - Construit au dessus de l’API Processor. - Suffisant pour la plupart des cas
  13. State Store #DevoxxMA @aurevandel Le state store permet de stocker

    et interroger des données. Le DSL de Kafa Streams gérera automatiquement les states stores lors de l’appel d’un opérateur à état tel que count(), aggregate() ou lors d’une opération de windowing. Il est possible d’y accéder via une API : Interactive Query. Dans Kafka Streams c’est RocksDB qui est utilisé par défaut. Kafka Streams permet une tolérance aux pannes et une récupération automatique pour les state store locaux.
  14. Passage à l’échelle #DevoxxMA @aurevandel Distribution des partitions de stream

    entre les tâches de stream exécutées dans les instances d’application. Le nombre des partitions des topics en entrée indiquent les possibilités de traitement parallèles. On peut lancer plusieurs instances de la même application pour augmenter le parallélisme. Chaque thread est lié à une partition, il est possible d’augmenter le nombre de thread au sein d’une instance.
  15. Interaction KStream / KTable #DevoxxMA @aurevandel KStream KTable mapValues() filter()

    join() ... reduce() aggregate() count() map() mapValues flatMap() filter() join() ... toStream() KGroupedStream groupBy() groupByKey() KGroupedTable reduce() aggregate() count() groupBy()
  16. Jointures #DevoxxMA @aurevandel Join operands Type (INNER) JOIN LEFT JOIN

    OUTER JOIN KStream-to-KStream Windowed Supported Supported Supported KTable-to-KTable Non-windo wed Supported Supported Supported KStream-to-KTable Non-windo wed Supported Supported Not Supported KStream-to-GlobalKTable Non-windo wed Supported Supported Not Supported KTable-to-GlobalKTable N/A Not Supported Not Supported Not Supported
  17. Jointures #DevoxxMA @aurevandel Les jointures nécessitent un co-partitionnement des données

    d'entrée exceptés pour les GlobalKTable. Cela est au développeur de s’assurer du co-partitionnement lors de la jointure. Les topics d'entrée de la jointure doivent avoir le même nombre de partitions. Toutes les applications qui écrivent dans les topics d'entrée doivent avoir la même stratégie de partitionnement afin que les enregistrements portant la même clé soient transmis au même numéro de partition.
  18. Windows #DevoxxMA @aurevandel Window name Behavior Description Tumbling time window

    Time-based Fixed-size, non-overlapping, gap-less windows Hopping time window Time-based Fixed-size, overlapping windows Sliding time window Time-based Fixed-size, overlapping windows that work on differences between record timestamps Session window Session-based Dynamically-sized, non-overlapping, data-driven windows
  19. Structure d’une application #DevoxxMA @aurevandel val props = new Properties

    props.put(StreamsConfig.APPLICATION_ID_CONFIG, appId) props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, broker) props.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, trigger) implicit val stringSerde = Serdes.String implicit val longSerde = LongAsStringSerde KStreamBuilderS .stream[String, String](inputTopic) .map((_, word) => (word, 1L)) .groupByKey .count(storeName) .to(outputTopic) val kafkaStream = new KafkaStreams( KStreamBuilderS.inner, props ) sys.addShutdownHook(kafkaStream.close()) kafkaStream.start() Start processing ! Configure your app Do your streaming transformations