Partilhar via


Alterar o suporte de feed no Armazenamento de Blobs do Azure

O objetivo do feed de alterações é fornecer registos de transações de todas as alterações que ocorrem nos blobs e nos metadados de blob na sua conta de armazenamento. O feed de alterações fornece logs dessas alterações que são ordenados, garantidos, duráveis, imutáveis e somente leitura. Os aplicativos cliente podem ler esses logs a qualquer momento, seja em streaming ou no modo de lote. Cada alteração gera exatamente uma entrada de log de transações, portanto, você não precisará gerenciar várias entradas de log para a mesma alteração. O feed de alterações permite que você crie soluções eficientes e escaláveis que processam eventos de alteração que ocorrem em sua conta de armazenamento de Blob a um baixo custo.

Para saber como processar registos no feed de alterações, consulte Processar feed de alterações no Armazenamento de Blobs do Azure.

Como funciona o feed de alterações

Os registos de feed de alteração são armazenados como blobs em um contentor especial na sua conta de armazenamento pelo custo de preço de blob padrão. 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 do formato Apache Avro: um formato compacto, rápido e binário que fornece estruturas de dados ricas com esquema embutido. Esse formato é amplamente usado no ecossistema Hadoop, no Stream Analytics e no Azure Data Factory.

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

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

Diagrama mostrando como o feed de alterações funciona para fornecer um log ordenado de alterações em blobs

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

  • Atualizar um índice secundário, sincronizar com uma cache, mecanismo de pesquisa ou qualquer outro cenário de gestão de conteúdo.
  • Extrair informações e métricas de análise de negócios com base nas alterações que ocorram aos seus objetos, quer em modo de streaming, quer em modo de lote.
  • Armazenar, auditar e analisar alterações nos objetos, ao longo de qualquer período de tempo, por motivos de segurança, conformidade ou inteligência para a gestão de dados empresariais.
  • Crie soluções para fazer backup, espelhar ou replicar o estado do objeto em sua conta para gerenciamento de desastres ou conformidade.
  • Crie pipelines de aplicativos conectados que reagem a eventos de alteração ou agendam execuções com base no objeto criado ou alterado.

O feed de alterações é uma funcionalidade pré-requisito para replicação de objetos e restauração em um ponto no tempo para blobs de bloco.

Nota

O fluxo de alterações fornece um modelo de log ordenado e durável das alterações que ocorrem num blob. As alterações são escritas e disponibilizadas no seu registo de feed de alterações dentro de alguns minutos após a alteração. Se o seu aplicativo tiver que reagir a eventos muito mais rápido do que isso, considere usar eventos de Blob Storage em vez disso. Os Eventos de Armazenamento de Blob fornecem eventos únicos em tempo real que permitem que suas Funções ou aplicativos do Azure reajam rapidamente às alterações que ocorrem em um blob.

Ativar e desativar o feed de alterações

Você deve habilitar o feed de alterações em sua conta de armazenamento para começar a capturar e registrar as alterações. Desative o feed de alterações para parar de capturar alterações. Você pode habilitar e desabilitar alterações usando modelos do Azure Resource Manager no Portal ou PowerShell.

Aqui estão algumas coisas que você deve ter em mente ao ativar o feed de alterações.

  • Há apenas um feed de alterações para o serviço de blob em cada conta de armazenamento. Os registos de alterações são armazenados no contentor $blobchangefeed.

  • As alterações Criar, Atualizar e Excluir são capturadas apenas ao nível do serviço 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 eventos conforme necessário. (Veja as condições da versão atual).

  • Somente contas de armazenamento de Blob padrão v2 de uso geral, blob de bloco premium e Blob podem habilitar o feed de alterações. Atualmente, não há suporte para contas com um namespace hierárquico habilitado. Não há suporte para contas de armazenamento v1 de uso geral, mas podem ser atualizadas para v2 de uso geral sem tempo de inatividade, consulte Atualizar para uma conta de armazenamento GPv2 para obter mais informações.

  • Por padrão, o Change Feed retém logs indefinidamente. O período de retenção para logs do Change Feed pode ser configurado em termos de dias, permitindo definir por quanto tempo os logs são preservados antes da exclusão automática. Esse comportamento de retenção pode ser modificado durante a configuração inicial do Feed de Alterações ou, posteriormente, por meio da opção Proteção de Dados na seção Gerenciamento de Dados no portal do Azure.

  • Para excluir todos os logs existentes do Feed de Alterações, atualize o período de retenção para 1 dia e, em seguida, desative o recurso Feed de Alterações.

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

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

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

  3. Em Rastreamento, selecione Ativar feed de alteração de blob.

  4. Escolha o botão Salvar para confirmar suas configurações de proteção de dados.

    Captura de ecrã a mostrar como ativar o feed de alterações no portal do Azure

