Save 37% off PRO during our Black Friday Sale! »

Meetup São Paulo, Outubro 2019

Meetup São Paulo, Outubro 2019

02ff2dde723b6e26f4ef03ee6b3f6eb9?s=128

Ricardo Ferreira

October 30, 2019
Tweet

Transcript

  1. Tudo o que você gostaria de saber sobre o kafka®

    (mas sempre teve medo de perguntar) @riferrei | @confluentinc | #Kafkameetup
  2. @riferrei | @confluentinc | @itau Quem sou eu?

  3. @riferrei | @confluentinc | @itau

  4. None
  5. Sobre Mim @rmoff @riferrei @tlberglund @gamussa

  6. @riferrei | @confluentinc | @itau @riferrei @riferrei @riferrei https://riferrei.net

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

  8. @riferrei | @confluentinc | @itau O apache kafka é um

    distributed streaming platform
  9. @riferrei | @confluentinc | @itau

  10. @riferrei | @confluentinc | @itau

  11. @riferrei | @confluentinc | @itau

  12. Vamos voltar no tempo?

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

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

  15. Cara, Você está me envergonhando na frente dos gerentes de

    projeto…
  16. @riferrei | @confluentinc | @itau Qual o Problema dos bancos

    de dados?
  17. Muito limitado! Faz muita lambança!

  18. Limitado? Tá querendo me sacanear?

  19. Por quê você acha que a gente faz cargas batch

    para o dwh? Sim, limitado.
  20. lambança Linha de negócio 01 Linha de negócio 02 Linha

    de negócio 03
  21. Eita que diagrama bunito... Um Monte de licença pra vender!

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

  23. None
  24. nosql

  25. None
  26. @riferrei | @confluentinc | @itau Resultado…

  27. lambança Linha de negócio 01 Linha de negócio 02 Linha

    de negócio 03
  28. Vamos voltar no tempo?

  29. None
  30. Jay kreps Neha narkhede Jun rao

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

    linkedin
  32. @riferrei | @confluentinc | @itau Evento estado >

  33. @riferrei | @confluentinc | @itau Evento estado > Eu Mudei

    meu empredo da oracle para a confluent Eu trabalho na confluent
  34. @riferrei | @confluentinc | @itau Mudança de emprego Máquina de

    sugestões Sistema de buscas Serviço de email
  35. @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
  36. @riferrei | @confluentinc | @itau Eventos não-transacionais Eventos transacionais 0.1%

    99.9%
  37. @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
  38. @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
  39. @riferrei | @confluentinc | @itau conclusão: o uso de bancos

    de dados não era apropriado dado o problema a ser resolvido!
  40. @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
  41. @riferrei | @confluentinc | @itau Por quê não usar mensageria?

  42. @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
  43. @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
  44. 44 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?
  45. 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 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
  46. @riferrei | @confluentinc | @itau O apache kafka é um

    distributed streaming platform
  47. @riferrei | @confluentinc | @itau Por quê nínguem nunca me

    explicou isso antes?
  48. @riferrei | @confluentinc | @itau Você nunca entenderá o kafka

    Se você focar APENAS em mensageria
  49. 49 01 Mensageria bem feita 02 Processamento de eventos 03

    Sistema de armazenamento
  50. @riferrei | @confluentinc | @itau 01 Mensageria bem feita

  51. “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
  52. @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
  53. @riferrei | @confluentinc | @itau 0 1 2 3 4

    5 6 7 8 leituras escritas Sistema a Sistema b Gerenciamento de offsets por consumidor
  54. @riferrei | @confluentinc | @itau novo registro Registro antigo offset

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

  56. @riferrei | @confluentinc | @itau pergunta: por quê certos consumer

    groups são deletados depois de um tempo?
  57. @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
  58. @riferrei | @confluentinc | @itau pergunta: o kafka fica mais

    lento se eu criar muitas partições?
  59. @riferrei | @confluentinc | @itau pergunta: por quê o apache

    kafka é tão rápido?
  60. @riferrei | @confluentinc | @itau Maior volume de dados Graças

    ao uso Do page cache do Sistema operacional
  61. @riferrei | @confluentinc | @itau Menos uso de cpu e

    heap Através da api sendfile do linux
  62. @riferrei | @confluentinc | @itau 02 processamento de eventos

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

  64. 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
  65. @riferrei | @confluentinc | @itau O que é processamento de

    eventos? Tentativa de fraude possível fraude ?
  66. @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
  67. None
  68. @riferrei | @confluentinc | @itau pergunta: qual a regra pra

    definir quando um tópico deve ser persistente?
  69. @riferrei | @confluentinc | @itau 03 Sistema de armazenamento

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

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

    nada
  72. @riferrei | @confluentinc | @itau Api de transações para produtores

    Níveis de isolamento para consumidores aplicação
  73. @riferrei | @confluentinc | @itau A C I D Reinforçar

    invariantes que garantam consistência
  74. @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!
  75. @riferrei | @confluentinc | @itau Eventos em ordem por partição

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

  77. @riferrei | @confluentinc | @itau Diga olá ao schema registry

    fonte destino
  78. @riferrei | @confluentinc | @itau A C I D Garantir

    acesso serial mesmo quando threads executam de forma concorrente
  79. @riferrei | @confluentinc | @itau Produzindo registros sem chave aplicação

    Registros serão escritos em várias partições diferentes
  80. @riferrei | @confluentinc | @itau Produzindo registros com chave Aplicação

    a Aplicação b Aplicação c Aplicação d
  81. @riferrei | @confluentinc | @itau pergunta: é uma boa prática

    sempre usar chaves para escrever nos tópicos?
  82. @riferrei | @confluentinc | @itau A C I D Dados

    commitados devem permanecer assim mesmo em caso de falhas
  83. @riferrei | @confluentinc | @itau Lembra disso?

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

  85. @riferrei | @confluentinc | @itau obrigado