O documento fornece uma visão geral do processamento de fluxos de dados em tempo real, também conhecido como stream processing. Aborda conceitos como janelas de tempo, triggers e watermarks para processamento contínuo de dados. Apresenta exemplos de como programar stream processing usando o framework Apache Beam, incluindo cálculo de placares esportivos por time em janelas de uma hora.
2. 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
9. 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. 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
17. 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. 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. 19
Explosão de abordagens relacionada
● 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”
21. 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
34. 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. 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. 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. 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. 38
Resultados de um time por hora
gameEvents.
[… 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. 39
Resultados de um time por hora
● Como?
● Resultados novos são acumulados nos resultados
anteriores
40. 40
Resultados de um time por hora
gameEvents.
[… 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 …]
47. 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
48. Obrigado!
Para mais perguntas e sugestões:
Otávio Carvalho
ocarvalh@thoughtworks.com
@otaviocarvalho
ThoughtWorks Brazil – Porto Alegre Office
49. 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. 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)