Pro Yearly is on sale from $80 to $50! »

Agilidade, escalabilidade, e ordem com Kafka e Dataflow

B2519015997dff04abe2568ebb2cf729?s=47 opensanca
November 13, 2019

Agilidade, escalabilidade, e ordem com Kafka e Dataflow

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

B2519015997dff04abe2568ebb2cf729?s=128

opensanca

November 13, 2019
Tweet

Transcript

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

  2. Eu • Engenheiro de Dados na Arquivei • CAASO ◦

    BCC 012 ◦ MECAI 017
  3. Eu • Engenheiro de Dados na Arquivei • CAASO ◦

    BCC 012 ◦ MECAI 017 • Corote pêssego - ok • Tauber e Lokal - não ok
  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
  5. Temos vagas: arquivei.com.br/vagas

  6. Roadmap • Dataflow • Kafka • Dataflow • Kafka •

    Kafka e Dataflow
  7. O que é Dataflow?

  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
  9. Dataflow model • Akidau, 2015 • Propõe um modelo de

    programação simples para processamento de dados ◦ Event time ◦ Processing time
  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?
  11. Streaming vs Batch • Streaming -> Unbounded • Batch ->

    Bounded • Unbounded: processado em batch systems • Streaming systems: capazes de processar batches
  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
  13. Windows • Divisão do dataset para processamento

  14. Watermark • Limite inferior de todos os event times processados

    pelo pipeline
  15. Primitivas • ParDo • GroupByKey

  16. Primitivas • AssignWindows • MergeWindows • GroupByKeyAndWindow

  17. Primitivas

  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)
  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
  20. O que é Kafka?

  21. Comunicação entre sistemas

  22. Comunicação entre sistemas

  23. Comunicação entre sistemas

  24. Comunicação entre sistemas

  25. Ecossistema de Big Data

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

  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
  28. Por que não Kafka? • Reliable Data Delivery ◦ Acaba

    gerando muitas arquiteturas ruins • Garantias ◦ Depende de uma série de configs
  29. Plataforma distribuída de streaming • O que é streaming? ◦

    Unbounded == infinite • Streams ◦ Ordenados ◦ Imutáveis ◦ Repetíveis (replayable)
  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
  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
  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
  33. Streaming: diferentes modelos • Single-event processing

  34. Streaming: diferentes modelos • Local state

  35. Streaming: diferentes modelos • Local state • Problemas: ◦ Estado

    deve caber em memória ◦ Persistência ◦ Rebalanceamento
  36. Streaming: diferentes modelos • Multiphase processing

  37. Streaming: diferentes modelos • Stream-table Join

  38. Streaming: diferentes modelos • Stream-table Join • Problemas: ◦ Latência

    ◦ Escalabilidade
  39. Streaming: diferentes modelos • Stream-table Join

  40. The road to Dataflow

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

  42. Por onde começamos? • Opções: ◦ Airflow + Python ◦

    Amazon EMR ▪ Spark ▪ Flink
  43. Por onde começamos? • Descobrimos GCP ◦ Google Dataflow ▪

    Gerenciado ▪ Python ▪ Modelo fácil de programação
  44. Por onde começamos? • Descobrimos GCP ◦ Google Dataflow ▪

    Gerenciado ▪ Python (Java) ▪ Modelo fácil de programação ▪ Streaming! ▪ ...outra nuvem
  45. Por onde começamos? • Google Dataflow ◦ Rápido de aprender

    ◦ Escalável ◦ Zero infra
  46. Por onde começamos? • Google Dataflow ◦ Rápido de aprender

    ◦ Escalável ◦ Zero infra ◦ Problemas de escalabilidade ▪ Outros sistemas sofrendo
  47. Por onde começamos? • Google Dataflow ◦ Streaming!

  48. Por onde começamos? • Google Dataflow ◦ Streaming! ▪ Custo

    ▪ Não saber fazer streaming
  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
  50. The road to Kafka

  51. Por onde começamos? • Google Pub/Sub ◦ Barato ◦ Gerenciado

    ◦ Simples ◦ Libs prontas
  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
  53. Por onde começamos? • Requisitos do pipeline de dados ◦

    Pouca infra ◦ Deploys fáceis para produtores e consumidores ▪ Desacoplado ▪ Independente
  54. Por onde começamos?

  55. Por onde começamos? • Apache Kafka ◦ Baixíssima latência ◦

    Escalável ◦ Barato
  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
  57. Kafka + Dataflow

  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
  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
  60. Dataflow vs Go? • Dataflow ◦ DataEng ◦ Autoscaling ◦

    Migrações, reprocessamentos ◦ Replicação de dados • Go ◦ Backend ◦ Baixa latência ◦ Sistemas reativos
  61. Dataflow vs Streams? • Dataflow ◦ Autoscaling ◦ Reprocessamento •

    Streams ◦ Mais leve ◦ Entrada e Saída no Kafka
  62. Formato de mensagens • JSON -> Avro • Schema ◦

    ID ◦ Version ◦ Source ◦ Type ◦ Data
  63. Pipeline de Dados • Event router • Pipeline genérico

  64. Arquitetura Kafka

  65. Demo

  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