Ondersteuning voor wijzigingenfeeds in Azure Blob Storage

Het doel van de wijzigingenfeed is het verstrekken van transactielogboeken van alle wijzigingen die plaatsvinden in de blobs en de blobmetagegevens in uw opslagaccount. De wijzigingenfeed biedt geordende, gegarandeerde, duurzame, onveranderbare logboeken met het kenmerk Alleen-lezen van deze wijzigingen. Clienttoepassingen kunnen deze logboeken op elk gewenst moment lezen, in streaming of in batchmodus. Elke wijziging genereert precies één transactielogboekvermelding, dus u hoeft niet meerdere logboekvermeldingen voor dezelfde wijziging te beheren. Met de wijzigingenfeed kunt u efficiënte en schaalbare oplossingen bouwen waarmee wijzigingsevenementen in uw Blob Storage-account tegen lage kosten worden verwerkt.

Zie Proceswijzigingsfeed in Azure Blob Storage voor meer informatie over het verwerken van records in de wijzigingenfeed.

Hoe de wijzigingenfeed werkt

Wijzigingenfeedrecords worden opgeslagen als blobs in een speciale container in uw opslagaccount tegen standaardprijskostenvoor blobs. U kunt de bewaarperiode van deze bestanden beheren op basis van uw vereisten (zie de voorwaarden van de huidige release). Wijzigingengebeurtenissen worden toegevoegd aan de wijzigingenfeed als records in de Apache Avro-indelingsspecificatie : een compacte, snelle, binaire indeling die uitgebreide gegevensstructuren met een inlineschema biedt. Deze indeling wordt veel gebruikt in het Hadoop-ecosysteem, Stream Analytics en Azure Data Factory.

U kunt deze logboeken asynchroon, incrementeel of volledig verwerken. Elk willekeurig aantal clienttoepassingen kan onafhankelijk van elkaar de wijzigingenfeed lezen, parallel en in hun eigen tempo. Analysetoepassingen zoals Apache Drill of Apache Spark kunnen logboeken rechtstreeks gebruiken als Avro-bestanden, waarmee u ze tegen lage kosten kunt verwerken, met hoge bandbreedte en zonder dat u een aangepaste toepassing hoeft te schrijven.

In het volgende diagram ziet u hoe records worden toegevoegd aan de wijzigingenfeed:

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

Ondersteuning voor wijzigingenfeeds is geschikt voor scenario's die gegevens verwerken op basis van objecten die zijn gewijzigd. Toepassingen kunnen bijvoorbeeld het volgende doen:

  • Een secundaire index bijwerken, synchroniseren met een cache, zoekmachine of andere scenario's voor inhoudsbeheer.
  • Inzichten en metrische gegevens van bedrijfsanalyses extraheren, op basis van wijzigingen die plaatsvinden in uw objecten, hetzij via streaming of in een batchmodus.
  • Wijzigingen in uw objecten opslaan, controleren en analyseren, gedurende een bepaalde periode, voor beveiliging, naleving of informatie voor het beheer van ondernemingsgegevens.
  • Bouw oplossingen voor het maken van back-ups, spiegelen of repliceren van objectstatussen in uw account voor noodbeheer of naleving.
  • Bouw verbonden toepassingspijplijnen die reageren op wijzigingen of uitvoeringen plannen op basis van het gemaakte of gewijzigde object.

Wijzigingenfeed is een vereiste functie voor objectreplicatie en herstel naar een bepaald tijdstip voor blok-blobs.

Notitie

Wijzigingenfeed biedt een duurzaam, geordend logboekmodel van de wijzigingen die zich voordoen in een blob. Wijzigingen worden geschreven en beschikbaar gemaakt in uw wijzigingenfeedlogboek binnen een volgorde van een paar minuten na de wijziging. Als uw toepassing veel sneller moet reageren op gebeurtenissen, kunt u in plaats daarvan Blob Storage-gebeurtenissen gebruiken. Blob Storage-gebeurtenissen bieden realtime eenmalige gebeurtenissen waarmee uw Azure Functions of toepassingen snel kunnen reageren op wijzigingen die zich voordoen in een blob.

De wijzigingenfeed in- en uitschakelen

U moet de wijzigingenfeed voor uw opslagaccount inschakelen om wijzigingen vast te leggen en op te nemen. Schakel de wijzigingenfeed uit om te stoppen met het vastleggen van wijzigingen. U kunt wijzigingen in- en uitschakelen met behulp van Azure Resource Manager-sjablonen in de portal of PowerShell.

