250 likes | 258 Views
Do PostgreSQL ao data lake. Caso de uso no iFood de streaming de dados com Debezium. Fluxo de dados para o Data lake v1. Problemas?. - cada microsserviço tem seu próprio banco de dados - t empo de conclusão do pg_dump sempre aumenta - a simplicidade foi boa para começar , mas…
E N D
Do PostgreSQL ao data lake Caso de uso no iFood de streaming de dados com Debezium
Problemas? - cadamicrosserviço tem seu próprio banco de dados - tempo de conclusão do pg_dump sempre aumenta - a simplicidadefoi boa para começar, mas… - …analistasprecisam dos dados no café da manhã, não no almoço
Kafka, Confluent & Debezium - Kafka (kafka.apache.org) • Projeto do LinkedIn para dados em tempo real - Confluent (confluent.io) • Plataforma community contém Connectors, Schema Registry e RestAPI • “Fácil de configurar” • Debezium (debezium.io) • Utiliza CDC (change data capture) do banco de dados • Coleta dados armazenados no WAL (PostgreSQL) semelhante a replicação lógica • Databricks • Plataforma para se trabalhar com Spark, gerenciamento de clusters
Porque essa solução? • a solução não afetaria código ou fluxo de dados de produção • não seria necessário envolver os DEVs • utilizando Avro, facilitaria a vida da equipe de Data (Databricks) • solução “fácil” para um DBA • Chance de utilizar Kafka, streaming de dados, message broker e KSQL
Problemas com essa solução? • Debezium nunca foi utilizado e é plugado no primário • necessário instalar pacotes no servidor de banco de dados • oportunidade de reiniciar o servidor(ou errar) igual a zero • janela de manutenção pequena
Nova Solução • Ter um passo intermediário entre banco de dados de produção e Debezium (Kafka Connect) • Utilizar replicação lógica nativa do PostgreSQL
Componentes do cluster de Kafka - Zookeeper, monitora os nós do cluster do Kafka (broker), coordena a distribuição dos processos entre nós - Kafka, responsável por envio distribuído de mensagens em tempo real - Schema Registry, armazena/versiona metadata de schemas Avro - Rest API, permite produzir, consumir e administrar o cluster do Kafka
Componentes do cluster de Kafka • Kafka Connect, um framework para realização de streaming de dados para dentro ou para fora do Kafka. • Conectores de 2 tipos, para enviar dados ao Kafka(Debezium - source connector) e para extrair dados( S3 - sink connector).
Preparando o ambiente • Instalação & configuração no Google Cloud • Zookeeper, Kafka (broker), Schema Registry, Rest API, Kafka Connect • PostgreSQL (Decoderbufs) • Debezium • S3 (sink connector) • Passo a passo em medium.com/@singaretti • Streaming de dados (do PostgreSQL) utilizando Kafka|Debezium (v2)
Preparando o ambiente • Instalação & configuração no Google Cloud • Zookeeper, Kafka (broker), Schema Registry, Rest API, Kafka Connect • PostgreSQL (Decoderbufs) • Debezium • S3 (sink connector) • Passo a passo em medium.com/@singaretti • Streaming de dados (do PostgreSQL) utilizando Kafka|Debezium (v2)
PostgreSQL (Decoderbufs) • Decodificação lógica do Write-Ahead Logging (WAL) do PostgreSQL • Configuração de váriasdependências no servidor de banco de dados • Utilizaosprojetos do PostGIS e Protobuf-c • AlternativaaoDecoderbufsé wal2json, em RDS PostgreSQL da AWS
Debezium • Conectordepende do Kafka Connect configurado • Cria slots de replicação no PostgreSQL, monitoramentoéfácil de seraplicado (replicaçãológica) • Existeumagrandequantidade de parametros para seremutilizados no banco de dados, porexemplo, streaming de eventos a nível de banco, schema outabela, e conceitos de whitelist e blacklist, que épossívelpermitir/negarapenas um objeto • gerenciamentoatravés de REST API com curl do Kafka Connect
Debezium • Parâmetros de conexão: "connector.class": "io.debezium.connector.postgresql.PostgresConnector" "database.hostname": "dns/ip_do_servidor" "database.user": "usuario_do_banco_de_dados" "database.dbname" : "nome_do_seu_banco_de_dados" "database.server.name": "nome_para_compor_o_nome_do_topico" "schema.whitelist": "schema_do_seu_banco_de_dados" "plugin.name": "decoderbufs" (ou wal2json) "snapshot.mode": "initial" (ou initial_only / never) "slot.name": "slot_name no postgresql"
S3 (sink connector) • Conector já embutido no Kafka Connect distribuído pela Confluent • Envia todas as mensagens de um determinado tópico para o S3 criando um diretório no bucket com o nome do tópico • É possível segmentar diretórios por data
Demonstração • Inserindo dados no PostgreSQL e visualizando no tópico do Kafka
Ganhos com o novo fluxo • Redução de processamento (dump+envio) do data lake de 80% • Possibilidade de analisar dados H-1 • Kafka Connect com diversos plugins(sink) que permite outros destinos • KSQL, agregador de dados em tempo real a partir de tópicos do Kafka • Iniciar novos projetos com Kafka
Obrigado! Paulo Singaretti medium.com/@singaretti linkedin.com/in/singaretti