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

Agilidade, escalabilidade, e ordem com Kafka e Dataflow

Opensanca
November 13, 2019

Agilidade, escalabilidade, e ordem com Kafka e Dataflow

Apresentação do Data Meetup v2019.4 por Leonardo Miguel.

Opensanca

November 13, 2019
Tweet

More Decks by Opensanca

Other Decks in Technology

Transcript

  1. Kafka
    <3
    Dataflow
    Agilidade, escalabilidade, e ordem

    View Slide

  2. Eu
    ● Engenheiro de Dados na Arquivei
    ● CAASO
    ○ BCC 012
    ○ MECAI 017

    View Slide

  3. Eu
    ● Engenheiro de Dados na Arquivei
    ● CAASO
    ○ BCC 012
    ○ MECAI 017
    ● Corote pêssego - ok
    ● Tauber e Lokal - não ok

    View Slide

  4. Eu
    ● Engenheiro de Dados na Arquivei
    ● CAASO
    ○ BCC 012
    ○ MECAI 017
    ● Corote pêssego - ok
    ● Tauber e Lokal - não ok
    ● Java - ok
    ● JavaScript - não ok

    View Slide

  5. Temos vagas: arquivei.com.br/vagas

    View Slide

  6. Roadmap
    ● Dataflow
    ● Kafka
    ● Dataflow
    ● Kafka
    ● Kafka e Dataflow

    View Slide

  7. O que é Dataflow?

    View Slide

  8. Dataflow model
    ● Akidau, 2015
    ● “Modern data processing is a complex and exciting field.”
    ● Junta dois papers:
    ○ FlumeJava
    ○ MillWheel
    ● Batchs existentes
    ○ Alta latência
    ● Streaming existentes
    ○ Tolerância a falhas, escalabilidade, latência
    ○ Complexidade de janelamento

    View Slide

  9. Dataflow model
    ● Akidau, 2015
    ● Propõe um modelo de programação simples para
    processamento de dados
    ○ Event time
    ○ Processing time

    View Slide

  10. Dataflow model
    ● Akidau, 2015
    ● Propõe um modelo de programação simples para
    processamento de dados
    ○ Divide pipelines em 4 dimensões
    ■ Quais resultados computados?
    ■ Onde serão computados? (em event time)
    ■ Quando serão materializados? (em processing time)
    ■ Como refinar dados recentes mais tarde?

    View Slide

  11. Streaming vs Batch
    ● Streaming -> Unbounded
    ● Batch -> Bounded
    ● Unbounded: processado em batch systems
    ● Streaming systems: capazes de processar batches

    View Slide

  12. Windows
    ● Não é um sistema operacional
    ● Divisão do dataset para processamento
    ● Aligned: se aplica a todo dataset
    ● Unaligned: se aplica a um subset

    View Slide

  13. Windows
    ● Divisão do dataset para processamento

    View Slide

  14. Watermark
    ● Limite inferior de todos os event times
    processados pelo pipeline

    View Slide

  15. Primitivas
    ● ParDo
    ● GroupByKey

    View Slide

  16. Primitivas
    ● AssignWindows
    ● MergeWindows
    ● GroupByKeyAndWindow

    View Slide

  17. Primitivas

    View Slide

  18. Triggers
    ● Determina quando um GroupByKeyAndWindow ocorre
    ● Window: determina onde os dados serão agrupados
    (event time)
    ● Trigger: determina quando os resultados dos agrupamentos
    serão emitidos
    (processing time)

    View Slide

  19. Triggers
    ● Late data: atraso no event time em relação ao processing time
    ● Refinamentos:
    ○ Descarte: resultados futuros não dependem de dados passados
    ○ Acúmulo: resultados futuros dependem de dados passados
    ○ Acúmulo + Retração:
    ■ resultados futuros dependem de dados passados
    ■ resultados passados dependem de dados futuros

    View Slide

  20. O que é Kafka?

    View Slide

  21. Comunicação entre sistemas

    View Slide

  22. Comunicação entre sistemas

    View Slide

  23. Comunicação entre sistemas

    View Slide

  24. Comunicação entre sistemas

    View Slide

  25. Ecossistema de Big Data

    View Slide

  26. Por que Kafka?
    ● Retenção
    ● Escalabilidade
    ● Ordem

    View Slide

  27. Por que Kafka?
    ● Reliable Data Delivery
    ○ Dados de várias criticidades
    ● Garantias
    ○ Ordem
    ○ Commits
    ■ Uma vez commitado, dado não será mais perdido
    ■ Somente serão lidos dados commitados

    View Slide

  28. Por que não Kafka?
    ● Reliable Data Delivery
    ○ Acaba gerando muitas arquiteturas ruins
    ● Garantias
    ○ Depende de uma série de configs

    View Slide

  29. Plataforma distribuída de
    streaming
    ● O que é streaming?
    ○ Unbounded == infinite
    ● Streams
    ○ Ordenados
    ○ Imutáveis
    ○ Repetíveis (replayable)

    View Slide

  30. Plataforma distribuída de
    streaming
    ● Request-response: um sistema espera outro
    ● Batch: dados processados de tempos em tempos
    ● Streaming
    ○ Não é necessário espera
    ○ Processamento contínuo

    View Slide

  31. Streaming: conceitos
    ● Tempo
    ○ Event time
    ○ Processing time
    ○ Log append time (tempo no Kafka)
    ● Estado
    ○ Interno: acessado apenas por um sistema
    ○ Externo: disponível para outros sistemas

    View Slide

  32. Streaming: conceitos
    ● Dualidade tabela-stream
    ○ Table: coleção de registros
    ○ Stream: cadeias de eventos que modificam algo
    ● Table != Stream
    ● Tabela pode ser convertida em stream (CDC)
    ● Stream pode ser convertida em tabela (materialização)
    ● Diferentes tipos de redundância

    View Slide

  33. Streaming: diferentes modelos
    ● Single-event processing

    View Slide

  34. Streaming: diferentes modelos
    ● Local state

    View Slide

  35. Streaming: diferentes modelos
    ● Local state
    ● Problemas:
    ○ Estado deve caber em memória
    ○ Persistência
    ○ Rebalanceamento

    View Slide

  36. Streaming: diferentes modelos
    ● Multiphase processing

    View Slide

  37. Streaming: diferentes modelos
    ● Stream-table Join

    View Slide

  38. Streaming: diferentes modelos
    ● Stream-table Join
    ● Problemas:
    ○ Latência
    ○ Escalabilidade

    View Slide

  39. Streaming: diferentes modelos
    ● Stream-table Join

    View Slide

  40. The road to Dataflow

    View Slide

  41. Por onde começamos?
    ● Python
    ● AWS

    View Slide

  42. Por onde começamos?
    ● Opções:
    ○ Airflow + Python
    ○ Amazon EMR
    ■ Spark
    ■ Flink

    View Slide

  43. Por onde começamos?
    ● Descobrimos GCP
    ○ Google Dataflow
    ■ Gerenciado
    ■ Python
    ■ Modelo fácil de programação

    View Slide

  44. Por onde começamos?
    ● Descobrimos GCP
    ○ Google Dataflow
    ■ Gerenciado
    ■ Python (Java)
    ■ Modelo fácil de programação
    ■ Streaming!
    ■ ...outra nuvem

    View Slide

  45. Por onde começamos?
    ● Google Dataflow
    ○ Rápido de aprender
    ○ Escalável
    ○ Zero infra

    View Slide

  46. Por onde começamos?
    ● Google Dataflow
    ○ Rápido de aprender
    ○ Escalável
    ○ Zero infra
    ○ Problemas de escalabilidade
    ■ Outros sistemas sofrendo

    View Slide

  47. Por onde começamos?
    ● Google Dataflow
    ○ Streaming!

    View Slide

  48. Por onde começamos?
    ● Google Dataflow
    ○ Streaming!
    ■ Custo
    ■ Não saber fazer streaming

    View Slide

  49. Por onde começamos?
    ● Google Dataflow
    ○ Batch!
    ■ Default
    ○ Streaming:
    ■ Pipe genérico
    ■ Backup
    ■ Auditorias em “real-time”
    ■ DWs “real-time”
    ○ Batch+Streaming
    ■ Migrações
    ■ DWs “real-time” com histórico

    View Slide

  50. The road to Kafka

    View Slide

  51. Por onde começamos?
    ● Google Pub/Sub
    ○ Barato
    ○ Gerenciado
    ○ Simples
    ○ Libs prontas

    View Slide

  52. Por onde começamos?
    ● Google Pub/Sub
    ○ Barato
    ○ Gerenciado
    ○ Simples
    ○ Libs prontas
    ○ Problemas:
    ■ Latência para AWS
    ■ Ordem
    ○ Não sabíamos usar Mensageria

    View Slide

  53. Por onde começamos?
    ● Requisitos do pipeline de dados
    ○ Pouca infra
    ○ Deploys fáceis para produtores e consumidores
    ■ Desacoplado
    ■ Independente

    View Slide

  54. Por onde começamos?

    View Slide

  55. Por onde começamos?
    ● Apache Kafka
    ○ Baixíssima latência
    ○ Escalável
    ○ Barato

    View Slide

  56. Por onde começamos?
    ● Apache Kafka
    ○ Overhead de Infra
    ○ Curva de aprendizado
    ○ Escalabilidade
    ■ Partições
    ○ Modelos de produção
    ■ Confiável
    ■ Escalável
    ○ Modelos de consumo
    ■ Escalável
    ○ Libs limitadas para PHP

    View Slide

  57. Kafka + Dataflow

    View Slide

  58. Como é hoje?
    ● Apache Kafka
    ○ Principal ferramenta de mensageria
    ● Google Pub/Sub
    ○ Usado para comunicação entre jobs
    ● Google Dataflow
    ○ Principal ferramenta de processamento de dados
    ● Microsserviços em Go
    ○ Principal ferramenta de processamento para sistemas
    ● Kafka Streams
    ○ Ferramenta alternativa de processamento em streaming

    View Slide

  59. Kafka vs Pub/Sub?
    ● Apache Kafka
    ○ Padrão
    ○ Requisito de ordem
    ○ Reprocessamento mais fácil
    ○ Ecossistema
    ● Google Pub/Sub
    ○ Modelo permite retry
    ○ Substitui HTTP Sync

    View Slide

  60. Dataflow vs Go?
    ● Dataflow
    ○ DataEng
    ○ Autoscaling
    ○ Migrações, reprocessamentos
    ○ Replicação de dados
    ● Go
    ○ Backend
    ○ Baixa latência
    ○ Sistemas reativos

    View Slide

  61. Dataflow vs Streams?
    ● Dataflow
    ○ Autoscaling
    ○ Reprocessamento
    ● Streams
    ○ Mais leve
    ○ Entrada e Saída no Kafka

    View Slide

  62. Formato de mensagens
    ● JSON -> Avro
    ● Schema
    ○ ID
    ○ Version
    ○ Source
    ○ Type
    ○ Data

    View Slide

  63. Pipeline de Dados
    ● Event router
    ● Pipeline genérico

    View Slide

  64. Arquitetura Kafka

    View Slide

  65. Demo

    View Slide

  66. That’s all folks
    Bom TUSCA a todos! Raça CAASO!
    Bibliografia
    ● “I Heart Logs” - Jay Kreps
    ● “The Dataflow Model: A Practical Approach to
    Balancing” - Akidau
    ● “Kafka: The Definitive Guide” - Confluent

    View Slide