Slide 1

Slide 1 text

Kafka <3 Dataflow Agilidade, escalabilidade, e ordem

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

Temos vagas: arquivei.com.br/vagas

Slide 6

Slide 6 text

Roadmap ● Dataflow ● Kafka ● Dataflow ● Kafka ● Kafka e Dataflow

Slide 7

Slide 7 text

O que é Dataflow?

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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?

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Windows ● Divisão do dataset para processamento

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Primitivas ● ParDo ● GroupByKey

Slide 16

Slide 16 text

Primitivas ● AssignWindows ● MergeWindows ● GroupByKeyAndWindow

Slide 17

Slide 17 text

Primitivas

Slide 18

Slide 18 text

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)

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

O que é Kafka?

Slide 21

Slide 21 text

Comunicação entre sistemas

Slide 22

Slide 22 text

Comunicação entre sistemas

Slide 23

Slide 23 text

Comunicação entre sistemas

Slide 24

Slide 24 text

Comunicação entre sistemas

Slide 25

Slide 25 text

Ecossistema de Big Data

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

Streaming: diferentes modelos ● Single-event processing

Slide 34

Slide 34 text

Streaming: diferentes modelos ● Local state

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Streaming: diferentes modelos ● Multiphase processing

Slide 37

Slide 37 text

Streaming: diferentes modelos ● Stream-table Join

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

Streaming: diferentes modelos ● Stream-table Join

Slide 40

Slide 40 text

The road to Dataflow

Slide 41

Slide 41 text

Por onde começamos? ● Python ● AWS

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

The road to Kafka

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

Por onde começamos?

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

Kafka + Dataflow

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Pipeline de Dados ● Event router ● Pipeline genérico

Slide 64

Slide 64 text

Arquitetura Kafka

Slide 65

Slide 65 text

Demo

Slide 66

Slide 66 text

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