Houd rekening met een paar dingen wanneer u de wijzigingenfeed inschakelt.

  • Er is slechts één wijzigingenfeed voor de blobservice in elk opslagaccount. Wijzigingenfeedrecords worden opgeslagen in de $blobchangefeed container.

  • Wijzigingen maken, bijwerken en verwijderen worden alleen vastgelegd op het niveau van de blobservice.

  • De wijzigingenfeed legt alle wijzigingen vast voor alle beschikbare gebeurtenissen die op het account plaatsvinden. Clienttoepassingen kunnen naar behoefte gebeurtenistypen uitfilteren. (Zie de voorwaarden van de huidige release).

  • Alleen standaard accounts voor algemeen gebruik v2, premium blok-blob en Blob Storage kunnen de wijzigingenfeed inschakelen. Accounts waarvoor een hiërarchische naamruimte is ingeschakeld, worden momenteel niet ondersteund. V1-opslagaccounts voor algemeen gebruik worden niet ondersteund, maar kunnen zonder downtime worden geüpgraded naar algemeen gebruik v2. Zie Upgraden naar een GPv2-opslagaccount voor meer informatie.

Schakel de wijzigingenfeed in voor uw opslagaccount met behulp van Azure Portal:

  1. Selecteer uw opslagaccount in Azure Portal.

  2. Navigeer naar de optie Gegevensbeveiliging onder Gegevensbeheer.

  3. Selecteer Onder Bijhouden de optie Blobwijzigingsfeed inschakelen.

  4. Kies de knop Opslaan om uw instellingen voor gegevensbeveiliging te bevestigen.

    Screenshot showing how to enable change feed in Azure portal

De wijzigingenfeed gebruiken

De wijzigingenfeed produceert verschillende metagegevens en logboekbestanden. Deze bestanden bevinden zich in de $blobchangefeed container van het opslagaccount. De $blobchangefeed container kan worden weergegeven via De Azure-portal of via Azure Storage Explorer.

Uw clienttoepassingen kunnen de wijzigingenfeed gebruiken met behulp van de processorbibliotheek voor de blob-wijzigingenfeed die wordt geleverd met de processor-SDK voor wijzigingenfeeds. Zie Logboeken voor wijzigingenfeeds verwerken in Azure Blob Storage voor meer informatie over het verwerken van records in de wijzigingenfeed.

Feedsegmenten wijzigen

De wijzigingenfeed is een logboek met wijzigingen die zijn ingedeeld in segmenten peruur, maar die om de paar minuten worden toegevoegd en bijgewerkt. Deze segmenten worden alleen gemaakt wanneer er in dat uur blobwijzigingsevenementen plaatsvinden. Hierdoor kan uw clienttoepassing wijzigingen gebruiken die zich binnen bepaalde tijdsbereiken voordoen zonder het hele logboek te hoeven doorzoeken. Zie de specificaties voor meer informatie.

Een beschikbaar uursegment van de wijzigingenfeed wordt beschreven in een manifestbestand dat de paden naar de wijzigingenfeedbestanden voor dat segment aangeeft. In de lijst van de $blobchangefeed/idx/segments/ virtuele map worden deze segmenten weergegeven die op tijd zijn gerangschikt. Het pad van het segment beschrijft het begin van het uurlijkse tijdsbereik dat het segment vertegenwoordigt. U kunt die lijst gebruiken om de segmenten van logboeken te filteren die voor u interessant zijn.

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

Notitie

De $blobchangefeed/idx/segments/1601/01/01/0000/meta.json wordt automatisch gemaakt wanneer u de wijzigingenfeed inschakelt. U kunt dit bestand veilig negeren. Het is een altijd leeg initialisatiebestand.

Het manifestbestand van het segment (meta.json) toont het pad van de wijzigingenfeedbestanden voor dat segment in de chunkFilePaths eigenschap. Hier volgt een voorbeeld van een segmentmanifestbestand.

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

Notitie

De $blobchangefeed container wordt pas weergegeven nadat u de functie voor de wijzigingenfeed hebt ingeschakeld voor uw account. U moet enkele minuten wachten nadat u de wijzigingenfeed hebt ingeschakeld voordat u de blobs in de container kunt vermelden.

Gebeurtenisrecords wijzigen

