Suporte ao feed de alterações no armazenamento de blobs do Azure

A finalidade do feed de alterações é fornecer logs de transação de todas as alterações que ocorrem nos blobs e nos metadados de blob da conta de armazenamento. O feed de alterações fornece o log ordenado, garantido, durável, imutável e de somente leitura dessas alterações. Os aplicativos cliente podem ler esses logs a qualquer momento, seja no streaming ou no modo de lote. Cada alteração gera exatamente uma entrada de log de transações, portanto, não será necessário gerenciar várias entradas de log para a mesma alteração. O feed de alterações permite que você crie por um custo reduzido, soluções eficientes e escalonáveis que processam eventos de alteração que ocorrem na conta de Armazenamento de Blobs.

Para saber como processar registros no feed de alterações, confira o artigo Processar o feed de alterações no Armazenamento de Blobs do Azure.

Como o feed de alterações funciona

Os registros de feed de alterações são armazenados como blobs em um contêiner especial na conta de armazenamento por um custo padrão de preço de blob. Você pode controlar o período de retenção desses arquivos com base em seus requisitos (consulte as condições da versão atual). Os eventos de alteração são anexados ao feed de alterações como registros na especificação de formato do Apache Avro: um formato compacto, rápido e binário que fornece estruturas de dados avançadas com esquema embutido. Esse formato é amplamente usado no ecossistema do Hadoop, pelo Stream Analytics e pelo Azure Data Factory.

Você pode processar esses logs de forma assíncrona, incremental ou completa. Qualquer número de aplicativos cliente podem ler de forma independente o feed de alterações em paralelo e em seu próprio ritmo. Aplicativos de análise, como o Apache Drill ou o Apache Spark, podem consumir logs diretamente como arquivos Avro, o que permite processá-los a um baixo custo, com largura de banda alta e sem precisar escrever um aplicativo personalizado.

O diagrama a seguir mostra como os registros são adicionados ao feed de alterações:

Diagram showing how the change feed works to provide an ordered log of changes to blobs

O suporte ao feed de alterações é adequado para cenários que processam dados com base em objetos que foram alterados. Por exemplo, os aplicativos podem:

  • Atualizar um índice secundário e fazer a sincronização com um cache, mecanismo de pesquisa ou outros cenários de gerenciamento de conteúdo.
  • Extrair insights e métricas de análise de negócios, com base nas alterações que ocorrem em seus objetos, seja na forma de streaming ou em modo em lote.
  • Armazenar, auditar e analisar alterações em seus objetos, em qualquer período, para segurança, conformidade ou inteligência para o gerenciamento de dados corporativos.
  • Criar soluções para fazer backup, espelhar ou replicar o estado do objeto em sua conta para gerenciamento de desastres ou conformidade.
  • Criar pipelines de aplicativos conectados que reajam a eventos de alteração ou agendar execuções com base em objetos criados ou alterados.

O feed de alterações é um recurso de pré-requisito para a Replicação de Objeto e a Restauração pontual de blobs de blocos.

Observação

O feed de alterações fornece um modelo de log durável e ordenado das alterações que ocorrem em um blob. As alterações são gravadas e disponibilizadas no log do feed de alterações em uma ordem de alguns minutos da alteração. Se seu aplicativo tiver que reagir a eventos muito mais rápido do que isso, considere usar os Eventos de Armazenamento de Blobs. Os Eventos de Armazenamento de Blobs fornecem eventos únicos em tempo real que permitem que seus Azure Functions ou aplicativos reajam rapidamente às alterações que ocorrem em um blob.

Habilitar e desabilitar o feed de alterações

Você precisa habilitar o feed de alterações em sua conta de armazenamento para começar a capturar e gravar as alterações. Desabilite o feed de alterações para parar de capturar as alterações. Habilite e desabilite as alterações usando os modelos do Azure Resource Manager no Portal ou no PowerShell.

