Todos os produtos
Search
Central de documentação

Data Transmission Service:Sincronizar dados do ApsaraDB for MongoDB para o Message Queue for Apache Kafka

Última atualização: Sep 30, 2026

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 _id em 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).

    Importante
    • Use 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, moveCollection ou movePrimary. 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, config e local nã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 listeners e advertised.listeners no arquivo server.properties de 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 admin e no banco de dados local

Para instruções sobre criação de contas, consulte Account management.

Nota

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

  1. Faça login no DTS console.DTS console

  2. No painel de navegação à esquerda, clique em Data Synchronization.

  3. 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 .
  1. Faça login no DMS console.DMS console

  2. Na barra de navegação superior, passe o ponteiro sobre Data + AI e escolha DTS (DTS) > Data Synchronization.

  3. 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 é admin.

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 _id durante a sincronização completa. No: O DTS verifica o tipo de dados do campo _id.

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

  1. Aguarde até que a Success Rate atinja 100% e clique em Next: Purchase Instance.

  2. 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.

  3. Leia e aceite os Data Transmission Service (Pay-as-you-go) Service Terms.

  4. 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:

  1. Na área Selected Objects, passe o mouse sobre o nome do tópico de destino no nível da coleção.

  2. Clique em Edit ao lado do nome do tópico.

  3. 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.

  4. 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

database

string

Nome do banco de dados source

table

string

Nome da coleção source

type

string

Tipo de operação: INSERT, UPDATE, DELETE ou DDL

isDdl

boolean

true para eventos DDL (remoção ou renomeação de coleção); false para eventos DML

es

number

Timestamp do evento no banco de dados source (milissegundos Unix)

ts

number

Timestamp em que o DTS processou o evento (milissegundos Unix)

id

number

ID interno do evento no DTS

pkNames

array

Nomes dos campos de chave primária (geralmente ["_id"])

data

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 ($set, $unset). null para eventos DDL.

old

array

Estado do documento antes de uma atualização: apenas o campo _id é incluído. null para eventos INSERT e DDL.

sql

object ou null

Detalhes da instrução DDL (para isDdl: true). null para eventos DML.

gtid

null

Não aplicável para MongoDB (reservado para compatibilidade com MySQL).

mysqlType

null

Não aplicável para MongoDB.

serverId

null

Não aplicável para MongoDB.

sqlType

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

insert

db.kafka_test.insert({"cid":"a","person":{"name":"testName","age":NumberInt(18),"skills":["database","ai"]}})

Veja o exemplo abaixo

update $set

db.kafka_test.update({"cid":"a"},{$set:{"person.age":NumberInt(20)}})

Veja o exemplo abaixo

update $set new field

db.kafka_test.update({"cid":"a"},{$set:{"salary":100}})

Veja o exemplo abaixo

update $unset (remove field)

db.kafka_test.update({"cid":"a"},{$unset:{"salary":1}})

Veja o exemplo abaixo

delete

db.kafka_test.deleteOne({"cid":"a"})

Veja o exemplo abaixo

ddl drop

db.kafka_test.drop()

Veja o exemplo abaixo

View data (click to expand)

{
    "data": [{
        "person": {
            "skills": ["database", "ai"],
            "name": "testName",
            "age": 18
        },
        "_id": {
            "$oid": "67d27da49591697476e1****"
        },
        "cid": "a"
    }],
    "database": "kafkadb",
    "es": 1741847972000,
    "gtid": null,
    "id": 174184797200000****,
    "isDdl": false,
    "mysqlType": null,
    "old": null,
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741847973438,
    "type": "INSERT"
}

View data (click to expand)

{
    "data": [{
        "$set": {
            "person.age": 20
        }
    }],
    "database": "kafkadb",
    "es": 1741848051000,
    "gtid": null,
    "id": 174184805100000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848051984,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "$set": {
            "salary": 100.0
        }
    }],
    "database": "kafkadb",
    "es": 1741848146000,
    "gtid": null,
    "id": 174184814600000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848147734,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "$unset": {
            "salary": true
        }
    }],
    "database": "kafkadb",
    "es": 1741848207000,
    "gtid": null,
    "id": 174184820700000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848208186,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "database": "kafkadb",
    "es": 1741848289000,
    "gtid": null,
    "id": 174184828900000****,
    "isDdl": false,
    "mysqlType": null,
    "old": null,
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848289798,
    "type": "DELETE"
}

View data (click to expand)

{
    "data": null,
    "database": "kafkadb",
    "es": 1741847893000,
    "gtid": null,
    "id": 1741847893000000005,
    "isDdl": true,
    "mysqlType": null,
    "old": null,
    "pkNames": null,
    "serverId": null,
    "sql": {
        "drop": "kafka_test"
    },
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741847893760,
    "type": "DDL"
}

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.

View data (click to expand)

{
    "data": [{
        "$set": {
            "person.age": 20
        }
    }],
    "database": "kafkadb",
    "es": 1741848051000,
    "gtid": null,
    "id": 174184805100000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848052912,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "$unset": {
            "salary": 1
        }
    }],
    "database": "kafkadb",
    "es": 1741848207000,
    "gtid": null,
    "id": 174184820700000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848209142,
    "type": "UPDATE"
}

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.

View data (click to expand)

{
    "data": [{
        "person": {
            "skills": ["database", "ai"],
            "name": "testName",
            "age": 20
        },
        "_id": {
            "$oid": "67d27da49591697476e1****"
        },
        "cid": "a"
    }],
    "database": "kafkadb",
    "es": 1741848051000,
    "gtid": null,
    "id": 174184805100000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848052219,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "person": {
            "skills": ["database", "ai"],
            "name": "testName",
            "age": 20
        },
        "_id": {
            "$oid": "67d27da49591697476e1****"
        },
        "salary": 100.0,
        "cid": "a"
    }],
    "database": "kafkadb",
    "es": 1741848146000,
    "gtid": null,
    "id": 174184814600000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848147327,
    "type": "UPDATE"
}

View data (click to expand)

{
    "data": [{
        "person": {
            "skills": ["database", "ai"],
            "name": "testName",
            "age": 20
        },
        "_id": {
            "$oid": "67d27da49591697476e1****"
        },
        "cid": "a"
    }],
    "database": "kafkadb",
    "es": 1741848207000,
    "gtid": null,
    "id": 174184820700000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "_id": {
            "$oid": "67d27da49591697476e1****"
        }
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "kafka_test",
    "ts": 1741848208401,
    "type": "UPDATE"
}

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"}})

View data (click to expand)

{
    "data": [{
        "$set": {
            "name": "b"
        }
    }],
    "database": "dts_test",
    "es": 1740720994000,
    "gtid": null,
    "id": 174072099400000****,
    "isDdl": false,
    "mysqlType": null,
    "old": [{
        "name": "a",
        "_id": 1.0
    }],
    "pkNames": ["_id"],
    "serverId": null,
    "sql": null,
    "sqlType": null,
    "table": "cstest",
    "ts": 1740721007099,
    "type": "UPDATE"
}

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.

Próximos passos