Slide 1

Slide 1 text

Unifiez vos traitements Batch & Streaming avec Apache BEAM 17 septembre 2019

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Sommaire ▪ Etat des lieux ▪ Présentation d’Apache Beam ▪ Concepts ▪ Démonstration ▪ (Ma) Conclusion 3

Slide 4

Slide 4 text

Etat des lieux Quel Framework utiliser pour mes traitements de données ? 1.

Slide 5

Slide 5 text

ETL ? Extract Transform Load 5

Slide 6

Slide 6 text

Spring Integration Traitements “simples” Apache Camel 6

Slide 7

Slide 7 text

Traitements “distribués” Spark Flink Google Dataflow 7

Slide 8

Slide 8 text

8 Portabilité ? Quid de la formation ? Un outil et une API pour chaque besoin ? Et la production ?

Slide 9

Slide 9 text

Write Once Run Everywhere ? 9

Slide 10

Slide 10 text

Apache Beam Une courte présentation 2.

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

12 https://beam.apache.org/documentation/runners/capability-matrix/ batch streaming Implémentation Exécution

Slide 13

Slide 13 text

Concepts 3.

Slide 14

Slide 14 text

14 Un pipeline Input Collection Transformatio n Collection Transformatio n Output Transformatio n

Slide 15

Slide 15 text

15 Les collections PCollection lines = p.apply(TextIO.read().from("file:///some/inputData.txt"));

Slide 16

Slide 16 text

16 Les transformations Beam fournit plusieurs transformations par défaut: ● ParDo ● GroupByKey ● Combine ● ... On peut les étendre et créer nos transformations.

Slide 17

Slide 17 text

17 public class FormatStringAsDocument extends SimpleFunction { @Override public Document apply(String input) { ObjectMapper objectMapper = new ObjectMapper(); Timestamp timestamp = objectMapper.readValue(input, Timestamp.class); Map value = objectMapper.convertValue(timestamp, new TypeReference>() { }); Document document = new Document(value); return document; } }

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19 Les transformations appliquées aux IO read() Exemples: JdbcIO.read() MongoDbIO.read() write() Exemples: JdbcIO.write() MongoDbIO.write()

Slide 20

Slide 20 text

20 Streaming p.apply(KafkaIO.read() .withBootstrapServers(kafkaUrl) .withTopic(kafkaTopicName) .withKeyDeserializer(LongDeserializer.class) .withValueDeserializer(StringDeserializer.class) [...] p.run().waitUntilFinish();

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Batch sur présence de fichiers PCollection lines = pipeline.apply(TextIO.read() .from(“data/**.csv”) .watchForNewFiles( standardSeconds(15), afterTimeSinceNewOutput(Duration.standardHours(1)))) 22

Slide 23

Slide 23 text

23 Les runners Beam fournit plusieurs runners. La sélection d’un runner se fait par ajout d’une dépendance dans le classpath org.apache.beam beam-runners-direct-java 2.14.0 test

Slide 24

Slide 24 text

Write once run everywhere ? 24 Source: https://beam.apache.org/documentation/runners/capability-matrix

Slide 25

Slide 25 text

Démonstration 4.

Slide 26

Slide 26 text

(Ma) Conclusion 5.

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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.

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Merci! Des questions? @touret_alex 30 17 septembre 2019