O Data Transmission Service (DTS) permite transmitir dados de alteração em streaming do ApsaraDB for MongoDB para uma instância do Message Queue for Apache Kafka. As etapas a seguir orientam na criação de uma tarefa de sincronização usando um replica set do MongoDB como source e uma instância do Kafka como destino.
Escopo desta tarefa:
Arquiteturas suportadas: Replica set e sharded cluster
Métodos de sincronização incremental: Oplog (recomendado) e Change Streams
Formato de dados: Canal JSON entregue em tópicos do Kafka
Escopo da sincronização: Nível de coleção; sincronização completa e incremental
Faturamento: A sincronização completa de dados é gratuita; a sincronização incremental é cobrada
Pré-requisitos
Antes de começar, verifique se você possui:
Uma instância do Message Queue for Apache Kafka
Um tópico criado na instância do Kafka de destino para receber os dados
(Apenas para sharded cluster) Endpoints solicitados para todos os nós de shard; todos os nós de shard devem compartilhar a mesma senha de conta e endpoint. Consulte Apply for an endpoint for a shard
Para versões de banco de dados source e de destino suportadas, consulte Synchronization solution overview .
Limitações
Revise as limitações a seguir antes de criar uma tarefa de sincronização.
Limites do banco de dados source
O servidor source deve ter largura de banda de saída suficiente. Largura de banda insuficiente reduz a velocidade de sincronização.
Ao configurar o mapeamento de nomes para coleções, uma única tarefa pode sincronizar até 1.000 coleções. Exceder esse limite causa um erro de solicitação. Para sincronizar mais de 1.000 coleções, crie várias tarefas ou sincronize todo o banco de dados sem mapeamento de nomes.
Para sources do tipo sharded cluster: o campo
_idem cada coleção sincronizada deve ser único; caso contrário, pode ocorrer inconsistência de dados.Para sources do tipo sharded cluster: o número de nós mongos não pode exceder 10, e a instância não deve conter orphaned documents. Consulte o tópico de FAQ para saber como remover documentos órfãos.
Instâncias independentes do ApsaraDB for MongoDB, clusters do Azure Cosmos DB for MongoDB e elastic clusters do Amazon DocumentDB não são suportados como sources.
O DTS não consegue se conectar ao MongoDB por meio de um endpoint SRV.
-
O oplog deve estar ativado e reter dados de log por pelo menos 7 dias, OU os change streams devem estar habilitados para que o DTS possa assinar alterações de dados dos últimos 7 dias. Se nenhuma dessas condições for atendida, o DTS poderá falhar ao buscar alterações no source, resultando em perda ou inconsistência de dados fora do escopo do service level agreement (SLA).
ImportanteUse o oplog para registrar alterações no banco de dados source (recomendado). - Os change streams exigem MongoDB 4.0 ou posterior. A sincronização bidirecional não é suportada ao usar change streams. - Para clusters não elásticos do Amazon DocumentDB, ative os change streams e defina Migration Method como ChangeStream e Architecture como Sharded Cluster.
Durante a sincronização completa de dados, não modifique schemas de bancos de dados ou coleções, nem altere dados do tipo ARRAY.
Para sources do tipo sharded cluster, não execute os seguintes comandos durante a sincronização:
shardCollection,reshardCollection,unshardCollection,moveCollectionoumovePrimary. Esses comandos podem causar inconsistência de dados.Se o banco de dados source for uma instância do MongoDB com arquitetura de sharded cluster e o balancer estiver balanceando dados, poderá ocorrer latência na instância.
Outros limites
Apenas a sincronização no nível de coleção é suportada.
Os bancos de dados
admin,configelocalnão podem ser sincronizados.Um único registro superior a 10 MB causa falha na tarefa.
As transações não são preservadas. O DTS converte cada transação em registros individuais no destino.
Se nós broker forem adicionados ou removidos na instância do Kafka de destino enquanto uma tarefa do DTS estiver em execução, reinicie a tarefa do DTS.
Certifique-se de que o DTS consiga se conectar às instâncias source e de destino. Por exemplo, as configurações de segurança das instâncias de banco de dados e os parâmetros
listenerseadvertised.listenersno arquivoserver.propertiesde uma instância auto-gerenciada do Kafka não devem restringir o acesso do DTS.Execute a sincronização fora do horário de pico, quando a utilização da CPU nos bancos de dados source e de destino estiver abaixo de 30%.
O DTS tenta automaticamente retomar instâncias com falha que estão em execução há menos de 7 days. Antes de alternar o tráfego para o destino, pare ou libere a instância de sincronização para evitar que a retomada automática sobrescreva os dados de destino.
O DTS calcula a latência da sincronização incremental de dados com base no timestamp dos dados sincronizados mais recentes no banco de dados de destino e no timestamp atual no banco de dados source. Se nenhuma operação de atualização for realizada no banco de dados source por um longo período, a latência de sincronização poderá ficar imprecisa. Caso a latência da tarefa de sincronização esteja excessivamente alta, realize uma operação de atualização no banco de dados source para corrigi-la.
Se uma tarefa do DTS falhar, o suporte técnico do DTS tentará restaurá-la dentro de 8 horas. Durante a restauração, a tarefa pode ser reiniciada e seus parâmetros podem ser modificados. Apenas os parâmetros da tarefa do DTS podem ser alterados; os parâmetros dos bancos de dados não são modificados. Os parâmetros passíveis de modificação incluem, mas não se limitam àqueles listados na seção "Modify instance parameters".
Para sources do tipo sharded cluster com Oplog como método de sincronização incremental, o DTS não garante a ordem de gravação entre shards no tópico do Kafka de destino.
Para sources do tipo sharded cluster, desative o balancer do MongoDB durante a sincronização completa de dados. Reative-o somente após a conclusão da sincronização completa e o início da sincronização incremental. Consulte Manage the ApsaraDB for MongoDB balancer.
Faturamento
|
Tipo de sincronização |
Custo |
|
Sincronização completa de dados |
Gratuito |
|
Sincronização incremental de dados |
Pago. Consulte Billing overview |
Tipos de sincronização e operações suportadas
A Full synchronization copia todos os dados históricos das coleções selecionadas do MongoDB para o tópico do Kafka de destino. O DTS suporta objetos DATABASE e COLLECTION.
A Incremental synchronization entrega continuamente eventos de alteração após a conclusão da sincronização completa. As operações suportadas dependem do método de sincronização incremental:
|
Operação |
Oplog |
Change streams |
|
INSERT |
Suportado |
Suportado |
|
UPDATE |
Suportado |
Suportado |
|
DELETE |
Suportado |
Suportado |
|
CREATE COLLECTION / INDEX |
Suportado |
Não suportado |
|
DROP DATABASE / COLLECTION / INDEX |
Suportado |
Apenas DROP DATABASE e COLLECTION |
|
RENAME COLLECTION |
Suportado |
Suportado |
A sincronização incremental não captura bancos de dados criados após o início da tarefa.
Permissões necessárias para a conta do banco de dados
|
Banco de dados |
Permissões necessárias |
|
ApsaraDB for MongoDB source |
Permissão de leitura nos bancos de dados a serem sincronizados, no banco de dados |
Para instruções sobre criação de contas, consulte Account management.
Se você utilizar ChangeStream como método de sincronização incremental, a conta do banco de dados source requer permissões de leitura de Change Streams em toda a instância (como readAnyDatabase). Se o source for uma instância do ApsaraDB for MongoDB com uma conta personalizada, você também deve conceder à conta permissão de leitura no banco de dados admin. Para mais detalhes, consulte Permissions of the root account specified during instance creation.
Criar uma tarefa de sincronização
Etapa 1: Abrir a página Data Synchronization
Utilize o console do DTS ou o console do DMS.
Console do DTS
Faça login no DTS console.DTS console
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo, selecione a região onde a tarefa de sincronização está localizada.
Console do DMS
As etapas podem variar dependendo do modo do console do DMS. Consulte Simple mode e Customize the layout and style of the DMS console .
Faça login no DMS console.DMS console
Na barra de navegação superior, passe o ponteiro sobre Data + AI e escolha DTS (DTS) > Data Synchronization.
Na lista suspensa à direita de Data Synchronization Tasks, selecione a região.
Etapa 2: Configurar os bancos de dados source e de destino
Clique em Create Task e configure os parâmetros descritos nas tabelas a seguir.
Geral
|
Parâmetro |
Descrição |
|
Task Name |
Nome da tarefa do DTS. O DTS gera um nome automaticamente. Especifique um nome descritivo para identificar a tarefa. O nome não precisa ser único. |
Banco de dados source
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância source estiver registrada no DTS, selecione-a na lista suspensa. O DTS preencherá os campos restantes automaticamente. Caso contrário, configure os campos abaixo. No console do DMS, selecione na lista Select a DMS database instance. |
|
Database Type |
Selecione MongoDB. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região da instância source do ApsaraDB for MongoDB. |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se o banco de dados source pertencer à conta atual da Alibaba Cloud. |
|
Architecture |
Selecione Replica Set para este exemplo. Se o source for um Sharded Cluster, insira também a Shard account e a Shard password. |
|
Migration Method |
Método para sincronização de dados incrementais. O Oplog é recomendado quando o recurso oplog está ativado. O ChangeStream está disponível quando os change streams estão habilitados no source. Consulte Change Streams para detalhes. Observações: Para clusters não elásticos do Amazon DocumentDB, apenas o ChangeStream é suportado. Quando a Architecture está definida como Sharded Cluster e o Migration Method está definido como ChangeStream, os campos Shard account e Shard password não são obrigatórios. |
|
Instance ID |
Selecione o ID da instância source do ApsaraDB for MongoDB. |
|
Authentication Database |
Banco de dados que contém as credenciais da conta. O padrão é |
|
Database Account |
Conta do banco de dados source. Consulte Required database account permissions. |
|
Database Password |
Senha da conta do banco de dados. |
|
Encryption |
Define o tipo de criptografia da conexão: Non-encrypted, SSL-encrypted ou Mongo Atlas SSL. As opções disponíveis dependem dos valores de Access Method e Architecture. Observações: A opção SSL-encrypted fica indisponível quando a Architecture é Sharded Cluster e o Migration Method é Oplog. Para MongoDB auto-gerenciado com arquitetura Replica Set e SSL-encrypted selecionado, faça upload de um certificado CA para verificar a conexão. |
Banco de dados de destino
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância do Kafka de destino estiver registrada no DTS, selecione-a na lista suspensa. Caso contrário, configure os campos abaixo. |
|
Database Type |
Selecione Kafka. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região da instância do Kafka de destino. |
|
Kafka Instance ID |
Selecione o ID da instância do Kafka de destino. |
|
Encryption |
Selecione Non-encrypted ou SCRAM-SHA-256 com base nos seus requisitos de segurança. |
|
Topic |
Selecione o tópico para receber os dados sincronizados. |
|
Use Kafka Schema Registry |
O Kafka Schema Registry é um serviço de metadados RESTful para armazenar e recuperar schemas Avro. Selecione No para pular, ou Yesalert notification settings e forneça a URL ou endereço IP do Schema Registry. |
Etapa 3: Testar a conectividade
Clique em Test Connectivity and Proceed na parte inferior da página.
O DTS adiciona seus blocos CIDR de servidor às configurações de segurança dos bancos de dados source e de destino automaticamente, se permitido. Para configuração manual, consulte Add the CIDR blocks of DTS servers .
Para bancos de dados auto-gerenciados que não utilizam Alibaba Cloud Instance como método de acesso, clique em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers .
Etapa 4: Configurar objetos para sincronização
Na etapa Configure Objects, defina os seguintes parâmetros.
|
Parâmetro |
Descrição |
|
Synchronization Types |
A opção Incremental Data Synchronization vem selecionada por padrão. Opcionalmente, selecione também Full Data Synchronization. A Schema Synchronization não está disponível. Quando a sincronização completa está ativada, o DTS copia primeiro todos os dados históricos antes de iniciar a sincronização incremental. |
|
Processing Mode of Conflicting Tables |
Precheck and Report Errors: a pré-verificação falha se o destino contiver coleções com os mesmos nomes do source. Utilize o mapeamento de nomes de objetos para resolver conflitos de nomenclatura. Ignore Errors and Proceed: ignora a verificação de conflito de nomes. Se um registro no destino tiver a mesma chave primária ou chave única de um registro do source, o registro de destino será mantido. Aviso
Esta opção pode causar inconsistência de dados. |
|
Data Format in Kafka |
Apenas Canal JSON é suportado. |
|
Kafka Data Compression Format |
Formato de compressão para dados gravados no Kafka. Opções: LZ4 (padrão — baixa taxa de compressão, alta velocidade), GZIP (alta taxa de compressão, baixa velocidade, alto uso de CPU), Snappy (equilibrado). |
|
Policy for Shipping Data to Kafka Partitions |
Escolha uma política de roteamento de partições conforme suas necessidades. |
|
Message acknowledgement mechanism |
Selecione um message acknowledgment mechanism conforme suas necessidades. |
|
Topic That Stores DDL Information |
Selecione um tópico para armazenar eventos DDL. Se deixado em branco, os eventos DDL serão gravados no mesmo tópico dos eventos de dados. |
|
Capitalization of Object Names in Destination Instance |
Controla a capitalização dos nomes de bancos de dados e coleções no destino. O padrão é DTS default policy. Consulte Specify the capitalization of object names in the destination instance. |
|
Source Objects |
Selecione objetos na seção Source Objects e clique no ícone de seta para movê-los para Selected Objects. Apenas a seleção no nível de coleção é suportada. |
Etapa 5: Configurar definições avançadas
Clique em Next: Advanced Settings e configure os seguintes parâmetros.
|
Parâmetro |
Descrição |
|
Dedicated Cluster for Task Scheduling |
Por padrão, o DTS agenda a tarefa no cluster compartilhado. Adquira um dedicated cluster para maior estabilidade. |
|
Retry Time for Failed Connections |
Tempo durante o qual o DTS tenta reconectar quando o source ou destino está inacessível. Intervalo: 10–1440 minutos. Padrão: 720 minutos. Recomendamos definir este parâmetro com um valor superior a 30. Se você especificar tempos de tentativa diferentes para várias tarefas que compartilham o mesmo banco de dados, o menor valor prevalecerá. O DTS cobra pelo tempo de nova tentativa. |
|
Retry Time for Other Issues |
Tempo durante o qual o DTS tenta novamente quando operações DDL ou DML falham. Intervalo: 1–1440 minutos. Padrão: 10 minutos. Defina como pelo menos 10 minutos. Deve ser menor que Retry Time for Failed Connections. |
|
Obtain the entire document after it is updated |
Disponível apenas quando o Migration Method é ChangeStream. Yes: sincroniza o documento completo para cada atualização, o que pode aumentar a carga no source e causar latência. Se o DTS não conseguir buscar o documento completo, apenas os campos atualizados serão enviados. No: sincroniza apenas os campos alterados. |
|
Enable Throttling for Full Data Synchronization |
Quando ativado, configure o QPS to the source database, o RPS of Full Data Migration e a Data migration speed for full migration (MB/s) para reduzir a carga no destino. Disponível apenas quando a Full Data Synchronization estiver selecionada. |
|
Only one data type for primary key _id in a table of the data to be synchronized |
Disponível apenas quando a Full Data Synchronization estiver selecionada. Yes: O DTS pula a varredura do tipo de dados do campo |
|
Enable Throttling for Incremental Data Synchronization |
Quando ativado, configure o RPS of Incremental Data Synchronization e a Data synchronization speed for incremental synchronization (MB/s) para reduzir a carga no destino. |
|
Environment Tag |
Uma tag opcional para identificar a instância. |
|
Configure ETL |
Ative para aplicar lógica de extração, transformação e carga (ETL). Insira instruções de processamento de dados no editor de código. Consulte Configure ETL in a data migration or data synchronization task. |
|
Monitoring and Alerting |
Quando ativado, especifique um limiar de alerta e configurações de notificação. O DTS notifica os contatos de alerta quando a tarefa falha ou quando a latência de sincronização excede o limiar. Consulte Configure monitoring and alerting. |
Etapa 6: Executar a pré-verificação
Clique em Next: Save Task Settings and Precheck.
Para visualizar os parâmetros da API para esta configuração, passe o mouse sobre o botão e clique em Preview OpenAPI parameters antes de prosseguir.
A tarefa não pode ser iniciada até que a pré-verificação seja aprovada.
Se a pré-verificação falhar, clique em View Details ao lado de cada item com falha, resolva o problema e clique em Precheck Again .
Se um alerta for gerado para um item: corrija alertas não ignoráveis antes de prosseguir. Para alertas ignoráveis, clique em Confirm Alert Details , depois em Ignore na caixa de diálogo, confirme e clique em Precheck Again . Ignorar alertas pode causar inconsistência de dados.
Etapa 7: Adquirir e iniciar a instância
Aguarde até que a Success Rate atinja 100% e clique em Next: Purchase Instance.
-
Na página buy, configure os seguintes parâmetros.
Parâmetro
Descrição
Billing Method
Subscription: pagamento antecipado; mais econômico para uso de longo prazo. Pay-as-you-go: faturamento por hora; adequado para uso de curto prazo. Libere a instância quando não for mais necessária para interromper o faturamento.
Resource Group Settings
Grupo de recursos para a instância de sincronização. Padrão: default resource group. Consulte What is Resource Management?
Instance Class
Categoria de velocidade de sincronização. Consulte Instance classes of data synchronization instances.
Subscription Duration
Disponível para faturamento por Subscription. Opções: 1–9 meses, 1 ano, 2 anos, 3 anos ou 5 anos.
Leia e aceite os Data Transmission Service (Pay-as-you-go) Service Terms.
Clique em Buy and Start e, em seguida, clique em OK na caixa de diálogo de confirmação.
A tarefa aparecerá na lista de tarefas. Acompanhe o progresso por lá.
Configurar mapeamento de coleção para tópico
Por padrão, todas as coleções são gravadas no tópico selecionado na configuração do banco de dados de destino. Para rotear uma coleção específica para um tópico diferente:
Na área Selected Objects, passe o mouse sobre o nome do tópico de destino no nível da coleção.
Clique em Edit ao lado do nome do tópico.
-
Na caixa de diálogo Edit Table, configure as seguintes definições.
Parâmetro
Descrição
Name of target Topic
Tópico de destino para esta coleção. O tópico deve existir na instância do Kafka. Se modificado, os dados serão gravados no novo tópico. Padrão: o tópico selecionado durante a configuração do banco de dados de destino.
Filter Conditions
Filtro de linha opcional. Consulte Filter task data with an SQL condition.
Number of Partitions
Número de partições para gravação de dados no tópico.
Clique em OK.
Exemplos de entrega de dados
Cada alteração incremental do MongoDB é serializada como uma mensagem Canal JSON e entregue ao tópico configurado do Kafka. A estrutura da mensagem varia dependendo do método de sincronização incremental e das configurações de atualização.
Escolha seu cenário
|
Objetivo |
Configuração |
|
Sincronização de baixa latência com suporte completo a DDL |
Defina o Migration Method como Oplog (Cenário 1) |
|
Change Streams com atualizações parciais de documentos |
Defina o Migration Method como ChangeStream e Obtain the entire document after it is updated como No (Cenário 2) |
|
Change Streams com documento completo em cada atualização |
Defina o Migration Method como ChangeStream e Obtain the entire document after it is updated como Yes (Cenário 3) |
Campos da mensagem Canal JSON
Todos os três cenários usam o mesmo envelope Canal JSON de nível superior. Os seguintes campos aparecem em todas as mensagens.
|
Campo |
Tipo |
Descrição |
|
|
string |
Nome do banco de dados source |
|
|
string |
Nome da coleção source |
|
|
string |
Tipo de operação: |
|
|
boolean |
|
|
|
number |
Timestamp do evento no banco de dados source (milissegundos Unix) |
|
|
number |
Timestamp em que o DTS processou o evento (milissegundos Unix) |
|
|
number |
ID interno do evento no DTS |
|
|
array |
Nomes dos campos de chave primária (geralmente |
|
|
array |
Dados do documento após a operação. Para atualizações parciais (Oplog ou ChangeStream sem recuperação de documento completo), contém apenas os campos alterados usando operadores de atualização do MongoDB ( |
|
|
array |
Estado do documento antes de uma atualização: apenas o campo |
|
|
object ou null |
Detalhes da instrução DDL (para |
|
|
null |
Não aplicável para MongoDB (reservado para compatibilidade com MySQL). |
|
|
null |
Não aplicável para MongoDB. |
|
|
null |
Não aplicável para MongoDB. |
|
|
null |
Não aplicável para MongoDB. |
Cenário 1: Oplog
Defina o Migration Method como Oplog.
|
Tipo de alteração no source |
Instrução no source |
Dados recebidos pelo tópico de destino |
|
|
|
Veja o exemplo abaixo |
|
|
|
Veja o exemplo abaixo |
|
|
|
Veja o exemplo abaixo |
|
|
|
Veja o exemplo abaixo |
|
|
|
Veja o exemplo abaixo |
|
|
|
Veja o exemplo abaixo |
Cenário 2: ChangeStream — apenas campos atualizados
Defina o Migration Method como ChangeStream. Defina Obtain the entire document after it is updated como No.
As mensagens de inserção e exclusão são idênticas ao Cenário 1. As mensagens de atualização contêm apenas os campos alterados.
Cenário 3: ChangeStream — documento completo na atualização
Defina o Migration Method como ChangeStream. Defina Obtain the entire document after it is updated como Yes.
Os eventos de atualização entregam o documento completo após a alteração, em vez de apenas os campos modificados.
Caso especial: fullDocument ausente no ChangeStream
Quando o campo fullDocument de um evento de atualização do ChangeStream está ausente — por exemplo, quando um documento se move entre shards em uma coleção fragmentada — a mensagem entregue reverte para o comportamento do Oplog (atualização parcial com operadores $set ou $unset).
Exemplo: atualização de coleção fragmentada onde fullDocument está ausente
Dados base do source:
use admin
db.runCommand({ enablesharding:"dts_test" })
Alteração incremental no source:
use dts_test
sh.shardCollection("dts_test.cstest",{"name":"hashed"})
db.cstest.insert({"_id":1,"name":"a"})
db.cstest.updateOne({"_id":1,"name":"a"},{$set:{"name":"b"}})
Perguntas frequentes
Posso alterar o Kafka Data Compression Format após a criação da tarefa?
Sim. Consulte Modify the objects to be synchronized.
Posso alterar o Message acknowledgment mechanism após a criação da tarefa?
Sim. Consulte Modify the objects to be synchronized.