Abaixo estão algumas considerações para ter em mente quando habilitar o feed de alterações.

  • Há apenas um feed de alteração para o serviço de blob em cada conta de armazenamento. Os registros do feed de alterações são armazenados no $blobchangefeed contêiner.

  • As alterações de criar, atualizar e excluir são capturadas somente no nível de serviço do blob.

  • O feed de alterações captura todas as alterações para todos os eventos disponíveis que ocorrem na conta. Os aplicativos cliente podem filtrar os tipos de evento conforme necessário. (Consulte as condições da versão atual).

  • Somente as contas padrão de v2 de uso geral, blob de blocos premium e armazenamento de Blob, podem habilitar o feed de alterações. Atualmente, contas com um namespace hierárquico habilitado não são compatíveis. As contas de armazenamento de uso geral v1 não são compatíveis, mas elas podem ser atualizadas para uso geral v2 sem tempo de inatividade. Para saber mais, consulte Atualizar para uma conta de armazenamento GPv2.

Habilite o feed de alterações em sua conta de armazenamento usando o portal do Azure:

  1. No portal do Azure, selecione a conta de armazenamento.

  2. Navegue até a opção Proteção de dados em Gerenciamento de dados.

  3. Em Acompanhamento, selecione Ativar o feed de alterações de blob.

  4. Selecione o botão Salvar para confirmar as configurações da proteção de dados.

    Screenshot showing how to enable change feed in Azure portal

Consumir o feed de alterações

O feed de alterações produz vários arquivos de log e de metadados. Esses arquivos estão localizados no contêiner $blobchangefeed da conta de armazenamento. O contêiner $blobchangefeed pode ser exibido por meio do portal do Azure ou por meio de Gerenciador de Armazenamento do Azure.

Os aplicativos cliente podem consumir o feed de alterações usando a biblioteca do processador do feed de alterações de blobs que é fornecida com o SDK do processador do feed de alterações. Para saber como processar registros no feed de alterações, confira Processar logs do feed de alterações no Armazenamento de Blobs do Azure.

Segmentos de feed de alterações

O feed de alterações é um log de alterações que são organizadas em segmentospor hora, mas acrescentadas e atualizadas em intervalos em alguns minutos. Esses segmentos são criados somente quando há eventos de alteração de blob que ocorrem nessa hora. Isso permite que seu aplicativo cliente consuma as alterações que ocorrem dentro de intervalos de tempo específicos sem precisar pesquisar em todo o log. Para saber mais, consulte as Especificações.

Um segmento disponível por hora do feed de alterações é descrito em um arquivo de manifesto que especifica os caminhos para os arquivos do feed de alterações para esse segmento. A listagem do diretório virtual $blobchangefeed/idx/segments/ mostra esses segmentos ordenados por hora. O caminho do segmento descreve o início do intervalo de tempo por hora que o segmento representa. Use essa lista para filtrar os segmentos de logs que são de seu interesse.

Name                                                                    Blob Type    Blob Tier      Length  Content Type    
----------------------------------------------------------------------  -----------  -----------  --------  ----------------
$blobchangefeed/idx/segments/1601/01/01/0000/meta.json                  BlockBlob                      584  application/json
$blobchangefeed/idx/segments/2019/02/22/1810/meta.json                  BlockBlob                      584  application/json
$blobchangefeed/idx/segments/2019/02/22/1910/meta.json                  BlockBlob                      584  application/json
$blobchangefeed/idx/segments/2019/02/23/0110/meta.json                  BlockBlob                      584  application/json

Observação

O $blobchangefeed/idx/segments/1601/01/01/0000/meta.json é criado automaticamente quando você habilita o feed de alterações. Ignore este arquivo. É um arquivo de inicialização que sempre está vazio.

O arquivo de manifesto do segmento (meta.json) mostra o caminho dos arquivos do feed de alterações para esse segmento na propriedade chunkFilePaths. Abaixo está um exemplo de um arquivo de manifesto.