De wijzigingenfeedbestanden bevatten een reeks wijzigings gebeurtenisrecords. Elke wijzigings gebeurtenisrecord komt overeen met één wijziging in een afzonderlijke blob. De records worden geserialiseerd en naar het bestand geschreven met behulp van de Apache Avro-indelingsspecificatie . De records kunnen worden gelezen met behulp van de Avro-bestandsindelingspecificatie. Er zijn verschillende bibliotheken beschikbaar voor het verwerken van bestanden in die indeling.

Wijzigingenfeedbestanden worden opgeslagen in de $blobchangefeed/log/ virtuele map als toevoeg-blobs. Het eerste wijzigingenfeedbestand onder elk pad heeft 00000 de bestandsnaam (bijvoorbeeld 00000.avro). De naam van elk volgend logboekbestand dat aan dat pad is toegevoegd, wordt verhoogd met 1 (bijvoorbeeld: 00001.avro).

Schema's voor gebeurtenisrecords

Zie het Azure Event Grid-gebeurtenisschema voor Blob Storage voor een beschrijving van elke eigenschap. De gebeurtenissen BlobPropertiesUpdated en BlobSnapshotCreated zijn momenteel exclusief voor wijzigingenfeeds en worden nog niet ondersteund voor Blob Storage-gebeurtenissen.

Notitie

De wijzigingenfeedbestanden voor een segment worden niet direct weergegeven nadat een segment is gemaakt. De vertragingsduur valt binnen het normale interval van de publicatielatentie van de wijzigingenfeed, die binnen een paar minuten na de wijziging valt.

Schemaversie 1

De volgende gebeurtenistypen kunnen worden vastgelegd in de wijzigingenfeedrecords met schemaversie 1:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

In het volgende voorbeeld ziet u een gebeurtenisrecord wijzigen in JSON-indeling die gebruikmaakt van gebeurtenisschemaversie 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"
        }
    }
}

Schemaversie 3

De volgende gebeurtenistypen kunnen worden vastgelegd in de wijzigingenfeedrecords met schemaversie 3:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

In het volgende voorbeeld ziet u een wijzigings gebeurtenisrecord in JSON-indeling die gebruikmaakt van gebeurtenisschemaversie 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"
        }
    }
}

Schemaversie 4

De volgende gebeurtenistypen kunnen worden vastgelegd in de wijzigingenfeedrecords met schemaversie 4:

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

In het volgende voorbeeld ziet u een wijzigings gebeurtenisrecord in JSON-indeling die gebruikmaakt van gebeurtenisschemaversie 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"
        }
    }
}

Schemaversie 5

De volgende gebeurtenistypen kunnen worden vastgelegd in de wijzigingenfeedrecords met schemaversie 5:

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

In het volgende voorbeeld ziet u een wijzigings gebeurtenisrecord in JSON-indeling die gebruikmaakt van gebeurtenisschemaversie 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"
        }
    }
}

Schemaversie 6

De volgende gebeurtenistypen kunnen worden vastgelegd in de wijzigingenfeedrecords met schemaversie 6:

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

Schemaversie 6 voegt ondersteuning toe voor koude laag.

In het volgende voorbeeld ziet u een wijzigings gebeurtenisrecord in JSON-indeling die gebruikmaakt van gebeurtenisschemaversie 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"
        }
    }
}

