Como Migrar PostgreSQL para MongoDB com Confluent Kafka
Avalie esse Tutorial
No mundo orientado a dados de hoje, as empresas estão procurando continuamente maneiras Inovadoras de aproveitar todo o potencial de seus dados. Um aspecto crítico dessa viagem envolve a migração de dados – o processo de transferência de dados de um sistema de banco de dados para outro, geralmente impulsionado pela evolução das necessidades comerciais, dos requisitos de escalabilidade ou do destino de novas tecnologias.
Nesta era de transformação digital, onde agilidade e escalabilidade são fundamentais, as organizações estão recorrendo cada vez mais a bancos de dados NoSQL, como o MongoDB, por sua capacidade de lidar com dados não estruturados ou semiestruturados em escala. Por outro lado, o relational database como o PostgreSQL são confiáveis há muito tempo por sua robustez e suporte a dados estruturados.
À medida que as empresas se esforçam para encontrar o equilíbrio certo entre os mundos estruturados e não estruturados dos dados, surge a pergunta: como migrar sem problemas de um banco de dados relacional como o PostgreSQL para o modelo flexível orientado a documentos do MongoDB e, ao mesmo tempo, garantir a integridade dos dados, o mínimo de tempo de inatividade e sincronização eficiente?
A resposta está em uma abordagem que combina o poder do Confluent Kafka, uma plataforma de streaming distribuída, com a agilidade do MongoDB. Neste artigo, exploraremos a arte e a ciência da migração do PostgreSQL para o MongoDB Atlas, aproveitando o Confluent Kafka como nossa ponte de transmissão de dados. Vamos nos aprofundar no tutorial passo a passo que pode tornar essa jornada de transformação um sucesso, abrindo novas possibilidades para suas iniciativas orientadas por dados.
O Apache Kafka é uma plataforma de streaming distribuída de código aberto desenvolvida pela Apache Software Server 2016 , projetada para lidar com fluxos de dados em tempo real.
Para entender o Kafka, visualize um sistema postal concorrido em uma cidade alvoroçada. Nesta cidade, existem inúmeras empresas e indivíduos enviando pacotes e cartas uns aos outros, e é essencial que essas mensagens sejam entregues de forma rápida e confiável.
O Apache Kafka é como o ponto central deste sistema postal, mas não é um ponto comum; é um hub supereficiente de alta velocidade com uma memória que nunca esquece. Quando alguém envia uma mensagem (dados) para o Kafka, ela não é entregue imediatamente. Em vez disso, ele é armazenado temporariamente na memória do Kafka. As mensagens no Kafka não são apenas entregas únicas. Eles podem ser lidos e processados por várias partes. Imagine se cada pacote ou letra enviada pelo sistema postal tivesse uma cópia disponível para quem a quisesse. Este é o conceito central do Kafka: é uma plataforma de streaming de mensagens distribuída, altamente escalável e tolerante a falhas.
Desde a manutenção de informações de estoque em tempo real para e-commerce até o suporte ao monitoramento de pacientes em tempo real, o Kafka tem diversos casos de uso de negócios em diferentes setores e pode ser usado para agregação e análise de registros, provisionamento de eventos, análise em tempo real, integração de dados etc. .
Na mesma similaridade do sistema postal, o sistema coleta e organiza suas correspondências e pacotes em diferentes seções e os organiza em compartimentos para cada tipo de item. Kafka faz o mesmo. As mensagens que recebe do produtor de dados são dispostas e organizadas em tópicos do Kafka. Os tópicos do Kafka são como caixas de entrada diferentes onde são colocadas mensagens com um tema semelhante, e vários programas podem enviar e receber essas mensagens para trocar informações. Isso ajuda a manter os dados bem organizados e garante que as pessoas ou sistemas certos possam acessar as informações de que precisam no tópico relevante.
Os conectores Kafka são como caixas de correio especiais que formatam e preparam letras (dados) de uma forma que o Kafka possa entender, facilitando o fluxo de dados entre diferentes sistemas. Digamos que o emissor (sistema) queira enviar uma letra (dados) para o receptor (outro sistema) usando nosso sistema postal (Kafka). Em vez de apenas colocar a correspondência na caixa de correspondência normal, o remetente a coloca em uma caixa de diálogo de connector especial fora de sua casa. Esta caixa de correspondência do connector sabe como formatar a letra corretamente. Então, os conectores praticamente agem como uma ponte que permite o fluxo de dados entre o Kafka e vários outros sistemas de dados.
A Confluent é uma empresa que cria ferramentas e serviços. Ela criou ferramentas e serviços para o Apache Kafka para torná-lo mais robusto e rico em recursos. É como trabalhar com uma agência postal mais avançada que não apenas recebe e entrega cartas, mas também oferece serviços adicionais, como correspondência certificada, rastreamento e manuseio de pacotes. A migração neste artigo é feita usando o Confluent Kafka por meio da interface de usuário do navegador.
Para começar, você pode configurar uma conta no Confluent Kafka registrando-se no site da Confluent Cloud. Você pode se inscrever com sua conta de e-mail ou usando o GitHub.
Depois de fazer login, a página inicial é assim:
Essa conta gratuita vem com créditos gratuitos no valor de $400 que você pode usar para utilizar os recursos do Confluent Cloud. Se o tamanho do seu banco de dados for pequeno, sua migração também poderá ser concluída dentro desse limite de crédito gratuito. Se você Go para a seção de faturamento, poderá ver os detalhes sobre os créditos.
Para criar um novo cluster, tópicos e conectores para sua migração, clique na guia Ambientes no menu lateral e crie um novo ambiente e cluster.
Você pode selecionar o tipo de cluster. Selecione o tipo "basic " que é o nível gratuito com configuração básica. Se quiser ter uma configuração mais alta para o cluster, você pode selecionar os tipos de cluster “standard”, “enterprise,” ou “dedicated” que têm maior SLA de armazenamento, partição e tempo de atividade, respectivamente, com taxas horárias.
Em seguida, você pode selecionar a região/zona em que seu cluster deve ser implantado junto com o provedor de nuvem desejado para seu cluster (AWS, GCP ou Azure). O pré-requisito para que sua migração de dados funcione por meio de conectores Kafka é que o Kafka onde você cria os conectores esteja na mesma região que o MongoDB Atlas cluster para o qual você migrará seus dados PostgreSQL.
Em seguida, você pode fornecer suas informações de pagamento e iniciar seu cluster.
Depois que seu cluster é iniciado, essa é a aparência do menu do cluster, com opções para ter uma visão geral do cluster e criar tópicos e conectores, entre outros recursos.
Com isso, estamos prontos com a configuração básica do Kafka para migrar seus dados do PostgreSQL para o MongoDB Atlas.
Para este exemplo passo a passo, se você não tiver um banco de dados PostgreSQL existente que gostaria de migrar para uma instância do MongoDB Atlas usando o Confluent Kafka, poderá criar um banco de dados de exemplo no PostgreSQL seguindo as etapas abaixo e continuar com este tutorial.
- Baixe o PostgreSQL Database Server do site oficial e inicie sua instância localmente.
- Crie um banco de dados
mytestdb
e uma tabelausers
e coloque alguns dados de amostra na tabela de funcionários.
1 -- Create the database mytestdb 2 CREATE DATABASE mytestdb; 3 4 -- Connect to the mytestdb database 5 \c org; 6 7 -- Create the users table 8 CREATE TABLE users ( 9 id SERIAL PRIMARY KEY, 10 firstname VARCHAR(50), 11 lastname VARCHAR(50), 12 age INT 13 ); 14 15 -- Insert sample data into the 'users' table 16 INSERT INTO users (firstname, lastname, age) 17 VALUES 18 ('John', 'Doe', 25), 19 ('Jane', 'Smith', 30), 20 ('Bob', 'Johnson', 22);
Lembre-se de que o host em que seu PostgreSQL está sendo executado - nesse caso, sua máquina local - deve ter o Confluent Kafka listado em um firewall. Caso contrário, o connector de origem não poderá acessar a instância do PostgreSQL.
Para migrar os dados do PostgreSQL para o MongoDB Atlas, precisamos configurar um connector de origem para se conectar ao PostgreSQL que transmitirá os dados para o tópico da Nuvem Confluente. Em seguida, configuraremos um connector de pia para o MongoDB Atlas ler os dados do tópico criado e escrever no respectivo banco de dados no cluster MongoDB Atlas .
Para configurar o connector de origem PostgreSQL, siga as etapas abaixo:
- Clique na aba Conectores no seu cluster recém-criado no Confluent. Ele listará os plugins populares disponíveis na Confluent Cloud. Você pode pesquisar o plug-in do connector “postgres source” e usá-lo para criar seu connector personalizado para se conectar ao seu banco de dados PostgreSQL.
- Em seguida, você será solicitado a inserir o prefixo do tópico. Forneça o nome do tópico no qual você deseja transmitir os dados do PostgreSQL. Se você deixar esse campo vazio, o tópico será criado com o nome da tabela para você.
- Em seguida, especifique os níveis de acesso para o novo connector que está sendo criado. Você pode mantê-lo global e também baixar as credenciais da API que pode usar em seus aplicativos, se necessário para se conectar ao cluster. Para essa atividade de migração, você não precisará dela — mas precisará criá-la para passar para a próxima etapa.
- Em seguida, você será solicitado a fornecer os detalhes da conexão do PostgreSQL. Você pode fornecer os parâmetros de conexão, o contexto do esquema, os níveis de isolamento da transação, os intervalos de pesquisa etc. para a conexão.
- Selecione o tipo de registro de saída como JSON. O MongoDB usa nativamente o formato JSON. Você também precisará fornecer o nome da tabela que está tentando migrar.
- Na próxima tela, você será redirecionado para uma página de visão geral com todas as configurações fornecidas no formato JSON, juntamente com o custo de execução desse connector de origem por hora.
- Depois de criar seu connector de origem, você poderá ver seu status na guia Conectores e se ele está em execução ou falhou. O connector de origem começará a sincronizar os dados com o tópico do Confluent Cloud imediatamente após a inicialização. Você pode conferir o número de mensagens processadas pelo connector clicando no novo connector. Se o connector falhou ao iniciar, você poderá verificar os registros do connector e corrigir quaisquer problemas reconfigurando as configurações do connector.
Depois que o connector de origem do Postgres estiver em execução, você poderá alternar para a guia Tópicos para listar todos os tópicos em seu cluster e poderá visualizar o novo tópico criado pelo connector de origem.
Se você clicar no tópico recém-criado e navegar até a guia "Messages", poderá visualizar as mensagens processadas. Se você não conseguir ver nenhuma mensagem recente, poderá verificá-la selecionando a opção “Jump to time”, selecionando a partição padrão 0 e fornecendo um passado recente no seletor de datas. Aqui, o nome do meu tópico é "users. "
Abaixo, você pode ver as mensagens processadas em meu tópico "users " da tabela de usuários no PostgreSQL.
Agora que temos os dados que você queria migrar (uma tabela, em nosso exemplo) em nosso tópico do Confluent Cloud, podemos criar um connector para transmitir esses dados para seu cluster MongoDB Atlas. Siga as etapas abaixo para configurar a entrada de dados:
- Go para a guia Connectors e pesquise "MongoDB Atlas Sink " para encontrar o plug-in de connector MongoDB Atlas que você usará para criar seu connector de coletor personalizado.
- Em seguida, você será solicitado a selecionar o tópico para o qual está criando esse connector de pia. Selecione o respectivo tópico e clique em "Continue. "
- Você pode fornecer os níveis de acesso para o connector do coletor e também baixar as credenciais da API, se necessário, como no caso do connector de origem.
- Na próxima seção, você terá que fornecer os detalhes da conexão para seu cluster MongoDB Atlas — incluindo o nome do host, nome de usuário/senha, nome do banco de dados e nome da coleção — no qual você deseja enviar os dados. A connection string do Atlas estará no formato
mongodb+srv://<username>:<password>@<hostname>
, para que você possa obter os detalhes deste formato. Lembre-se de que o cluster do Atlas deve estar na mesma região e hospedado no mesmo provedor de nuvem para que o Kafka Connector possa se comunicar com ele. Você precisa adicionar o endereço IP estático do cluster Confluent à lista de permissões do firewall do MongoDB Atlas para permitir as conexões com o cluster Altas da Confluent Cloud. Para ambientes que não sejam de produção, você também pode adicionar 0.0.0.0/0 para permitir o acesso de qualquer lugar, mas isso não é recomendado para um ambiente de produção, pois é uma questão de segurança permitindo qualquer acesso IP . - Você pode selecionar o tipo de mensagem de entrada Kafka como JSON, como no caso do connector de origem, e ir para a página de revisão final para visualizar a configuração e o custo do novo connector de pia.
- Depois que o connector for iniciado, você poderá consultar a collection mencionada na configuração do connector do coletor e poderá ver os dados da tabela PostgreSQL na nova collection do cluster MongoDB Atlas.
Esses dados são sincronizados em tempo real do PostgreSQL para o MongoDB Atlas usando os conectores de origem e coletor, portanto, se você tentar adicionar um novo registro ou atualizar/excluir registros existentes no PostgreSQL, poderá ver isso refletido em tempo real em seu cluster do MongoDB Atlas collection também.
Se o seu conjunto de dados for enorme, os conectores alcançarão e processarão todos os dados no devido tempo, de acordo com o tamanho dos dados. Após a conclusão da transferência de dados, você pode validar seu MongoDB Atlas DB e interromper o fluxo de dados interrompendo os conectores de origem e coletor diretamente da Interface da Nuvem Confluent.
Usando o Kafka, você não apenas pode sincronizar os dados usando sua arquitetura orientada a eventos, mas também transformar os dados em transferência em tempo real enquanto os migra do PostgreSQL para o MongoDB. Por exemplo, se quiser renomear um campo ou agrupar dois campos em um para a nova coleção no Atlas, você pode fazer isso enquanto configura o connector do MongoDB Atlas.
Digamos que o PostgreSQL tenha os campos "firstname " e "lastname " para sua tabela "users " e, na pós-migração do MongoDB Atlas, você queira apenas o campo "name ", que seria uma concatenação de os dois campos. Isso pode ser feito usando o atributo "transform " na configuração do connector do coletor. Isso fornece uma lista de transformações para aplicar aos seus dados antes de gravá-los no banco de dados. Abaixo está um exemplo de configuração.
1 { 2 "name": "mongodb-atlas-sink", 3 "config": { 4 "connector.class": "com.mongodb.kafka.connect.MongoSinkConnector", 5 "tasks.max": "1", 6 "topics": "your-topic-name", 7 "connection.uri": "mongodb+srv://<username>:<password>@cluster.mongodb.net/test", 8 "database": "your-database", 9 "collection": "your-collection", 10 "key.converter": "org.apache.kafka.connect.storage.StringConverter", 11 "value.converter": "org.apache.kafka.connect.json.JsonConverter", 12 "value.converter.schemas.enable": "false", 13 "transforms": "addFields,unwrap", 14 "transforms.addFields.type": "org.apache.kafka.connect.transforms.InsertField$Value", 15 "transforms.addFields.static.field": "name", 16 "transforms.addFields.static.value": "${r:firstname}-${r:lastname}", 17 "transforms.unwrap.type": "io.debezium.transforms.UnwrapFromEnvelope", 18 "transforms.unwrap.drop.tombstones": "false", 19 "transforms.unwrap.delete.handling.mode": "none" 20 } 21 }
Como estamos discutindo a migração de dados de relacional para o MongoDB, vale a pena mencionar o MongoDB Relational Migrator. Esta é uma ferramenta projetada nativamente pelo MongoDB para simplificar o processo de mover dados de bancos de dados relacionais para o MongoDB. O Relational Migrator analisa seu esquema relacional e fornece recomendações para mapeamento para um novo esquema MongoDB.
Seus recursos - incluindo análise de esquema, extração de dados, indexação e validação - o tornam um ativo valioso para organizações que buscam aproveitar os benefícios da plataforma NoSQL do MongoDB e, ao mesmo tempo, preservar seus ativos de dados relacionais existentes. Seja para a modernização de aplicativos, armazenamento de dados, microsserviços ou análise de Big Data, essa ferramenta é um recurso valioso para aqueles que desejam fazer a mudança de bancos de dados relacionais para bancos de dados NoSQL. Ajuda a migrar das principais tecnologias de relational database, incluindo Oracle, SQL Server, MySQL e PostgreSQL.
No cenário em constante desenvolvimento do gerenciamento de dados, o MongoDB emergiu como um dos principais bancos de dados NoSQL, conhecido por sua flexibilidade, escalabilidade e estrutura orientada a documentos. No entanto, muitas organizações ainda dependem de bancos de dados relacionais tradicionais para armazenar seus dados críticos. O desafio geralmente está na migração de dados entre esses sistemas diferentes de forma eficiente e precisa.
O Confluent Kafka atua como uma grande ferramenta nesse contexto com sua arquitetura orientada a eventos e suporte nativo para os principais mecanismos de banco de dados, incluindo o MongoDB Atlas.Os conectores de origem e coletor teriam dados de entrada e saída por meio de Tópicos e atuam como uma plataforma para um relacionamento transparente e sem problemas migração de dados do relacional para o MongoDB Atlas cluster.
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.