{
    "version": 0,
    "begin": "2019-02-22T18:10:00.000Z",
    "intervalSecs": 3600,
    "status": "Finalized",
    "config": {
        "version": 0,
        "configVersionEtag": "0x8d698f0fba563db",
        "numShards": 2,
        "recordsFormat": "avro",
        "formatSchemaVersion": 1,
        "shardDistFnVersion": 1
    },
    "chunkFilePaths": [
        "$blobchangefeed/log/00/2019/02/22/1810/",
        "$blobchangefeed/log/01/2019/02/22/1810/"
    ],
    "storageDiagnostics": {
        "version": 0,
        "lastModifiedTime": "2019-02-22T18:11:01.187Z",
        "data": {
            "aid": "55e507bf-8006-0000-00d9-ca346706b70c"
        }
    }
}

Observação

O contêiner $blobchangefeed é exibido somente depois que você habilitar o recurso de feed de alterações em sua conta. Você precisa aguardar alguns minutos depois de habilitar o feed de alterações, antes de listar os blobs no contêiner.

Alterar registros de eventos

Os arquivos do feed de alterações contêm uma série de registros de eventos de alteração. Cada registro de evento de alteração corresponde a uma alteração em um blob individual. Os registros são serializados e gravados no arquivo usando a especificação de formato do Apache Avro. Os registros podem ser lidos usando a especificação de formato de arquivo do Avro. Há várias bibliotecas disponíveis para processar arquivos nesse formato.

Os arquivos do feed de alterações são armazenados no diretório virtual $blobchangefeed/log/ como blobs acrescentados. O primeiro arquivo de feed de alteração em cada caminho terá 00000 no nome do arquivo (por exemplo, 00000.avro). O nome de cada arquivo de log subsequente adicionado a esse caminho será incrementado em 1 (por exemplo: 00001.avro).

Esquemas de registro de evento

Para obter uma descrição detalhada de cada propriedade, consulte Esquema de evento de Grade de Eventos do Azure para Armazenamento de Blobs. Os eventos BlobPropertiesUpdated e BlobSnapshotCreated atualmente são exclusivos para o feed de alterações e ainda não são compatíveis com os eventos de armazenamento de blobs.

Observação

Os arquivos do feed de alterações de um segmento não aparecem imediatamente depois que um segmento é criado. A duração do atraso está dentro do intervalo normal de latência de publicação do feed de alterações, que é de alguns minutos após a alteração.

Esquema versão 1

Os seguintes tipos de evento podem ser capturados nos registros do feed de alterações com esquema versão 1:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de evento versão 1:

{
    "schemaVersion": 1,
    "topic": "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "subject": "/blobServices/default/containers/<container>/blobs/<blob>",
    "eventType": "BlobCreated",
    "eventTime": "2022-02-17T12:59:41.4003102Z",
    "id": "322343e3-8020-0000-00fe-233467066726",
    "data": {
        "api": "PutBlob",
        "clientRequestId": "f0270546-168e-4398-8fa8-107a1ac214d2",
        "requestId": "322343e3-8020-0000-00fe-233467000000",
        "etag": "0x8D9F2155CBF7928",
        "contentType": "application/octet-stream",
        "contentLength": 128,
        "blobType": "BlockBlob",
        "url": "https://www.myurl.com",
        "sequencer": "00000000000000010000000000000002000000000000001d",
        "storageDiagnostics": {
            "bid": "9d725a00-8006-0000-00fe-233467000000",
            "seq": "(2,18446744073709551615,29,29)",
            "sid": "4cc94e71-f6be-75bf-e7b2-f9ac41458e5a"
        }
    }
}

Esquema versão 3

Os seguintes tipos de evento podem ser capturados nos registros do feed de alterações com esquema versão 3:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de evento versão 3:

