stream processing: uma visão geral
TRANSCRIPT
Stream Processing,uma visão geral
Data velocity, Big Data e outras buzzwords
Otávio Carvalho
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
3
Por que precisamos disso?
4
Dados em tempo real
5
Buzzwords à vista
6
Big Data – Modelo de 3Vs
7
Big Data – Ciclo de tendências
8
Por que Stream Processing?
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
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
11
Investimento em P&D
12
Arquitetura Lambda
● Duas camadas● Batch layer● Speed layer
13
Arquitetura Kappa
● Camada única● Speed layer
14
Quem utilizaStream Processing?
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 ● …
16
Como isso surgiu?
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
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
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”
20
Como realmentefunciona?
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
22
Data Source / Data Sink
23
Data Source/Sink – Apache Kafka
24
Processing Elements - PEs
● Processamento encadeado● Grafo Direcionado Acíclico de PEs
25
Processing Elements - PEs
● Transformações sobre os dados
Por elemento Agregação Composição
26
PEs – Apache Storm
27
Windowing
13:00 14:008:00 9:00 10:00 11:00 12:00 Processing Time
28
Windowing
29
Windowing – Event/Processing● Event time
● Momento em que o evento foi gerado
● Processing time● Momento do processamento efetivo do evento
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
31
Windowing – Tipos de Janelas
32
Windowing – Triggers/Watermarks
33
Como programamos?
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
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 ...]
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 …]
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
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 …]
39
Resultados de um time por hora
● Como? ● Resultados novos são acumulados nos resultados
anteriores
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 …]
41
Como é usado em produção?
42
Netflix - Mantis
43
Uber
44
Uber
45
O que podemos esperar para o futuro?
46
O que é possível hoje?
d
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
Obrigado!Para mais perguntas e sugestões:
Otávio [email protected]
@otaviocarvalho
ThoughtWorks Brazil – Porto Alegre Office
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
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)