Consumir o feed de mudança

O feed de alterações produz vários metadados e arquivos de log. 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 do Gerenciador de Armazenamento do Azure.

Os seus aplicativos cliente podem consumir o feed de alterações utilizando a biblioteca de processador fornecida com o SDK correspondente. Para saber como processar registos no feed de alterações, consulte Processar logs de feed de alterações no Armazenamento de Azure Blob.

Alterar segmentos do feed

O feed de alterações é um log de alterações organizadas em segmentos horários, mas anexadas e atualizadas a cada poucos minutos. Esses segmentos são criados somente quando há eventos de alteração de blob que ocorrem durante essa hora. Isso permite que seu aplicativo cliente consuma alterações que ocorrem dentro de intervalos de tempo específicos sem ter que pesquisar todo o log. Para saber mais, consulte as especificações.

Um segmento horário disponível do feed de alterações é descrito em um arquivo de manifesto que especifica os caminhos para os arquivos de feed de alterações desse segmento. A listagem do $blobchangefeed/idx/segments/ diretório virtual mostra esses segmentos ordenados por tempo. O caminho do segmento descreve o início do intervalo de tempo horário que o segmento representa. Você pode usar 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

Nota

O $blobchangefeed/idx/segments/1601/01/01/0000/meta.json é criado automaticamente quando você ativa o feed de alterações. Você pode ignorar esse arquivo com segurança. É um arquivo de inicialização sempre vazio.

O arquivo de manifesto de segmento (meta.json) mostra o caminho dos arquivos de feed de alteração para esse segmento na propriedade chunkFilePaths. Aqui está um exemplo de um ficheiro de manifest de segmento.

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

Nota

O $blobchangefeed contêiner aparece somente depois que você ativa o recurso de feed de alterações na sua conta. Você terá que esperar alguns minutos depois de ativar o feed de alterações antes de poder listar os blobs no contêiner.

Alterar registos de eventos

Os arquivos de 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 Apache Avro . Os registros podem ser lidos usando a especificação de formato de arquivo Avro. Existem várias bibliotecas disponíveis para processar arquivos nesse formato.

Os arquivos de feed de alteração são armazenados no $blobchangefeed/log/ diretório virtual como blobs de acréscimo. O primeiro arquivo de feed de alterações 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 eventos

Para obter uma descrição de cada propriedade, consulte Esquema de eventos da Grade de Eventos do Azure para Armazenamento de Blob. Os eventos BlobPropertiesUpdated e BlobSnapshotCreated são atualmente exclusivos para alterar feed e ainda não têm suporte para Eventos de Armazenamento de Blob.

Nota

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

Esquema versão 1

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

  • Blob Criado
  • Blob Eliminado
  • PropriedadesDoBlobAtualizadas
  • BlobSnapshotCreated

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de eventos 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 eventos podem ser capturados nos registros de feed de alterações com o esquema versão 3:

  • Blob Criado
  • Blob Eliminado
  • PropriedadesDoBlobAtualizadas
  • BlobSnapshotCreated

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de eventos 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 eventos podem ser capturados nos registros de feed de alterações com o esquema versão 4:

  • Blob Criado
  • Blob Eliminado
  • PropriedadesDoBlobAtualizadas
  • BlobSnapshotCreated
  • NívelDeBlobAlterado
  • OperaçãoAssíncronaBlobIniciada
  • MarcadorDePontoDeRestauraçãoCriado

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de eventos 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"
        }
    }
}

Esquema versão 5

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

  • Blob Criado
  • Blob Eliminado
  • PropriedadesDoBlobAtualizadas
  • BlobSnapshotCreated
  • NívelDeBlobAlterado
  • OperaçãoAssíncronaBlobIniciada

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de eventos 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"
        }
    }
}