{
    "schemaVersion": 3,
    "topic": "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "subject": "/blobServices/default/containers/<container>/blobs/<blob>",
    "eventType": "BlobCreated",
    "eventTime": "2022-02-17T13:05:19.6798242Z",
    "id": "eefe8fc8-8020-0000-00fe-23346706daaa",
    "data": {
        "api": "PutBlob",
        "clientRequestId": "00c0b6b7-bb67-4748-a3dc-86464863d267",
        "requestId": "eefe8fc8-8020-0000-00fe-233467000000",
        "etag": "0x8D9F216266170DC",
        "contentType": "application/octet-stream",
        "contentLength": 128,
        "blobType": "BlockBlob",
        "url": "https://www.myurl.com",
        "sequencer": "00000000000000010000000000000002000000000000001d",
        "previousInfo": {
            "SoftDeleteSnapshot": "2022-02-17T13:08:42.4825913Z",
            "WasBlobSoftDeleted": "true",
            "BlobVersion": "2024-02-17T16:11:52.0781797Z",
            "LastVersion" : "2022-02-17T16:11:52.0781797Z",
            "PreviousTier": "Hot"
        },
        "snapshot": "2022-02-17T16:09:16.7261278Z",
        "blobPropertiesUpdated" : {
            "ContentLanguage" : {
                "current" : "pl-Pl",
                "previous" : "nl-NL"
            },
            "CacheControl" : {
                "current" : "max-age=100",
                "previous" : "max-age=99"
            },
            "ContentEncoding" : {
                "current" : "gzip, identity",
                "previous" : "gzip"
            },
            "ContentMD5" : {
                "current" : "Q2h1Y2sgSW51ZwDIAXR5IQ==",
                "previous" : "Q2h1Y2sgSW="
            },
            "ContentDisposition" : {
                "current" : "attachment",
                "previous" : ""
            },
            "ContentType" : {
                "current" : "application/json",
                "previous" : "application/octet-stream"
            }
        },
        "storageDiagnostics": {
            "bid": "9d726370-8006-0000-00ff-233467000000",
            "seq": "(2,18446744073709551615,29,29)",
            "sid": "4cc94e71-f6be-75bf-e7b2-f9ac41458e5a"
        }
    }
}

Esquema versão 4

Os seguintes tipos de evento podem ser capturados nos registros do feed de alterações com esquema versão 4:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated
  • BlobTierChanged
  • BlobAsyncOperationInitiated
  • RestorePointMarkerCreated

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de evento versão 4:

{
    "schemaVersion": 4,
    "topic": "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "subject": "/blobServices/default/containers/<container>/blobs/<blob>",
    "eventType": "BlobCreated",
    "eventTime": "2022-02-17T13:08:42.4835902Z",
    "id": "ca76bce1-8020-0000-00ff-23346706e769",
    "data": {
        "api": "PutBlob",
        "clientRequestId": "58fbfee9-6cf5-4096-9666-c42980beee65",
        "requestId": "ca76bce1-8020-0000-00ff-233467000000",
        "etag": "0x8D9F2169F42D701",
        "contentType": "application/octet-stream",
        "contentLength": 128,
        "blobType": "BlockBlob",
        "blobVersion": "2022-02-17T16:11:52.5901564Z",
        "containerVersion": "0000000000000001",
        "blobTier": "Archive",
        "url": "https://www.myurl.com",
        "sequencer": "00000000000000010000000000000002000000000000001d",
        "previousInfo": {
            "SoftDeleteSnapshot": "2022-02-17T13:08:42.4825913Z",
            "WasBlobSoftDeleted": "true",
            "BlobVersion": "2024-02-17T16:11:52.0781797Z",
            "LastVersion" : "2022-02-17T16:11:52.0781797Z",
            "PreviousTier": "Hot"
        },
        "snapshot": "2022-02-17T16:09:16.7261278Z",
        "blobPropertiesUpdated" : {
            "ContentLanguage" : {
                "current" : "pl-Pl",
                "previous" : "nl-NL"
            },
            "CacheControl" : {
                "current" : "max-age=100",
                "previous" : "max-age=99"
            },
            "ContentEncoding" : {
                "current" : "gzip, identity",
                "previous" : "gzip"
            },
            "ContentMD5" : {
                "current" : "Q2h1Y2sgSW51ZwDIAXR5IQ==",
                "previous" : "Q2h1Y2sgSW="
            },
            "ContentDisposition" : {
                "current" : "attachment",
                "previous" : ""
            },
            "ContentType" : {
                "current" : "application/json",
                "previous" : "application/octet-stream"
            }
        },
        "asyncOperationInfo": {
            "DestinationTier": "Hot",
            "WasAsyncOperation": "true",
            "CopyId": "copyId"
        },
        "storageDiagnostics": {
            "bid": "9d72687f-8006-0000-00ff-233467000000",
            "seq": "(2,18446744073709551615,29,29)",
            "sid": "4cc94e71-f6be-75bf-e7b2-f9ac41458e5a"
        }
    }
}