Specificaties

  • Records voor wijzigingengebeurtenissen worden alleen toegevoegd aan de wijzigingenfeed. Zodra deze records zijn toegevoegd, zijn ze onveranderbaar en is recordpositie stabiel. Clienttoepassingen kunnen hun eigen controlepunt behouden op de leespositie van de wijzigingenfeed.

  • Wijzigingsgebeurtenissenrecords worden toegevoegd binnen een volgorde van enkele minuten van de wijziging. Clienttoepassingen kunnen ervoor kiezen om records te gebruiken wanneer ze worden toegevoegd voor streamingtoegang of in bulksgewijs op een ander moment.

  • Wijzigings gebeurtenisrecords worden gerangschikt op wijzigingsvolgorde per blob. Volgorde van wijzigingen in blobs is niet gedefinieerd in Azure Blob Storage. Alle wijzigingen in een eerder segment zijn vóór eventuele wijzigingen in volgende segmenten.

  • Wijzigingsgebeurtenisrecords worden geserialiseerd in het logboekbestand met behulp van de indelingsspecificatie van Apache Avro 1.8.2 .

  • Gebeurtenisrecords wijzigen waarvan de eventType waarde Control interne systeemrecords zijn en geen wijziging in objecten in uw account weergeven. U kunt deze records veilig negeren.

  • Waarden in de storageDiagnostics eigenschappentas zijn alleen bedoeld voor intern gebruik en niet ontworpen voor gebruik door uw toepassing. Uw toepassingen mogen geen contractuele afhankelijkheid van die gegevens hebben. U kunt deze eigenschappen veilig negeren.

  • De tijd die wordt vertegenwoordigd door het segment is bij benadering met de grenzen van 15 minuten. Om ervoor te zorgen dat alle records binnen een opgegeven tijd worden gebruikt, verbruikt u het opeenvolgende vorige en volgende uursegment.

  • Elk segment kan een ander aantal chunkFilePaths hebben vanwege interne partitionering van de logboekstroom voor het beheren van de publicatiedoorvoer. De logboekbestanden in elk chunkFilePath logboek bevatten gegarandeerd wederzijds exclusieve blobs en kunnen parallel worden gebruikt en verwerkt zonder de volgorde van wijzigingen per blob tijdens de iteratie te schenden.

  • De segmenten beginnen in Publishing de status. Zodra het toevoegen van de records aan het segment is voltooid, is Finalizeddit . Logboekbestanden in een segment dat is gedateerd na de datum van de LastConsumable eigenschap in het $blobchangefeed/meta/Segments.json bestand, mogen niet worden gebruikt door uw toepassing. Hier volgt een voorbeeld van de LastConsumableeigenschap in een $blobchangefeed/meta/Segments.json bestand:

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

Voorwaarden en bekende problemen

In deze sectie worden bekende problemen en voorwaarden in de huidige release van de wijzigingenfeed beschreven.

  • Als u firewallregels voor uw opslagaccount inschakelt, worden aanvragen voor levenscyclusbeheer om blobs binnen $blobchangefeed container te verwijderen mogelijk geblokkeerd. U kunt deze aanvragen deblokkeren door uitzonderingen op te geven voor vertrouwde Microsoft-services. Zie de sectie Uitzonderingen in Firewalls en virtuele netwerken configureren voor meer informatie.
  • De LastConsumable eigenschap van het bestand segment.json vermeldt niet het eerste segment dat de wijzigingenfeed voltooit. Dit probleem treedt pas op nadat het eerste segment is voltooid. Alle volgende segmenten na het eerste uur worden nauwkeurig vastgelegd in de LastConsumable eigenschap.
  • U kunt de $blobchangefeed container momenteel niet zien wanneer u de ListContainers-API aanroept. U kunt de inhoud bekijken door de ListBlobs-API rechtstreeks op de $blobchangefeed container aan te roepen.
  • Failover van opslagaccounts van geografisch redundante opslagaccounts waarvoor de wijzigingenfeed is ingeschakeld, kan leiden tot inconsistenties tussen de wijzigingenfeedlogboeken en de blobgegevens en/of metagegevens. Zie Wijzigingenfeed- en blobgegevensconsistentie voor meer informatie over dergelijke inconsistenties.
  • Mogelijk ziet u 404-fouten (niet gevonden) en 412 (voorwaarde mislukt) die zijn gerapporteerd op de $blobchangefeed- en $blobchangefeedsys-containers. U kunt deze fouten negeren.
  • BlobDeleted-gebeurtenissen worden niet gegenereerd wanneer blobversies of momentopnamen worden verwijderd. Een BlobDeleted-gebeurtenis wordt alleen toegevoegd wanneer een basis-blob (hoofdblob) wordt verwijderd.
  • Gebeurtenisrecords worden alleen toegevoegd voor wijzigingen in blobs die het gevolg zijn van aanvragen naar het Blob Service-eindpunt (blob.core.windows.net). Wijzigingen die het gevolg zijn van aanvragen naar het Data Lake Storage-eindpunt (dfs.core.windows.net) worden niet geregistreerd en worden niet weergegeven in wijzigingenfeedrecords.

Veelgestelde vragen

Zie Veelgestelde vragen over ondersteuning voor wijzigingenfeeds.

Functieondersteuning

Ondersteuning voor deze functie kan worden beïnvloed door het inschakelen van Data Lake Storage Gen2, het NFS-protocol (Network File System) 3.0 of het SSH File Transfer Protocol (SFTP). Als u een van deze mogelijkheden hebt ingeschakeld, raadpleegt u de ondersteuning voor Blob Storage-functies in Azure Storage-accounts om ondersteuning voor deze functie te beoordelen.