Esquema versão 6

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

  • Blob Criado
  • Blob Eliminado
  • PropriedadesDoBlobAtualizadas
  • BlobSnapshotCreated
  • NívelDeBlobAlterado
  • OperaçãoAssíncronaBlobIniciada

A versão 6 do esquema adiciona suporte para a camada fria.

O exemplo a seguir mostra um registro de evento de alteração no formato JSON que usa o esquema de eventos 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 anexados apenas ao feed de alterações. Uma vez acrescentados, estes registos são imutáveis e a posição do registo é 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 registos de eventos de alteração são acrescentados num espaço de poucos minutos após a alteração. As aplicações cliente podem optar por consumir dados à medida que são anexados para acesso em streaming ou em grandes quantidades a 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 entre blobs é indefinida no Armazenamento de Blobs do Azure. Todas as alterações num segmento anterior são anteriores a quaisquer 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 Apache Avro 1.8.2 .

  • Altere os registos de eventos em que o eventType tem um valor de Control; são registos internos do sistema e não refletem uma alteração aos objetos na sua conta. Você pode ignorar esses registros com segurança.

  • Os valores no saco storageDiagnostics de propriedades são apenas para uso interno e não foram projetados para uso pelo seu aplicativo. Seus aplicativos não devem ter uma dependência contratual desses dados. Você pode ignorar essas propriedades com segurança.

  • O tempo representado pelo segmento é aproximado com limites de 15 minutos. Portanto, para garantir o consumo de todos os registos dentro de um tempo especificado, consuma os segmentos consecutivos da hora anterior e seguinte.

  • Cada segmento pode ter um número diferente de chunkFilePaths devido ao particionamento interno do fluxo de log para gerir a taxa de transferência de 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 ordem das modificações de cada blob durante a iteração.

  • Os segmentos começam em Publishing status. Uma vez concluída a anexação dos registos ao segmento, será Finalized. Os arquivos de log em qualquer segmento datado após a LastConsumable data da propriedade no $blobchangefeed/meta/Segments.json arquivo não devem ser consumidos pelo seu aplicativo. Aqui está um exemplo da LastConsumablepropriedade num $blobchangefeed/meta/Segments.json arquivo.

{
    "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 problemas e condições conhecidos na versão atual do feed de alterações.

  • Se você habilitar as regras de firewall para sua conta de armazenamento, as solicitações de gerenciamento do ciclo de vida para excluir blobs dentro $blobchangefeed contêiner poderão ser bloqueadas. Pode desbloquear estes pedidos ao indicar exceções para serviços Microsoft fidedignos. Para obter mais informações, consulte a seção Exceções em Configurar firewalls e redes virtuais.
  • A LastConsumable propriedade 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 na propriedade LastConsumable com precisão.
  • No momento, você não pode ver o contêiner $blobchangefeed quando chama a API ListContainers. Você pode exibir o conteúdo chamando a API ListBlobs no contêiner $blobchangefeed diretamente.
  • O failover de contas de armazenamento geograficamente redundantes com o feed de alterações habilitado pode resultar em inconsistências entre os logs do feed de alterações e os dados e/ou metadados de blob. Para obter mais informações sobre essas inconsistências, consulte Alterar inconsistências de dados de feed e blob.
  • Você pode ver erros 404 (Não encontrado) e 412 (Falha na pré-condição) relatados nos contêineres $blobchangefeed . Pode ignorar com segurança estes erros.
  • Os eventos BlobDeleted não são gerados quando versões de blob ou snapshots 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 ao ponto de extremidade do Serviço de Blob (blob.core.windows.net). As alterações resultantes de solicitações para o ponto de extremidade do Armazenamento Data Lake (dfs.core.windows.net) não são registadas e não aparecerão nos registos do feed de alterações.

Perguntas mais frequentes (FAQ)

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

Suporte de funcionalidades

O suporte para esse recurso pode ser afetado pela habilitação do Data Lake Storage Gen2, do protocolo NFS (Network File System) 3.0 ou do SSH File Transfer Protocol (SFTP). Se você habilitou qualquer um desses recursos, consulte Suporte ao recurso de Armazenamento de Blob nas contas de Armazenamento do Azure para avaliar o suporte para esse recurso.