Versão do esquema 5

Os seguintes tipos de evento podem ser capturados nos registros do feed de alterações com esquema versão 5:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated
  • BlobTierChanged
  • BlobAsyncOperationInitiated

O seguinte exemplo mostra um registro de evento de alteração no formato JSON que usa o esquema de evento versão 5:

{
    "schemaVersion": 5,
    "topic": "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "subject": "/blobServices/default/containers/<container>/blobs/<blob>",
    "eventType": "BlobCreated",
    "eventTime": "2022-02-17T13:12:11.5746587Z",
    "id": "62616073-8020-0000-00ff-233467060cc0",
    "data": {
        "api": "PutBlob",
        "clientRequestId": "b3f9b39a-ae5a-45ac-afad-95ac9e9f2791",
        "requestId": "62616073-8020-0000-00ff-233467000000",
        "etag": "0x8D9F2171BE32588",
        "contentType": "application/octet-stream",
        "contentLength": 128,
        "blobType": "BlockBlob",
        "blobVersion": "2022-02-17T16:11:52.5901564Z",
        "containerVersion": "0000000000000001",
        "blobTier": "Archive",
        "url": "https://www.myurl.com",
        "sequencer": "00000000000000010000000000000002000000000000001d",
        "previousInfo": {
            "SoftDeleteSnapshot": "2022-02-17T13:12:11.5726507Z",
            "WasBlobSoftDeleted": "true",
            "BlobVersion": "2024-02-17T16:11:52.0781797Z",
            "LastVersion" : "2022-02-17T16:11:52.0781797Z",
            "PreviousTier": "Hot"
        },
        "snapshot" : "2022-02-17T16:09:16.7261278Z",
        "blobPropertiesUpdated" : {
            "ContentLanguage" : {
                "current" : "pl-Pl",
                "previous" : "nl-NL"
            },
            "CacheControl" : {
                "current" : "max-age=100",
                "previous" : "max-age=99"
            },
            "ContentEncoding" : {
                "current" : "gzip, identity",
                "previous" : "gzip"
            },
            "ContentMD5" : {
                "current" : "Q2h1Y2sgSW51ZwDIAXR5IQ==",
                "previous" : "Q2h1Y2sgSW="
            },
            "ContentDisposition" : {
                "current" : "attachment",
                "previous" : ""
            },
            "ContentType" : {
                "current" : "application/json",
                "previous" : "application/octet-stream"
            }
        },
        "asyncOperationInfo": {
            "DestinationTier": "Hot",
            "WasAsyncOperation": "true",
            "CopyId": "copyId"
        },
        "blobTagsUpdated": {
            "previous": {
                "Tag1": "Value1_3",
                "Tag2": "Value2_3"
            },
            "current": {
                "Tag1": "Value1_4",
                "Tag2": "Value2_4"
            }
        },
        "restorePointMarker": {
            "rpi": "cbd73e3d-f650-4700-b90c-2f067bce639c",
            "rpp": "cbd73e3d-f650-4700-b90c-2f067bce639c",
            "rpl": "test-restore-label",
            "rpt": "2022-02-17T13:56:09.3559772Z"
        },
        "storageDiagnostics": {
            "bid": "9d726db1-8006-0000-00ff-233467000000",
            "seq": "(2,18446744073709551615,29,29)",
            "sid": "4cc94e71-f6be-75bf-e7b2-f9ac41458e5a"
        }
    }
}

Versão do esquema 6

Os seguintes tipos de evento podem ser capturados nos registros do feed de alterações com esquema versão 6:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated
  • BlobTierChanged
  • BlobAsyncOperationInitiated

O esquema versão 6 adiciona suporte à camada fria.

O seguinte exemplo mostra um registro de evento de alteração no formato JSON que usa o esquema de evento versão 6:

