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

Redescobrindo o Papel do Apache Kafka® em Arqui...

Redescobrindo o Papel do Apache Kafka® em Arquiteturas de Dados Modernas

Apresentação realizada por Ricardo Ferreira no Big Data Week São Paulo 2019 [http://sao-paulo.bigdataweek.com].

O uso de distributed streaming platforms está se tornando cada vez mais popular entre os desenvolvedores, mas o que é exatamente isso? Parte sistema de mensageria no estilo Publish/Subscribe, parte persistência distribuída, parte máquina de processamento de eventos “tipo CEP”, o uso desse tipo de tecnologia oferece uma perspectiva totalmente nova sobre como desenvolvedores devem capturar, armazenar, e processar dados. Esta palestra irá explicar o que são distributed streaming platforms e qual sua relevância em arquiteturas de dados modernas. Serão discutidos cenários onde essa tecnologia pode ser implementada, como isso é feito usando o Apache Kafka e como ele endereça questões mais complexas como ACID. Uma demonstração ao vivo será feita para solidificar o entendimento.

Big Data Week São Paulo

November 02, 2019
Tweet

More Decks by Big Data Week São Paulo

Other Decks in Technology

Transcript

  1. Redescobrindo o papel do apache kafka® em arquiteturas de dados

    modernas @riferrei | @confluentinc | @bdwspbr
  2. @riferrei | @confluentinc | @itau Evento estado > Eu Mudei

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

    sugestões Sistema de buscas Serviço de email
  4. @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
  5. @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
  6. @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
  7. @riferrei | @confluentinc | @itau conclusão: o uso de bancos

    de dados não era apropriado dado o problema a ser resolvido!
  8. @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
  9. @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
  10. @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
  11. 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?
  12. 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
  13. “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
  14. @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
  15. @riferrei | @confluentinc | @itau 0 1 2 3 4

    5 6 7 8 leituras escritas Sistema a Sistema b Gerenciamento de offsets por consumidor
  16. @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 CONSUMER CONSUMER CONSUMER PRODUCER PRODUCER PRODUCER Escalabilidade através de particionamento
  17. @riferrei | @confluentinc | @itau Maior volume de dados Graças

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

    heap Através da api sendfile do linux
  19. @riferrei | @confluentinc | @itau O que é processamento de

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

    definir quando um tópico deve ser persistente?
  22. @riferrei | @confluentinc | @itau Api de transações para produtores

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

    invariantes que garantam consistência
  24. @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!
  25. @riferrei | @confluentinc | @itau A C I D Garantir

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

    Registros serão escritos em várias partições diferentes
  27. @riferrei | @confluentinc | @itau A C I D Dados

    commitados devem permanecer assim mesmo em caso de falhas