Slide 1

Slide 1 text

1 SPRING CLOUD DATA FLOW: EVENT-DRIVEN STREAM AND BATCH PROCESSING JAX 2017 Nicolas Byl, codecentric AG

Slide 2

Slide 2 text

2 . 1 Stream Processing, anyone?

Slide 3

Slide 3 text

2 . 2 Spring Cloud Dataflow

Slide 4

Slide 4 text

3 . 1 PROCESSING MODELL

Slide 5

Slide 5 text

3 . 2 Streams kleinste Einheit von Spring Cloud Dataflow Verarbeitungsstrecke

Slide 6

Slide 6 text

3 . 3 Stream Struktur Source als Datenquelle Multiple Processor Instanzen für nachfolgende Verarbeitungsschritte Sink als Ende der Verarbeitungskette

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

3 . 4 3 . 5 Verarbeitung Jeder Instanz der Verarbeitungskette ist eine Spring Boot Applikation Pufferung zwischen Verarbeitungsschritten in Queue Pull Mechanismus für nächste Datensatz

Slide 9

Slide 9 text

3 . 6 Queueing

Slide 10

Slide 10 text

4 . 1 ARCHITEKTUR

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

4 . 2 4 . 3 Building Blocks Spring Boot Spring Integration Spring Batch

Slide 13

Slide 13 text

4 . 4 Deployables Spring Boot Applikationen Spring Cloud Stream Starters Spring Cloud Stream Spring Cloud Task

Slide 14

Slide 14 text

4 . 5 Deployer Spring Cloud Deployer - SPI

Slide 15

Slide 15 text

4 . 6 Interfaces Command Line Interface Dashboard Flo Editor REST

Slide 16

Slide 16 text

5 . 1 BUILDING STREAMS

Slide 17

Slide 17 text

5 . 2 Command Line Interface Definition und Management der vorhandenen Streams DSL zur Verkettung von Applikation mittels |

Slide 18

Slide 18 text

5 . 3 Beispiel: Ticktack stream create --name ticktock --definition "time | log" --deploy

Slide 19

Slide 19 text

5 . 4 Beispiel: HTTP-Request stream create --name test --definition "http | log" stream deploy test --properties "app.http.spring.cloud.deployer.kubernetes.c http post --target http://:8080 --data "Hello"

Slide 20

Slide 20 text

5 . 5 Grafischer Editor

Slide 21

Slide 21 text

6 . 1 TASKS

Slide 22

Slide 22 text

6 . 2 Definition Microservice mit definierter Lebensdauer Lebenszyklus mit Start- und Endzeitpunkt Logging jedes Laufs Integration mit Spring Batch

Slide 23

Slide 23 text

6 . 3 Beispiel: Task erzeugen und Starten task create mytask --definition "timestamp --format=\"yyyy\"" task launch mytask

Slide 24

Slide 24 text

6 . 4 Integration mit Streams Starten durch Stream als Sink (TriggerTask Source) Lebenszyklus-Events werden in eigene Streams ausgegeben

Slide 25

Slide 25 text

7 . 1 CUSTOM APPLICATIONS

Slide 26

Slide 26 text

7 . 2 Programmiermodell - Spring Cloud Stream Source, Sink & Processor sind normale Spring Beans Kopplung an Spring Integration Binding an den jeweiligen Typen Abstraktion des Queueing Providers durch das Framework

Slide 27

Slide 27 text

7 . 3 Beispiel: Direkte Bearbeitung in der Beans @EnableBinding(Processor.class) public class TransformProcessor { @Autowired VotingService votingService; @StreamListener(Processor.INPUT) @SendTo(Processor.OUTPUT) public VoteResult handle(Vote vote) { return votingService.record(vote); } }

Slide 28

Slide 28 text

7 . 4 Beispiel: Spring Integration als Source @EnableBinding(Source.class) public class TimerSource { @Value("${format}") private String format; @Bean @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay public MessageSource timerMessageSource() { return () -> new GenericMessage<>(new SimpleDateFormat(format).format( } }

Slide 29

Slide 29 text

7 . 5 Beispiel: Reative Processor @EnableRxJavaProcessor public class RxJavaTransformer { private static Logger logger = LoggerFactory.getLogger(RxJavaTransformer @Bean public RxJavaProcessor processor(Observable inputStream.map(data -> { logger.info("Got data = " + data); return data; }) .buffer(5) .map(data -> String.valueOf(avg(data))); } [...] }

Slide 30

Slide 30 text

8 . 1 ANALYTICS

Slide 31

Slide 31 text

8 . 2 Sinks, die einen Counter in Redis hinterlegen Mögliche Ebenen: Counter: Anzahl Nachrichten Field Value Counter: Anzahl eines Werte eines spezifischen Feldes Aggregate Counter: Anzahl des Erscheinens einer Nachricht

Slide 32

Slide 32 text

8 . 3 Beispiel: Twitter Analyse stream create --name twitter-demo --definition "twitterstream --twitter.credentials.consumer-key=<...> [..] | field-value-counter --field-value-counter.fieldName=entities.hashtags.text --field-value-counter.name=hashtags"

Slide 33

Slide 33 text

9 . 1 ZUSAMMENFASSUNG

Slide 34

Slide 34 text

9 . 2 Andere Anwendungen Analytics Monitoring CRM ...

Slide 35

Slide 35 text

9 . 3 The End Copyright 2017