{
    "schemaVersion": 6,
    "topic": "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>",
    "subject": "/blobServices/default/containers/<container>/blobs/<blob>",
    "eventType": "BlobCreated",
    "eventTime": "2023-10-11T13:12:11.5746587Z",
    "id": "62616073-8020-0000-00ff-233467060cc0",
    "data": {
        "api": "PutBlob",
        "clientRequestId": "b3f9b39a-ae5a-45ac-afad-95ac9e9f2791",
        "requestId": "62616073-8020-0000-00ff-233467000000",
        "etag": "0x8D9F2171BE32588",
        "contentType": "application/octet-stream",
        "contentLength": 128,
        "blobType": "BlockBlob",
        "blobVersion": "2023-10-11T16:11:52.5901564Z",
        "containerVersion": "0000000000000001",
        "blobTier": "Archive",
        "url": "https://www.myurl.com",
        "sequencer": "00000000000000010000000000000002000000000000001d",
        "previousInfo": {
            "SoftDeleteSnapshot": "2023-10-11T13:12:11.5726507Z",
            "WasBlobSoftDeleted": "true",
            "BlobVersion": "2024-02-17T16:11:52.0781797Z",
            "LastVersion" : "2023-10-11T16:11:52.0781797Z",
            "PreviousTier": "Hot"
        },
        "snapshot" : "2023-10-11T16:09:16.7261278Z",
        "blobPropertiesUpdated" : {
            "ContentLanguage" : {
                "current" : "pl-Pl",
                "previous" : "nl-NL"
            },
            "CacheControl" : {
                "current" : "max-age=100",
                "previous" : "max-age=99"
            },
            "ContentEncoding" : {
                "current" : "gzip, identity",
                "previous" : "gzip"
            },
            "ContentMD5" : {
                "current" : "Q2h1Y2sgSW51ZwDIAXR5IQ==",
                "previous" : "Q2h1Y2sgSW="
            },
            "ContentDisposition" : {
                "current" : "attachment",
                "previous" : ""
            },
            "ContentType" : {
                "current" : "application/json",
                "previous" : "application/octet-stream"
            }
        },
        "asyncOperationInfo": {
            "DestinationTier": "Hot",
            "WasAsyncOperation": "true",
            "CopyId": "copyId"
        },
        "blobTagsUpdated": {
            "previous": {
                "Tag1": "Value1_3",
                "Tag2": "Value2_3"
            },
            "current": {
                "Tag1": "Value1_4",
                "Tag2": "Value2_4"
            }
        },
        "restorePointMarker": {
            "rpi": "cbd73e3d-f650-4700-b90c-2f067bce639c",
            "rpp": "cbd73e3d-f650-4700-b90c-2f067bce639c",
            "rpl": "test-restore-label",
            "rpt": "2023-10-11T13:56:09.3559772Z"
        },
        "storageDiagnostics": {
            "bid": "9d726db1-8006-0000-00ff-233467000000",
            "seq": "(2,18446744073709551615,29,29)",
            "sid": "4cc94e71-f6be-75bf-e7b2-f9ac41458e5a"
        }
    }
}

