Stream Processing: Uma visão geral

50
Stream Processing, uma visão geral Data velocity, Big Data e outras buzzwords Otávio Carvalho

Transcript of Stream Processing: Uma visão geral

Page 1: Stream Processing: Uma visão geral

Stream Processing,uma visão geral

Data velocity, Big Data e outras buzzwords

Otávio Carvalho

Page 2: Stream Processing: Uma visão geral

2

Quem sou?● Bacharel em Ciência da Computação - UFRGS● Ex-bolsista de pesquisa no GPPD

● Grupo de Processamento Paralelo e Distribuído da UFRGS● Consultor na ThoughtWorks Brasil● Apaixonado por Sistemas Distribuídos

Page 3: Stream Processing: Uma visão geral

3

Por que precisamos disso?

Page 4: Stream Processing: Uma visão geral

4

Dados em tempo real

Page 5: Stream Processing: Uma visão geral

5

Buzzwords à vista

Page 6: Stream Processing: Uma visão geral

6

Big Data – Modelo de 3Vs

Page 7: Stream Processing: Uma visão geral

7

Big Data – Ciclo de tendências

Page 8: Stream Processing: Uma visão geral

8

Por que Stream Processing?

Page 9: Stream Processing: Uma visão geral

9

Batch Processing

● Batch Processing no sentido de grandes operações que ocorrem sobre conjuntos de dados de forma não-interativa● Processamento de folha de pagamento

MapReduce

Page 10: Stream Processing: Uma visão geral

10

Stream Processing

● Stream Processing no sentido de pipelines de dados para o processamento de fluxos de dados contínuos● Processamento dos Trending Topics do Twitter

13:00 14:008:00 9:00 10:00 11:00 12:00 Processing Time

Page 11: Stream Processing: Uma visão geral

11

Investimento em P&D

Page 12: Stream Processing: Uma visão geral

12

Arquitetura Lambda

● Duas camadas● Batch layer● Speed layer

Page 13: Stream Processing: Uma visão geral

13

Arquitetura Kappa

● Camada única● Speed layer

Page 14: Stream Processing: Uma visão geral

14

Quem utilizaStream Processing?

Page 15: Stream Processing: Uma visão geral

15

Quem utiliza Stream Processing?

● Apache Foundation● Apache Beam (2016)

● Google● Flume (2010)● MillWheel (2013)● Dataflow (2014)

● Twitter● Twitter Storm (2011)● Twitter Heron (2016)

● Berkeley● Spark Streaming (2013)

● LinkedIn● Apache Samza (2011)● Kafka Streams (2016)

● TU Berlin● Apache Flink (2010)

● Outras empresas● Alibaba● Netflix● Spotify● Walmart ● …

Page 16: Stream Processing: Uma visão geral

16

Como isso surgiu?

Page 17: Stream Processing: Uma visão geral

17

Como isso surgiu?● Dataflow relacional

● Surge como uma evolução sobre os Bancos de Dados Relacionais

● Solução de problemas específicos ● Operações financeiras● Monitoramento de logística● Monitoramento de fábricas

Page 18: Stream Processing: Uma visão geral

18

Histórico● Primeira geração

● TelegraphCQ – baseado no PostgresDB● Segunda geração

● Borealis● Balanceamento de carga● Processamento distribuído

● Terceira geração: Sistemas na nuvem● Twitter Storm● Apache Spark (Berkeley)● Apache Flink (T.U. Berlin)● LinkedIn/Apache Samza (Apache Kafka)● Google Dataflow

Page 19: Stream Processing: Uma visão geral

19

Explosão de abordagens relacionadas

● Complex Event Processing (CEP)● Event Sourcing

● Baseado nas idéias de DDD do ambiente corporativo● Reactive programming

● Reactive manifesto

“[…] queremos sistemas que sejam responsivos, resilientes, elásticos e orientados a mensagens. Nós chamamos esses sistemas de Sistemas Reativos”

Page 20: Stream Processing: Uma visão geral

20

Como realmentefunciona?

Page 21: Stream Processing: Uma visão geral

21

Como realmente funciona?● Conceitos fundamentais

● Como processar a entrada/saída de dados?● Data Source / Data Sink

● Como realizar transformações sobre os dados?● PEs (Elementos processadores)

● Como representar os passos do processamento?● DAG (Grafo direcionado acíclico)

● Como particionar o processamento? Janelas?● Windowing

● Event time● Processing time

Page 22: Stream Processing: Uma visão geral

22

Data Source / Data Sink

Page 23: Stream Processing: Uma visão geral

23

Data Source/Sink – Apache Kafka

Page 24: Stream Processing: Uma visão geral

24

Processing Elements - PEs

● Processamento encadeado● Grafo Direcionado Acíclico de PEs

Page 25: Stream Processing: Uma visão geral

25

Processing Elements - PEs

● Transformações sobre os dados

Por elemento Agregação Composição

Page 26: Stream Processing: Uma visão geral

26

PEs – Apache Storm

Page 27: Stream Processing: Uma visão geral

27

Windowing

13:00 14:008:00 9:00 10:00 11:00 12:00 Processing Time

Page 28: Stream Processing: Uma visão geral

28

Windowing

Page 29: Stream Processing: Uma visão geral

29

Windowing – Event/Processing● Event time

● Momento em que o evento foi gerado

● Processing time● Momento do processamento efetivo do evento

Page 30: Stream Processing: Uma visão geral

30

Windowing – Event/Processing

Event Time

Processing Time

11:0010:00 15:0014:0013:0012:00

11:0010:00 15:0014:0013:0012:00

Input

Output

Input

Output

Page 31: Stream Processing: Uma visão geral

31

Windowing – Tipos de Janelas

Page 32: Stream Processing: Uma visão geral

32

