Slide 1

Slide 1 text

Redescobrindo o papel do apache kafka® em arquiteturas de dados modernas @riferrei | @confluentinc | @bdwspbr

Slide 2

Slide 2 text

Quem sou eu?

Slide 3

Slide 3 text

@riferrei | @confluentinc | @itau

Slide 4

Slide 4 text

Developer advocate

Slide 5

Slide 5 text

@riferrei | @confluentinc | @itau @riferrei @riferrei @riferrei https://riferrei.net [email protected]

Slide 6

Slide 6 text

@riferrei | @confluentinc | @itau O que é apache kafka?

Slide 7

Slide 7 text

@riferrei | @confluentinc | @itau O apache kafka é um distributed streaming platform

Slide 8

Slide 8 text

@riferrei | @confluentinc | @itau

Slide 9

Slide 9 text

@riferrei | @confluentinc | @itau

Slide 10

Slide 10 text

@riferrei | @confluentinc | @itau

Slide 11

Slide 11 text

@riferrei | @confluentinc | @itau O que são streams?

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

@riferrei | @confluentinc | @itau Streams são eventos infinitos

Slide 14

Slide 14 text

@riferrei | @confluentinc | @itau Um distributed streaming platform é usado para unificar armazenamento e computação

Slide 15

Slide 15 text

@riferrei | @confluentinc | @itau

Slide 16

Slide 16 text

Vamos voltar no tempo?

Slide 17

Slide 17 text

Banco de dados há 30 anos atrás

Slide 18

Slide 18 text

Desenvolvedor cheio de expectativas Banco de dados hoje em dia…

Slide 19

Slide 19 text

@riferrei | @confluentinc | @itau Qual o Problema dos bancos de dados?

Slide 20

Slide 20 text

Muito limitado! Faz muita lambança!

Slide 21

Slide 21 text

Limitado? Tá querendo me sacanear?

Slide 22

Slide 22 text

Por quê você acha que a gente faz cargas batch para o dwh? Sim, limitado.

Slide 23

Slide 23 text

lambança Linha de negócio 01 Linha de negócio 02 Linha de negócio 03

Slide 24

Slide 24 text

@riferrei | @confluentinc | @itau Workarounds criados pela indústria

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

nosql

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

@riferrei | @confluentinc | @itau Resultado…

Slide 30

Slide 30 text

lambança Linha de negócio 01 Linha de negócio 02 Linha de negócio 03

Slide 31

Slide 31 text

Vamos voltar no tempo?

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Jay kreps Neha narkhede Jun rao

Slide 34

Slide 34 text

Banco de dados Aplicação web Aplicação web Primeira versão do linkedin

Slide 35

Slide 35 text

@riferrei | @confluentinc | @itau Evento estado > Eu Mudei meu empredo da oracle para a confluent Eu trabalho na confluent

Slide 36

Slide 36 text

@riferrei | @confluentinc | @itau Mudança de emprego Máquina de sugestões Sistema de buscas Serviço de email

Slide 37

Slide 37 text

@riferrei | @confluentinc | @itau SQL SQL SQL Máquina de sugestões Sistema de buscas Serviço de email Bancos de dados são bons para guardar estado Banco de dados LOG

Slide 38

Slide 38 text

@riferrei | @confluentinc | @itau Mas não lidam muito bem com grandes volumes Banco de dados 1000x mais volume Eventos não-transacionais Eventos transacionais LOG

Slide 39

Slide 39 text

@riferrei | @confluentinc | @itau Tracking de usuários Aplicações de logs Métricas operacionais banco key/value banco key/value Banco de dados sql MICROSERviços ... HADOOP Elastic search grafana DATA WAREHOUSE REC. ENGINE SEARCH SECURITY EMAIL SOCIAL GRAPH

Slide 40

Slide 40 text

@riferrei | @confluentinc | @itau conclusão: o uso de bancos de dados não era apropriado dado o problema a ser resolvido!

Slide 41

Slide 41 text

@riferrei | @confluentinc | @itau LOG Tracking de usuários Aplicações de logs Métricas operacionais banco key/value banco key/value Banco de dados sql MICROSERviços ... HADOOP Elastic search grafana DATA WAREHOUSE REC. ENGINE SEARCH SECURITY EMAIL SOCIAL GRAPH

Slide 42

Slide 42 text

@riferrei | @confluentinc | @itau Por quê não usar mensageria?

Slide 43

Slide 43 text

@riferrei | @confluentinc | @itau LOG Tracking de usuários Aplicações de logs Métricas operacionais banco key/value banco key/value Banco de dados sql MICROSERviços ... HADOOP Elastic search grafana DATA WAREHOUSE REC. ENGINE SEARCH SECURITY EMAIL SOCIAL GRAPH Mensageria também não lida bem Com volume

Slide 44

Slide 44 text

@riferrei | @confluentinc | @itau LOG Tracking de usuários Aplicações de logs Métricas operacionais banco key/value banco key/value Banco de dados sql MICROSERviços ... HADOOP Elastic search grafana DATA WAREHOUSE REC. ENGINE SEARCH SECURITY EMAIL SOCIAL GRAPH Mensageria não suporta persistência direito

Slide 45

Slide 45 text

45 banco de dados mensageria Batch Caro de manter Lento demais Difícil de escalar Não têm durabilidade Não têm persistência não possui ordem Não possui replay transacional durável Persistente Mantêm ordem replay rápido (baixa latência) O que está acontecendo agora? O que aconteceu no passado?

Slide 46

Slide 46 text

