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

[ORLEANS TECH 2019] Unifiez vos traitements Batch & Streaming avec Apache BEAM

[ORLEANS TECH 2019] Unifiez vos traitements Batch & Streaming avec Apache BEAM

33003e72c00afccb1b1989e1ec21d21d?s=128

Alexandre Touret

September 17, 2019
Tweet

More Decks by Alexandre Touret

Other Decks in Programming

Transcript

  1. Unifiez vos traitements Batch & Streaming avec Apache BEAM 17

    septembre 2019
  2. Alexandre Touret Architecte @Worldline #Java #API #CI #Software_Craftsmanship @touret_alex 2

  3. Sommaire ▪ Etat des lieux ▪ Présentation d’Apache Beam ▪

    Concepts ▪ Démonstration ▪ (Ma) Conclusion 3
  4. Etat des lieux Quel Framework utiliser pour mes traitements de

    données ? 1.
  5. ETL ? Extract Transform Load 5

  6. Spring Integration Traitements “simples” Apache Camel 6

  7. Traitements “distribués” Spark Flink Google Dataflow 7

  8. 8 Portabilité ? Quid de la formation ? Un outil

    et une API pour chaque besoin ? Et la production ?
  9. Write Once Run Everywhere ? 9

  10. Apache Beam Une courte présentation 2.

  11. Apache Beam a été initié par Google dans son offre

    Dataflow. Il a été donné à la fondation Apache en 2016. https://beam.apache.org Il est apparu en 2018 dans les principaux radars tech. 11 Source: https://www.thoughtworks.com/radar
  12. 12 https://beam.apache.org/documentation/runners/capability-matrix/ batch streaming Implémentation Exécution

  13. Concepts 3.

  14. 14 Un pipeline Input Collection Transformatio n Collection Transformatio n

    Output Transformatio n
  15. 15 Les collections PCollection<String> lines = p.apply(TextIO.read().from("file:///some/inputData.txt"));

  16. 16 Les transformations Beam fournit plusieurs transformations par défaut: •

    ParDo • GroupByKey • Combine • ... On peut les étendre et créer nos transformations.
  17. 17 public class FormatStringAsDocument extends SimpleFunction<String, Document> { @Override public

    Document apply(String input) { ObjectMapper objectMapper = new ObjectMapper(); Timestamp timestamp = objectMapper.readValue(input, Timestamp.class); Map<String, Object> value = objectMapper.convertValue(timestamp, new TypeReference<Map<String, Object>>() { }); Document document = new Document(value); return document; } }
  18. 18 Les IO Beam fournit une bibliothèque de transformations permettant

    l’interaction avec des sources de données On peut trouver : Kafka Text Hadoop Cassandra ...
  19. 19 Les transformations appliquées aux IO read() Exemples: JdbcIO.read() MongoDbIO.read()

    write() Exemples: JdbcIO.write() MongoDbIO.write()
  20. 20 Streaming p.apply(KafkaIO.<Long, String>read() .withBootstrapServers(kafkaUrl) .withTopic(kafkaTopicName) .withKeyDeserializer(LongDeserializer.class) .withValueDeserializer(StringDeserializer.class) [...] p.run().waitUntilFinish();

  21. Batch exécuté une fois PCollection<String> lines = pipeline.apply(TextIO.read() .from(“data/**.csv”)); 21

  22. Batch sur présence de fichiers PCollection<String> lines = pipeline.apply(TextIO.read() .from(“data/**.csv”)

    .watchForNewFiles( standardSeconds(15), afterTimeSinceNewOutput(Duration.standardHours(1)))) 22
  23. 23 Les runners Beam fournit plusieurs runners. La sélection d’un

    runner se fait par ajout d’une dépendance dans le classpath <dependency> <groupId>org.apache.beam</groupId> <artifactId>beam-runners-direct-java </artifactId> <version>2.14.0</version> <scope>test</scope> </dependency>
  24. Write once run everywhere ? 24 Source: https://beam.apache.org/documentation/runners/capability-matrix

  25. Démonstration 4.

  26. (Ma) Conclusion 5.

  27. Quelques points négatifs • Pas compatible avec JAVA 11 et

    les dernières versions de certains frameworks (ex. JUNIT5) • La gestion des erreurs est encore problématique dans certains cas 27
  28. Les points positifs • Le projet est très actif •

    Permet d'exécuter des pipelines sur plusieurs runtimes avec une seule API. 28 • Si vous devez gérer plusieurs environnements et faire du “débordement dans le cloud”, BEAM peut être utile.
  29. Pour aller plus loin https://beam.apache.org https://github.com/littlewing/beam-orleans-tech https://blog.jetbrains.com/blog/2019/06/14/new-in- educational-products-apache-beam-katas-and-more/ 29

  30. Merci! Des questions? @touret_alex 30 17 septembre 2019