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

Spring Cloud Data Flow: Event-driven Stream and Batch Processing

Spring Cloud Data Flow: Event-driven Stream and Batch Processing

F029ec9c798e4dc447cab5e76f62fa17?s=128

Nicolas Byl

May 10, 2017
Tweet

Transcript

  1. 1 SPRING CLOUD DATA FLOW: EVENT-DRIVEN STREAM AND BATCH PROCESSING

    JAX 2017 Nicolas Byl, codecentric AG
  2. 2 . 1 Stream Processing, anyone?

  3. 2 . 2 Spring Cloud Dataflow

  4. 3 . 1 PROCESSING MODELL

  5. 3 . 2 Streams kleinste Einheit von Spring Cloud Dataflow

    Verarbeitungsstrecke
  6. 3 . 3 Stream Struktur Source als Datenquelle Multiple Processor

    Instanzen für nachfolgende Verarbeitungsschritte Sink als Ende der Verarbeitungskette
  7. None
  8. 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
  9. 3 . 6 Queueing

  10. 4 . 1 ARCHITEKTUR

  11. None
  12. 4 . 2 4 . 3 Building Blocks Spring Boot

    Spring Integration Spring Batch
  13. 4 . 4 Deployables Spring Boot Applikationen Spring Cloud Stream

    Starters Spring Cloud Stream Spring Cloud Task
  14. 4 . 5 Deployer Spring Cloud Deployer - SPI

  15. 4 . 6 Interfaces Command Line Interface Dashboard Flo Editor

    REST
  16. 5 . 1 BUILDING STREAMS

  17. 5 . 2 Command Line Interface Definition und Management der

    vorhandenen Streams DSL zur Verkettung von Applikation mittels |
  18. 5 . 3 Beispiel: Ticktack stream create --name ticktock --definition

    "time | log" --deploy
  19. 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://<IP>:8080 --data "Hello"
  20. 5 . 5 Grafischer Editor

  21. 6 . 1 TASKS

  22. 6 . 2 Definition Microservice mit definierter Lebensdauer Lebenszyklus mit

    Start- und Endzeitpunkt Logging jedes Laufs Integration mit Spring Batch
  23. 6 . 3 Beispiel: Task erzeugen und Starten task create

    mytask --definition "timestamp --format=\"yyyy\"" task launch mytask
  24. 6 . 4 Integration mit Streams Starten durch Stream als

    Sink (TriggerTask Source) Lebenszyklus-Events werden in eigene Streams ausgegeben
  25. 7 . 1 CUSTOM APPLICATIONS

  26. 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
  27. 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); } }
  28. 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<String> timerMessageSource() { return () -> new GenericMessage<>(new SimpleDateFormat(format).format( } }
  29. 7 . 5 Beispiel: Reative Processor @EnableRxJavaProcessor public class RxJavaTransformer

    { private static Logger logger = LoggerFactory.getLogger(RxJavaTransformer @Bean public RxJavaProcessor<String,String> processor(Observable<String return inputStream -> inputStream.map(data -> { logger.info("Got data = " + data); return data; }) .buffer(5) .map(data -> String.valueOf(avg(data))); } [...] }
  30. 8 . 1 ANALYTICS

  31. 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
  32. 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"
  33. 9 . 1 ZUSAMMENFASSUNG

  34. 9 . 2 Andere Anwendungen Analytics Monitoring CRM ...

  35. 9 . 3 The End Copyright 2017