O Realtime Compute for Apache Flink simplifica a ingestão de dados em tempo real ao gerenciar automaticamente a transição da sincronização completa para a incremental, a descoberta de metadados, a evolução de schema e a sincronização de todo o banco de dados. Este tópico mostra como criar rapidamente um job de ingestão que transmite dados do ApsaraDB RDS for MySQL para o Hologres.
Contexto
A seguir, visualize como esses bancos de dados e tabelas aparecem no console DMS.
A instância RDS contém vários bancos de dados (tpc_ds, tpc_ds_large, user_db1, user_db2, user_db3, __recycle_bin__). O banco de dados user_db3 contém três tabelas: user03, user06 e user09. A tabela user03 possui duas colunas: id (int(11)) e name (varchar(255)).
Siga estas etapas para desenvolver um job de ingestão que sincronize todas essas tabelas com o Hologres e mescle as tabelas de usuários fragmentadas em uma única tabela:
Este tópico utiliza a ingestão de dados do Flink CDC para sincronizar todo o banco de dados e mesclar tabelas fragmentadas. Isso permite concluir a sincronização de dados completa e incremental, bem como a sincronização de alterações de schema em tempo real, com um único job.
Pré-requisitos
Se você usar um usuário RAM ou uma função RAM, verifique se possui as permissões necessárias para acessar o console Flink. Para mais informações, consulte Gerenciar permissões.
Você já criou um workspace Flink. Para mais informações, consulte Ativar o Realtime Compute for Apache Flink.
-
Armazenamento upstream e downstream
Você já criou uma instância ApsaraDB RDS for MySQL. Para mais informações, consulte (Descontinuado, redireciona para "Etapa 1") Criar rapidamente uma instância ApsaraDB RDS for MySQL.
Você já criou uma instância Hologres. Para mais informações, consulte Comprar uma instância Hologres.
NotaAs instâncias ApsaraDB RDS for MySQL e Hologres devem estar na mesma região e Virtual Private Cloud (VPC) do workspace Flink. Caso contrário, estabeleça uma conexão de rede. Para mais informações, consulte Como acesso outros serviços entre VPCs? e Como acesso a internet?.
Você preparou os dados de teste e configurou as listas de permissões de IP. Para mais informações, consulte Preparar dados de teste do MySQL e um banco de dados Hologres e Configurar uma lista de permissões de IP.
Preparar dados de teste do MySQL e um banco de dados Hologres
Clique em tpc_ds.sql, user_db1.sql, user_db2.sql e user_db3.sql para baixar os arquivos de dados de teste para sua máquina local.
-
No console DMS, prepare os dados de teste na sua instância ApsaraDB RDS for MySQL.
-
Faça login na sua instância ApsaraDB RDS for MySQL usando o DMS.
Para mais informações, consulte (Descontinuado, redireciona para "Etapa 2") Fazer login em uma instância ApsaraDB RDS for MySQL usando o DMS.
-
Na janela SQL Console, insira os seguintes comandos e clique em Execute.
Os comandos abaixo criam quatro bancos de dados:
tpc_ds,user_db1,user_db2euser_db3.CREATE DATABASE tpc_ds; CREATE DATABASE user_db1; CREATE DATABASE user_db2; CREATE DATABASE user_db3; Na barra de navegação superior, clique em Data Import.
-
Na aba Batch Data Import, selecione o banco de dados de destino, faça upload do arquivo SQL correspondente, clique em Submit e, em seguida, clique em Execute Change. Na caixa de diálogo exibida, clique em Confirm Execution.
Repita essa operação para importar os arquivos de dados correspondentes nos bancos de dados
tpc_ds,user_db1,user_db2euser_db3.Defina File Encoding como Auto Detect, Import Mode como Express Mode ou Safe Mode, e File Type como SQL Script, CSV ou Excel. Os anexos suportam formatos txt/sql/csv/xlsx/zip, até 5 GB.
-
-
No console Hologres, crie um banco de dados chamado
my_userpara armazenar os dados da tabela de usuários mesclada.Para mais informações, consulte Criar um banco de dados.
Configurar uma lista de permissões de IP
Para permitir que o Flink acesse as instâncias ApsaraDB RDS for MySQL e Hologres, adicione o bloco CIDR do seu workspace Flink à lista de permissões de IP de ambas as instâncias.
-
Obtenha o bloco CIDR do workspace Flink.
Faça login no console Realtime Compute for Apache Flink.
Na lista de workspaces, localize o workspace desejado e escolha na coluna Actions.
Na caixa de diálogo Workspace Details, visualize as informações de CIDR Block do vSwitch do Flink.
-
Adicione o bloco CIDR do Flink à lista de permissões de IP da instância ApsaraDB RDS for MySQL.
Para mais informações, consulte Configurar uma lista de permissões de IP.
Na caixa de diálogo Modify Whitelist Group, insira o bloco CIDR totalmente gerenciado do Flink no campo Group Whitelist e clique em OK.
-
Adicione o bloco CIDR do Flink à lista de permissões de IP da instância Hologres.
Ao configurar uma conexão de dados no HoloWeb, defina Login Method como Password-free login for current user antes de configurar uma lista de permissões de IP para a conexão. Para mais informações, consulte Lista de permissões de IP.
No HoloWeb, escolha Security Center na barra de navegação superior, clique em IP Whitelist no painel esquerdo e configure os seguintes parâmetros na caixa de diálogo Edit IP Whitelist:
Group: Selecione default
Database Restriction: Selecione ALL
User Restriction: Selecione ALL
IP Address: Insira o bloco CIDR do Flink em notação CIDR (por exemplo, 172.xx.0/19). Separe vários endereços IP com quebras de linha.
Clique em OK para aplicar.
Etapa 1: Desenvolver o job de ingestão
-
Faça login no console de desenvolvimento Flink e crie um novo job.
Na página , clique em New.
-
Clique em Blank Data Ingestion Draft.
O Realtime Compute for Apache Flink oferece um conjunto rico de modelos de código, cada um com casos de uso específicos, exemplos de código e orientações. Clique em um modelo para conhecer os recursos do product e a sintaxe necessária para implementar sua lógica de negócios.
Clique em Next.
-
Na caixa de diálogo New Draft, configure os parâmetros.
Parâmetro
Descrição
Exemplo
Name
Nome do job.
NotaO nome do job deve ser exclusivo dentro do projeto atual.
flink-test
Location
Pasta onde o arquivo de código do job será armazenado.
Você também pode clicar no ícone
ao lado de uma pasta existente para criar uma subpasta.Job Drafts
Engine Version
Versão do mecanismo Flink usada pelo job. Para obter informações sobre números de versão do mecanismo, compatibilidade de versões e datas importantes do ciclo de vida, consulte Versões do mecanismo.
vvr-11.1-jdk11-flink-1.20
Clique em OK.
-
Copie o seguinte código de job para o editor de jobs.
O código abaixo sincroniza todas as tabelas do banco de dados
tpc_dscom o Hologres e mescla as tabelas de usuários fragmentadas em uma única tabela no Hologres:source: type: mysql name: MySQL Source hostname: localhost port: 3306 username: username password: password tables: tpc_ds.\.*,user_db[0-9]+.user[0-9]+ server-id: 8601-8604 # (Optional) Synchronize table and column comments. include-comments.enabled: true # (Optional) Prioritize the distribution of unbounded chunks to prevent potential TaskManager OutOfMemory errors. scan.incremental.snapshot.unbounded-chunk-first.enabled: true # (Optional) Enable parsing filters to accelerate reading. scan.only.deserialize.captured.tables.changelog.enabled: true sink: type: hologres name: Hologres Sink endpoint: ****.hologres.aliyuncs.com:80 dbname: cdcyaml_test username: ${secret_values.holo-username} password: ${secret_values.holo-password} sink.type-normalize-strategy: BROADEN route: # Merge and synchronize the sharded user tables to the my_user.users table. - source-table: user_db[0-9]+.user[0-9]+ sink-table: my_user.usersNotaAs tabelas do banco de dados MySQL
tpc_dssão mapeadas diretamente para tabelas com nomes idênticos no destino, portanto, a seçãoroutenão requer configuração extra de mapeamento. Para sincronizar as tabelas com um banco de dados de nome diferente, comoods_tps_ds, configure o módulorouteda seguinte forma:route: # Merge and synchronize the sharded user tables to the my_user.users table. - source-table: user_db[0-9]+.user[0-9]+ sink-table: my_user.users # Rename the database for all tables under tpc_ds and synchronize them to ods_tps_ds. - source-table: tpc_ds.\.* sink-table: ods_tps_ds.<> replace-symbol: <>
Etapa 2: Iniciar o job
-
Na página , clique em Deploy. Na caixa de diálogo exibida, clique em Confirm.
Na caixa de diálogo, insira Remarks, defina Job Tags e selecione uma fila na lista suspensa Deployment Target (padrão:
default-queue). Observação: A implantação entra em vigor na próxima vez que o job for iniciado. Na página , clique em Start na coluna Actions do job desejado. Configure os parâmetros conforme necessário. Para mais informações, consulte Iniciar um job.
-
Clique em Start.
Após o início do job, visualize suas informações de execução e status na página Job Operations. Os status do job incluem Running, Failed e Stopped. Use o filtro suspenso Stream Jobs na parte superior para filtrar a lista de jobs por tipo.
Etapa 3: Verificar a sincronização completa
Faça login no Console de Gerenciamento do Hologres.
-
Na aba Metadata Management, verifique se as 24 tabelas e seus dados estão presentes no banco de dados
tpc_dsda instância Hologres.Acesse Instance > tpc_ds > public > Tables para ver tabelas como call_center, catalog_sales, customer e store_sales. Selecione a tabela store_sales e clique na aba Data Preview para visualizar colunas como ss_sold_date, ss_sold_time, ss_item_sk e ss_customer.
-
Na aba Metadata Management, verifique o schema da tabela
usersno banco de dadosmy_user.A seguir, descrevemos o schema e os dados da tabela sincronizada.
-
Schema da tabela
Após a sincronização, a tabela
userscontém as seguintes colunas:_db_name(text, chave primária)_table_name(text, chave primária)id(int4, chave primária)name(varchar 255, anulável)
As colunas
_db_name,_table_nameeidformam uma chave primária composta.O schema da tabela
usersinclui duas colunas adicionais não encontradas nas tabelas MySQL de source:_db_namee_table_name. Essas colunas indicam o banco de dados e a tabela de source de cada linha e fazem parte da chave primária composta, garantindo a unicidade dos dados após a mesclagem das tabelas fragmentadas. -
Dados da tabela
No canto superior direito da página de informações da tabela
users, clique em Query Table. Insira o seguinte comando e clique em Run.select * from users order by _db_name,_table_name,id;Os resultados da consulta mostram que os dados do usuário foram totalmente sincronizados em três bancos de dados:
user_db1(user01, user04, user07),user_db2(user02, user05, user08) euser_db3(user03, user06, user09), totalizando 9 registros com as colunas_db_name,_table_name,idename.
-
Etapa 4: Verificar a sincronização incremental
Após a conclusão da sincronização completa, o job muda automaticamente para a fase de sincronização incremental sem intervenção manual. Verifique o valor de currentEmitEventTimeLag na aba Monitoring and Alerts para determinar a fase de sincronização de dados.
Faça login no console Realtime Compute for Apache Flink.
Clique em Console na coluna Actions do workspace desejado.
Na página , clique no nome do job desejado.
Clique na aba Alarm (ou Metrics).
-
Examine o gráfico
currentEmitEventTimeLagpara determinar a fase de sincronização de dados.
Um valor igual a 0 indica a fase de sincronização completa.
Um valor maior que 0 indica a fase de sincronização incremental.
-
Verifique a sincronização de dados e alterações de schema em tempo real.
A fonte MySQL CDC suporta sincronização de dados e schema em tempo real durante a fase incremental. Para verificar isso, modifique o schema e os dados de uma tabela de usuários fragmentada no MySQL após o job entrar nessa fase.
-
Faça login na instância ApsaraDB RDS for MySQL usando o DMS.
Para mais informações, consulte (Descontinuado, redireciona para "Etapa 2") Fazer login em uma instância ApsaraDB RDS for MySQL usando o DMS.
-
No banco de dados
user_db2, execute os seguintes comandos para modificar o schema da tabelauser02e para inserir e atualizar dados.USE `user_db2`; ALTER TABLE `user02` ADD COLUMN `age` INT; -- Add the age column. INSERT INTO `user02` (id, name, age) VALUES (27, 'Tony', 30); -- Insert a row that includes the age data. UPDATE `user05` SET name='JARK' WHERE id=15; -- Update another table and change the name to uppercase. -
No console Hologres, verifique as alterações no schema e nos dados da tabela
users.No canto superior direito da página de informações da tabela
users, clique em Query Table, insira o seguinte comando e clique em Run.select * from users order by _db_name,_table_name,id;A alteração de schema em
user02e as modificações de dados são propagadas em tempo real, mesmo que as tabelas fragmentadas tenham schemas diferentes. A tabelausersdo Hologres agora mostra a nova colunaage, o registro inserido para Tony e o registro atualizado para JARK.Os resultados da consulta mostram 11 linhas da tabela users em user_db1, user_db2 e user_db3. As alterações da sincronização incremental são refletidas: o usuário Tony (id 27) em user_db2 tem
ageatualizado para 30, e outro registro temnamealterado para JARK. As linhas restantes têm valores de idade iguais a \N, confirmando que a sincronização incremental está funcionando.
-
(Opcional) Etapa 5: Configurar recursos do job
Para obter melhor desempenho, ajuste os recursos do job, como concorrência, memória do TaskManager e CUs, com base no volume de dados.
Na página , clique no nome do job desejado.
Na aba Configuration, clique em Edit no canto superior direito da seção Resources.
Defina manualmente parâmetros de recursos, como memória do TaskManager e concorrência.
No lado direito da seção Resources, clique em Save.
-
Reinicie o job.
As alterações na configuração de recursos só entram em vigor após reiniciar o job.
Documentos relacionados
Para a sintaxe de cada módulo de ingestão de dados, consulte Referência de desenvolvimento de job de ingestão de dados do Flink CDC.
Se encontrar problemas durante a execução do job de ingestão de dados, consulte Problemas comuns e soluções para jobs de ingestão de dados.