Windowing – Triggers/Watermarks

Page 33: Stream Processing: Uma visão geral

33

Como programamos?

Page 34: Stream Processing: Uma visão geral

34

Como programamos?

● Nos exemplos a seguir iremos utilizar:● Apache Beam

● Combinação de Batch e strEAM● Projeto da Apache criado em Janeiro de 2016● Esforço para unificar batch processing e stream

processing● API suportada por diversos projetos:

● Apache Spark● Apache Flink● Google Dataflow

Page 35: Stream Processing: Uma visão geral

35

Resultados de um time por hora

● O quê? ● Soma de inteiros do placar, agrupados por time

gameEvents.

[… input …]

.apply(“LeaderBoardTeamFixedWindows”, Window

[…]) .apply(“ExtractTeamScore”,

new ExtractAndSumScore(“team”))

[… output ...]

Page 36: Stream Processing: Uma visão geral

36

Resultados de um time por hora

● Onde? ● Dentro de janelas de tempo de uma hora

gameEvents.

[… input …]

.apply(“LeaderBoardTeamFixedWindows”, Window

.<GameActionInfo>into(FixedWindows.of(Duration.standardMinutes(Durations.minutes(60))))...)

.apply(“ExtractTeamScore”,

new ExtractAndSumScore(“team”))

[… output …]

Page 37: Stream Processing: Uma visão geral

37

Resultados de um time por hora

● Quando? ● Early trigger: Cada 5 minutos de processamento● On-time trigger: Quando a watermark passa o fim da janela● Late trigger: Cada 10 minutos de processamento● Final trigger: Quando a watermark passa duas horas do fim da

janela

Page 38: Stream Processing: Uma visão geral

38

Resultados de um time por horagameEvents.

[… input …].apply(“LeaderBoardTeamFixedWindows”, Window

.<GameActionInfo>into(FixedWindows.of(Duration.standardMinutes(Durations.minutes(60))))

.triggering(AfterWatermark.pastEndOfWindow() .withEarlyFirings( AfterProcessingTime.pastFirstElementInPane() .plusDelayOf(Durations.minutes(5))) .withLateFirings( AfterProcessingTime.pastFirstElementInPane() .plusDelayOf(Durations.minutes(10))) .withAllowedLateness( Duration.standardMinutes(120)) ..) .apply(“ExtractTeamScore”,

new ExtractAndSumScore(“team”))

[… output …]

Page 39: Stream Processing: Uma visão geral

39

Resultados de um time por hora

● Como? ● Resultados novos são acumulados nos resultados

anteriores

Page 40: Stream Processing: Uma visão geral

40

Resultados de um time por horagameEvents.

[… input …].apply(“LeaderBoardTeamFixedWindows”, Window

.<GameActionInfo>into(FixedWindows.of(Duration.standardMinutes(Durations.minutes(60))))

.triggering(AfterWatermark.pastEndOfWindow() .withEarlyFirings( AfterProcessingTime.pastFirstElementInPane() .plusDelayOf(Durations.minutes(5))) .withLateFirings( AfterProcessingTime.pastFirstElementInPane() .plusDelayOf(Durations.minutes(10))) .withAllowedLateness( Duration.standardMinutes(120))

.accumulatingFiringPanes()) .apply(“ExtractTeamScore”,

new ExtractAndSumScore(“team”))

[… output …]

Page 41: Stream Processing: Uma visão geral

41

Como é usado em produção?

Page 42: Stream Processing: Uma visão geral

42

Netflix - Mantis

Page 43: Stream Processing: Uma visão geral

43

Uber

Page 44: Stream Processing: Uma visão geral

44

Uber

Page 45: Stream Processing: Uma visão geral

45

O que podemos esperar para o futuro?

Page 46: Stream Processing: Uma visão geral

46

O que é possível hoje?

d

Page 47: Stream Processing: Uma visão geral

47

Importância & Desafios● Importância

● Resolve diversos dos problemas no processamento de dados de diversas tecnologias emergentes, tais como:● Internet das coisas (IoT) ● Aplicações móveis em larga escala

● Desafios

● Como unificar as diferentes APIs/Vendors

● Como integrar diferentes abordagens de Stream Processing

● Confiabilidade / Semântica / Tolerância a falhas

Page 48: Stream Processing: Uma visão geral

Obrigado!Para mais perguntas e sugestões:

Otávio [email protected]

@otaviocarvalho

ThoughtWorks Brazil – Porto Alegre Office

Page 49: Stream Processing: Uma visão geral

49

Nomenclatura

● Stream Processing no sentido de pipelines de dados para o processamento de fluxos de dados contínuos● Menos ambiguamente Event Stream Processing

● Nomenclatura problemática, pois diversas áreas distintas compartilham da mesma origem:● Programação Dataflow

● Modelo de Dataflow Síncrono (SDF)● LUSTRE, Esterel e outros sistemas de missão crítica

● Dataflow relacional● SPL, Borealis, TelegraphCQ

● Arquiteturas Dataflow● DSPs, GPUs, alternativa à arquitetura de Von Neumann

Page 50: Stream Processing: Uma visão geral

50

Links Interessantes● Michael Stonebraker

● The 8 Requirements for Stream Processing: http://cs.brown.edu/~ugur/8rulesSigRec.pdf

● The Case for Polystores: http://wp.sigmod.org/?p=1629● The World Beyond Batch, Streaming 101:

https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101● Lambda architecture: http://lambda-architecture.net/● Kappa architecture: https://www.oreilly.com/ideas/questioning-the-

lambda-architecture● Apache Beam: http://beam.incubator.apache.org/

● Obrigado especial para Frances Perry e Tyler Akidau por fornecerem material para apresentações relacionadas ao Apache Beam (que foi reutilizado nessa apresentação)