initialSync permite que um processador de fluxo do Atlas Stream Processing ingira documentos preexistentes em uma coleção do Atlas como se fossem documentos de inserção changeEvent antes de começar a rastrear o fluxo de alterações. Um único estágio $source agora pode executar initialSync em mais de uma coleção ao mesmo tempo.
Esta página compara as características de sincronização de coleção única e de várias coleções, orienta na configuração de uma sincronização de várias coleções e demonstra um pipeline de replicação entre clusters construído sobre ele.
Comparação com sincronização inicial de coleção única
O campo coll do estágio $source aceita um único nome de coleção ou um array de nomes de coleções. Toda coleção que você nomear no array deve pertencer ao banco de dados que você especificar no campo db. Você não pode sincronizar coleções de mais de um banco de dados em um único estágio $source. O valor que você fornece determina o escopo de sincronização:
Escopo | $source Configuração | Comportamento |
|---|---|---|
Coleção única |
| O Atlas Stream Processing sincroniza a coleção nomeada. |
Explicit list |
| O Atlas Stream Processing sincroniza cada coleção na lista na ordem em que você as lista. |
Características da sincronização inicial de várias coleções
Uma operação initialSync de várias coleções tem as seguintes características:
Sincroniza as coleções na ordem da lista. Com
coll: ["a", "b", "c"], o Atlas Stream Processing esvazia as partições deaantes das deb, e as debantes das dec, exceto onde o transbordamento preenche a capacidade ociosa com partições de uma coleção posterior.Retoma sem ressincronizar coleções concluídas. O Atlas Stream Processing acompanha quais coleções foram concluídas, portanto, um processador de fluxo reiniciado ignora as coleções concluídas e retoma qualquer coleção em andamento a partir do seu último documento sincronizado. Ele pode reenviar documentos que já emitiu, portanto, projete seu coletor para lidar com documentos repetidos de forma idempotente.
Expõe o progresso de sincronização granular no nível da coleção.
stats().stats.operatorStats[0].targetStatsreports sync progress and document counts for each target collection. To learn more, see Verify Initial Sync Progress.
Diferenças de comportamento a serem consideradas
A sincronização de várias coleções initialSync difere da sincronização de coleção única de maneiras que afetam como você configura e opera seu processador de fluxo:
O paralelismo é global, não por coleção. A configuração
initialSync.parallelismlimita o número de leituras de partição simultâneas em todo o conjunto de coleções de destino, e não por coleção.O escopo de catchup segue o escopo da fonte. Após a fase de sincronização, o Atlas Stream Processing abre um fluxo de alterações que corresponde ao escopo da fonte: um fluxo de alterações em nível de banco de dados para uma fonte de banco de dados inteiro, um fluxo de alterações em nível de cluster para uma fonte de cluster inteiro ou um fluxo de alterações com filtro para uma lista explícita de coleção. Você não precisa configurar isso separadamente.
Uma falha na sincronização da coleção faz com que todo o processador falhe. Assim como na sincronização de coleção única, se o Atlas Stream Processing falhar ao sincronizar qualquer coleção da lista, todo o processador de stream falha.
Algumas configurações do lado da origem não são replicadas para o destino.
initialSyncnão replica índices, opções de coleção, como coleções limitadas, coleções de séries temporais, validadores ou agrupamentos padrão, ou definições de visualização. Crie-os no destino antes de iniciar o processador de fluxo. O Atlas Stream Processing também não descobre coleções que você cria depois que o processador de fluxo é iniciado; o conjunto de coleções a ser sincronizado é fixo nesse ponto.
Configurar a sincronização inicial de várias coleções
The following procedure uses two collections from the sample_analytics dataset: customers, which holds customer profiles, and accounts, which holds each customer's financial accounts. The procedure configures a stream processor that copies both collections from one Atlas cluster to another, then keeps them current as documents change.
Pré-requisitos
Antes de concluir este procedimento, você deve ter:
Um espaço de trabalho de Stream Processing com conexões Atlas para o cluster de origem e de destino. Para adicionar uma conexão, consulte Gerenciar conexões.
Um tier de processador que suporta o número de coleções que você planeja listar. Para aprender mais, consulte Alocação de recursos.
Execute os comandos nesta seção em seu cluster. Para se conectar, consulte Conectar-se a um cluster via mongosh.
Conclua as seguintes etapas para preparar as coleções de origem:
Carregue o conjunto de dados de amostra.
Este procedimento usa as coleções customers e accounts do conjunto de dados sample_analytics. Para saber como carregar dados de amostra, consulte Importar dados de amostra em sua implantação do Atlas.
Ative a pré e publicação-imagens do fluxo de alterações.
Habilite pré-imagens e imagens de publicação nas coleções customers e accounts, porque o estágio $source do procedimento define fullDocument: "required". Execute os seguintes comandos no cluster:
db.getSiblingDB("sample_analytics").runCommand({ collMod: "customers", changeStreamPreAndPostImages: { enabled: true } })
db.getSiblingDB("sample_analytics").runCommand({ collMod: "accounts", changeStreamPreAndPostImages: { enabled: true } })
Para saber mais sobre fullDocument: "required", consulte Fluxo de alterações da coleção do MongoDB.
Procedimento
Select the Atlas UI or mongosh to configure the stream processor.
Verificar o Progresso da Sincronização Inicial
Depois de iniciar o processador de fluxo, chame sp.<processor-name>.stats() com a opção verbose para visualizar o progresso da sincronização para cada coleção de destino. A entrada do operador de origem em stats.operatorStats relata um array targetStats com um elemento por coleção:
sp.replicate_analytics_sp.stats( { options: { verbose: true } } ).stats.operatorStats[0].targetStats
O campo initialSync.status de cada destino alterna entre pending, in_progress e completed enquanto o Atlas Stream Processing sincroniza essa coleção, ou relata failed se a sincronização falhar. estimatedDocs e copiedDocs relatam as contagens estimadas e concluídas de documentos para aquela coleção.
Para visualizar o progresso total em todas as coleções de destino, use o campo initialSync do próprio operador de origem, que soma estimatedDocs e copiedDocs em todas as coleções:
sp.replicate_analytics_sp.stats( { options: { verbose: true } } ).stats.operatorStats[0].initialSync
Exemplos
O procedimento anterior replica duas coleções entre clusters do Atlas. O exemplo a seguir aplica o mesmo pipeline a um conjunto diferente de coleções. Apenas os valores db e coll no estágio $source mudam.
Informações adicionais
Para aprender mais sobre os estágios e conceitos neste guia, consulte os seguintes recursos:
Para aprender sobre o estágio
$sourcee seusinitialSynccampos, consulte Fluxo de alterações da coleção do MongoDB.Para aprender como o tier do processador afeta o número de coleção que você pode sincronizar, consulte Alocação de recursos.
Para aprender como o Atlas Stream Processing faz checkpoint de uma sincronização em andamento, consulte Checkpoint.
Para saber como criar, iniciar, parar e monitorar processadores de fluxo, consulte Desenvolver e gerenciar processadores de fluxo.