Especificações

  • Os registros de eventos de alteração são acrescentados apenas ao feed de alterações. Depois que esses registros são acrescentados, eles se tornam imutáveis e a posição do registro é estável. Os aplicativos cliente podem manter seu próprio ponto de verificação na posição de leitura do feed de alterações.

  • Os registros de eventos de alteração são acrescentados dentro de uma ordem de alguns minutos após a alteração. Os aplicativos cliente podem optar por consumir os registros à medida que são acrescentados (acessando por streaming) ou acessar em lote em qualquer outro momento.

  • Os registros de eventos de alteração são ordenados por ordem de modificação por blob. A ordem das alterações dos blobs é indefinida no Armazenamento de Blobs do Azure. Todas as alterações em um segmento anterior são anteriores às alterações nos segmentos subsequentes.

  • Os registros de eventos de alteração são serializados no arquivo de log usando a especificação de formato do Apache Avro 1.8.2.

  • Altere os registros de evento em que o eventType tem um valor de Control são registros internos do sistema e não refletem uma alteração nos objetos da conta. Ignore esses registros.

  • Os valores no recipiente da propriedade storageDiagnostics são somente para uso interno e não são projetados para serem usados pelo aplicativo. Seus aplicativos não devem ter uma dependência contratual com esses dados. Ignore essas propriedades.

  • A hora representada pelo segmento é aproximada com os limites de 15 minutos. Portanto, para garantir o consumo de todos os registros dentro de um tempo especificado, consuma o segmento consecutivo da hora anterior e da seguinte.

  • Cada segmento pode ter um número diferente de chunkFilePaths devido ao particionamento interno do fluxo de log para gerenciar a taxa de transferência da publicação. Os arquivos de log em cada chunkFilePath têm a garantia de conter blobs mutuamente exclusivos e podem ser consumidos e processados em paralelo, sem violar a ordenação de modificações por blob durante a iteração.

  • Os Segmentos começam com o status Publishing. Depois que o acréscimo dos registros ao segmento for concluído, ele muda para Finalized. Os arquivos de log em qualquer segmento que seja datado após a data da propriedade LastConsumable no arquivo $blobchangefeed/meta/Segments.json não devem ser consumidos pelo seu aplicativo. Abaixo está um exemplo da propriedade LastConsumable no arquivo $blobchangefeed/meta/Segments.json:

{
    "version": 0,
    "lastConsumable": "2019-02-23T01:10:00.000Z",
    "storageDiagnostics": {
        "version": 0,
        "lastModifiedTime": "2019-02-23T02:24:00.556Z",
        "data": {
            "aid": "55e551e3-8006-0000-00da-ca346706bfe4",
            "lfz": "2019-02-22T19:10:00.000Z"
        }
    }
}

Condições e problemas conhecidos

Esta seção descreve os problemas e condições conhecidos na versão atual do feed de alterações.

  • Se você habilitar as regras de firewall para a sua conta de armazenamento, as solicitações de gerenciamento do ciclo de vida para excluir bolhas no contêiner $blobchangefeed poderão ser bloqueadas. Desbloqueie essas solicitações fornecendo exceções para serviços Microsoft confiáveis. Para obter mais informações, confira a seção Exceções em Configurar firewalls e redes virtuais.
  • A propriedade LastConsumable do arquivo segments.json não lista o primeiro segmento que o feed de alterações finaliza. Esse problema ocorre somente depois que o primeiro segmento é finalizado. Todos os segmentos subsequentes após a primeira hora são capturados com precisão na propriedade LastConsumable.
  • No momento, não é possível ver o contêiner $blobchangefeed ao chamar a API ListContainers. Você pode exibir o conteúdo chamando a API ListBlobs diretamente no contêiner $blobchangefeed.
  • O failover da conta de armazenamento de conta de armazenamento com redundância geográfica com o feed de alterações habilitado pode resultar em inconsistências entre os logs de feed de alterações e os dados de blob e/ou metadados. Para obter mais informações sobre essas inconsistências, consulte Alterar inconsistências de dados de blob e feed.
  • Você pode ver os erros 404 (Not Found) e 412 (Precondition Failed) relatados nos contêineres $blobchangefeed e $blobchangefeedsys. Você pode ignorar com segurança esses erros.
  • Eventos BlobDeleted não são gerados quando versões de blob ou instantâneos são excluídos. Um evento BlobDeleted é adicionado somente quando um blob base (raiz) é excluído.
  • Os registros de eventos são adicionados somente para alterações em blobs resultantes de solicitações para o ponto de extremidade de serviço blob (blob.core.windows.net). As alterações resultantes de solicitações para o ponto de extremidade do Data Lake Storage (dfs.core.windows.net) não são registradas e não aparecerão nos registros do feed de alterações.

Perguntas frequentes

Consulte Perguntas frequentes sobre o suporte ao feed de alterações.

Suporte a recursos

O suporte para esse recurso pode ser afetado ao habilitar o Data Lake Storage Gen2, o protocolo NFS (Sistema de Arquivos de Rede) 3.0 ou o protocolo SFTP (Protocolo de Transferência de Arquivo SSH). Se você tiver habilitado qualquer um desses recursos, consulte o Suporte a recursos de Armazenamento de Blobs nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.