46 banco de dados mensageria Batch Caro de manter Lento demais Difícil de escalar Não têm durabilidade Não têm persistência não possui ordem Não possui replay Highly Scalable Durable Persistent Ordered Fast (Low Latency) O que está acontecendo agora? O que aconteceu no passado? transacional durável Persistente Mantêm ordem replay rápido (baixa latência) distributed streaming platform

Slide 47

Slide 47 text

@riferrei | @confluentinc | @itau O apache kafka é um distributed streaming platform

Slide 48

Slide 48 text

@riferrei | @confluentinc | @itau Por quê nínguem nunca me explicou isso antes?

Slide 49

Slide 49 text

@riferrei | @confluentinc | @itau Você nunca entenderá o kafka Se você focar APENAS em mensageria

Slide 50

Slide 50 text

50 01 Mensageria bem feita 02 Processamento de eventos 03 Sistema de armazenamento

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

@riferrei | @confluentinc | @itau 01 Mensageria bem feita

Slide 53

Slide 53 text

“The truth is the log. The database is a cache of a subset of the log.” — pat helland Immutability changes everything http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf

Slide 54

Slide 54 text

@riferrei | @confluentinc | @itau Banco de dados 0 1 2 3 4 5 6 7 8 LOG leituras escritas DESTINo sistema A (tempo = 2) DESTINo sistema b (tempo = 6) Banco de dados invertido: logs passam a ser mais importantes que tabelas

Slide 55

Slide 55 text

@riferrei | @confluentinc | @itau novo registro Registro antigo offset

Slide 56

Slide 56 text

@riferrei | @confluentinc | @itau Novo registro Registro antigo offset

Slide 57

Slide 57 text

@riferrei | @confluentinc | @itau BROKER 1 BROKER 2 BROKER 3 BROKER 4 TOPIC 1-PART 1 TOPIC 2-PART 3 TOPIC 3-PART 1 TOPIC 2-PART 1 TOPIC 5-PART 1 TOPIC 6-PART 1 TOPIC 1-PART 2 TOPIC 2-PART 4 TOPIC 3-PART 2 TOPIC 2-PART 2 TOPIC 5-PART 2 TOPIC 6-PART 2 CONSUmidor CONSUMidor CONSUmidor PRODUtor PRODutor PRODUtor Escalabilidade através de particionamento

Slide 58

Slide 58 text

@riferrei | @confluentinc | @itau Maior volume de dados Graças ao uso Do page cache do Sistema operacional

Slide 59

Slide 59 text

@riferrei | @confluentinc | @itau Menos uso de cpu e heap Através da api sendfile do linux

Slide 60

Slide 60 text

@riferrei | @confluentinc | @itau 02 processamento de eventos

Slide 61

Slide 61 text

http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf Você realmente acha que você faz consultas em tabelas?

Slide 62

Slide 62 text

Dualidade entre streams e tabelas {"user":"riferrei","score":"1001"} {"user":"riferrei","score":"1002"} {"user":"riferrei","score":"1003"} {"user":"riferrei","score":"1004"} {"user":"riferrei","score":"1005"} {"user":"riferrei","score":"1005"} stream tabela

Slide 63

Slide 63 text

@riferrei | @confluentinc | @itau O que é processamento de eventos? CREATE STREAM possible_fraud AS SELECT card_number, count(*) FROM authorization_attempts WINDOW TUMBLING (SIZE 5 MINUTE) GROUP BY card_number HAVING count(*) > 3; Tentativa de fraude possível fraude tópico tópico

Slide 64

Slide 64 text

@riferrei | @confluentinc | @itau 03 Sistema de armazenamento

Slide 65

Slide 65 text

É… mas só um banco de dados consegue prover acid…

Slide 66

Slide 66 text

A C I D Transações precisam ser ou tudo ou nada

Slide 67

Slide 67 text

@riferrei | @confluentinc | @itau Api de transações para produtores Níveis de isolamento para consumidores aplicação

Slide 68

Slide 68 text

@riferrei | @confluentinc | @itau A C I D Reinforçar invariantes que garantam consistência

Slide 69

Slide 69 text

@riferrei | @confluentinc | @itau Propriedades do Produtor enable.idempotence=true max.inflight.requests.per.connection=1 acks = “all” retries > 0 (preferably MAX_INT) (pid, seq) [payload] (100, 1) {key: 1234, data: abcd} - offset 3345 (100, 1) {key: 1234, data: abcd} - rejected, ack re-sent (100, 2) {key: 5678, data: efgh} - offset 3346 Sem duplicação!

Slide 70

Slide 70 text

@riferrei | @confluentinc | @itau Eventos em ordem por partição

Slide 71

Slide 71 text

@riferrei | @confluentinc | @itau Schemas são apis

Slide 72

Slide 72 text

@riferrei | @confluentinc | @itau Diga olá ao schema registry fonte destino

Slide 73

Slide 73 text

@riferrei | @confluentinc | @itau A C I D Garantir acesso serial mesmo quando threads executam de forma concorrente

Slide 74

Slide 74 text

@riferrei | @confluentinc | @itau Produzindo registros sem chave aplicação Registros serão escritos em várias partições diferentes

Slide 75

Slide 75 text

@riferrei | @confluentinc | @itau Produzindo registros com chave Aplicação a Aplicação b Aplicação c Aplicação d

Slide 76

Slide 76 text

@riferrei | @confluentinc | @itau A C I D Dados commitados devem permanecer assim mesmo em caso de falhas

Slide 77

Slide 77 text

@riferrei | @confluentinc | @itau Lembra disso?

Slide 78

Slide 78 text

@riferrei | @confluentinc | @itau Tolerância a falhas via replicação

Slide 79

Slide 79 text

@riferrei | @confluentinc | @itau obrigado

Slide 80

Slide 80 text

@riferrei | @confluentinc | @itau