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

Redescobrindo o Papel do Apache Kafka em Arquiteturas de Dados Modernas

Redescobrindo o Papel do Apache Kafka em Arquiteturas de Dados Modernas

Apresentação feita na conferência Big Data Week (edição São Paulo) em 02 de Novembro de 2019.

http://sao-paulo.bigdataweek.com/speaker/ricardo-ferreira

Ricardo Ferreira

November 02, 2019
Tweet

More Decks by Ricardo Ferreira

Other Decks in Programming

Transcript

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

    View full-size slide

  2. Quem sou eu?

    View full-size slide

  3. @riferrei | @confluentinc | @itau

    View full-size slide

  4. Developer
    advocate

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. @riferrei | @confluentinc | @itau

    View full-size slide

  9. @riferrei | @confluentinc | @itau

    View full-size slide

  10. @riferrei | @confluentinc | @itau

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  14. @riferrei | @confluentinc | @itau

    View full-size slide

  15. Vamos voltar
    no tempo?

    View full-size slide

  16. Banco de dados
    há 30 anos atrás

    View full-size slide

  17. Desenvolvedor cheio
    de expectativas
    Banco de dados
    hoje em dia…

    View full-size slide

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

    View full-size slide

  19. Muito
    limitado!
    Faz muita
    lambança!

    View full-size slide

  20. Limitado?
    Tá querendo
    me sacanear?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  24. @riferrei | @confluentinc | @itau
    Resultado…

    View full-size slide

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

    View full-size slide

  26. Vamos voltar
    no tempo?

    View full-size slide

  27. Jay
    kreps
    Neha
    narkhede
    Jun
    rao

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  31. @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

    View full-size slide

  32. @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

    View full-size slide

  33. @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

    View full-size slide

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

    View full-size slide

  35. @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

    View full-size slide

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

    View full-size slide

  37. @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

    View full-size slide

  38. @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

    View full-size slide

  39. 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?

    View full-size slide

  40. 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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  46. “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

    View full-size slide

  47. @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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  50. @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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  55. 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

    View full-size slide

  56. @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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  62. @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!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  70. @riferrei | @confluentinc | @itau
    Lembra
    disso?

    View full-size slide

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

    View full-size slide

  72. @riferrei | @confluentinc | @itau
    obrigado

    View full-size slide

  73. @riferrei | @confluentinc | @itau

    View full-size slide