Obsługa zestawienia zmian w usłudze Azure Blob Storage

Celem zestawienia zmian jest zapewnienie dzienników transakcji wszystkich zmian występujących w obiektach blob i metadanych obiektu blob na koncie magazynu. Zestawienie zmian zapewnia uporządkowany, gwarantowany, trwały, niezmienny, tylko do odczytu dziennik tych zmian. Aplikacje klienckie mogą odczytywać te dzienniki w dowolnym momencie w trybie przesyłania strumieniowego lub w trybie wsadowym. Każda zmiana generuje dokładnie jeden wpis dziennika transakcji, więc nie trzeba zarządzać wieloma wpisami dziennika dla tej samej zmiany. Kanał informacyjny zmian umożliwia tworzenie wydajnych i skalowalnych rozwiązań, które przetwarzają zdarzenia zmian występujące na koncie usługi Blob Storage przy niskich kosztach.

Aby dowiedzieć się, jak przetwarzać rekordy w kanale informacyjnym zmian, zobacz Zestawienie zmian procesów w usłudze Azure Blob Storage.

Jak działa kanał informacyjny zmian

Rekordy zestawienia zmian są przechowywane jako obiekty blob w specjalnym kontenerze na koncie magazynu przy standardowym koszcie cen obiektów blob. Okres przechowywania tych plików można kontrolować na podstawie wymagań (zobacz warunki bieżącej wersji). Zdarzenia zmiany są dołączane do zestawienia zmian jako rekordy w specyfikacji formatu Apache Avro : kompaktowy, szybki format binarny, który zapewnia zaawansowane struktury danych ze schematem wbudowanym. Ten format jest powszechnie używany w ekosystemie hadoop, usłudze Stream Analytics i usłudze Azure Data Factory.

Te dzienniki można przetwarzać asynchronicznie, przyrostowo lub w całości. Dowolna liczba aplikacji klienckich może niezależnie odczytywać zestawienie zmian, równolegle i we własnym tempie. Aplikacje analityczne, takie jak Apache Drill lub Apache Spark , mogą korzystać z dzienników bezpośrednio jako plików Avro, co pozwala przetwarzać je w niskich kosztach, z wysoką przepustowością i bez konieczności pisania aplikacji niestandardowej.

Na poniższym diagramie przedstawiono sposób dodawania rekordów do zestawienia zmian:

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

Obsługa zestawienia zmian jest odpowiednia dla scenariuszy, które przetwarzają dane na podstawie zmienionych obiektów. Na przykład aplikacje mogą:

  • Aktualizowanie indeksu pomocniczego, synchronizacja z pamięcią podręczną, wyszukiwarką lub innymi scenariuszami zarządzania zawartością.
  • Wyodrębnianie szczegółowych informacji i metryk analityki biznesowej na podstawie zmian zachodzących w obiektach, w trybie strumieniowym lub wsadowym.
  • Przechowywanie, inspekcja i analizowanie zmian w obiektach, w dowolnym okresie, pod kątem bezpieczeństwa, zgodności lub analizy dla zarządzania danymi w przedsiębiorstwie.
  • Twórz rozwiązania do tworzenia kopii zapasowych, dublowania lub replikowania stanu obiektu na koncie na potrzeby zarządzania awariami lub zgodności.
  • Twórz połączone potoki aplikacji, które reagują na zmiany zdarzeń lub zaplanują wykonywanie na podstawie utworzonego lub zmienionego obiektu.

Zestawienie zmian jest funkcją wymagań wstępnych dla replikacji obiektów i przywracania do punktu w czasie dla blokowych obiektów blob.

Uwaga

Zestawienie zmian zapewnia trwały, uporządkowany model dziennika zmian występujących w obiekcie blob. Zmiany są zapisywane i udostępniane w dzienniku zestawienia zmian w ciągu kilku minut od zmiany. Jeśli aplikacja musi reagować na zdarzenia znacznie szybciej, rozważ użycie zdarzeń usługi Blob Storage. Zdarzenia usługi Blob Storage udostępnia zdarzenia jednorazowe w czasie rzeczywistym, które umożliwiają usłudze Azure Functions lub aplikacjom szybkie reagowanie na zmiany występujące w obiekcie blob.

Włączanie i wyłączanie zestawienia zmian

Musisz włączyć kanał informacyjny zmian na koncie magazynu, aby rozpocząć przechwytywanie i rejestrowanie zmian. Wyłącz zestawienie zmian, aby zatrzymać przechwytywanie zmian. Zmiany można włączać i wyłączać przy użyciu szablonów usługi Azure Resource Manager w portalu lub programie PowerShell.

Poniżej przedstawiono kilka kwestii, o których należy pamiętać po włączeniu zestawienia zmian.

  • Na każdym koncie magazynu jest dostępny tylko jeden kanał informacyjny zmian dla usługi blob. Rekordy zestawienia zmian są przechowywane w kontenerze $blobchangefeed .

  • Zmiany tworzenia, aktualizowania i usuwania są przechwytywane tylko na poziomie usługi obiektów blob.

  • Źródło zmian przechwytuje wszystkie zmiany dla wszystkich dostępnych zdarzeń występujących na koncie. Aplikacje klienckie mogą filtrować typy zdarzeń zgodnie z wymaganiami. (Zobacz warunki bieżącej wersji).

  • Tylko standardowe konta ogólnego przeznaczenia w wersji 2, blokowych obiektów blob w warstwie Premium i konta usługi Blob Storage mogą włączać zestawienie zmian. Konta z włączoną hierarchiczną przestrzenią nazw nie są obecnie obsługiwane. Konta magazynu ogólnego przeznaczenia w wersji 1 nie są obsługiwane, ale można je uaktualnić do ogólnego przeznaczenia w wersji 2 bez przestojów, zobacz Uaktualnianie do konta magazynu GPv2, aby uzyskać więcej informacji.

Włącz kanał informacyjny zmian na koncie magazynu przy użyciu witryny Azure Portal:

  1. W witrynie Azure Portal wybierz konto magazynu.

  2. Przejdź do opcji Ochrona danych w obszarze Zarządzanie danymi.

  3. W obszarze Śledzenie wybierz pozycję Włącz źródło zmian obiektów blob.

  4. Wybierz przycisk Zapisz, aby potwierdzić ustawienia ochrony danych.

    Screenshot showing how to enable change feed in Azure portal

Korzystanie ze zestawienia zmian

Źródło zmian tworzy kilka metadanych i plików dziennika. Te pliki znajdują się w kontenerze $blobchangefeed konta magazynu. Kontener $blobchangefeed można wyświetlić za pośrednictwem witryny Azure Portal lub za pośrednictwem Eksplorator usługi Azure Storage.

Aplikacje klienckie mogą korzystać ze zestawienia zmian przy użyciu biblioteki procesora zestawienia zmian obiektów blob, która jest dostarczana z zestawem SDK procesora zestawienia zmian. Aby dowiedzieć się, jak przetwarzać rekordy w kanale zmian, zobacz Przetwarzanie dzienników zestawienia zmian w usłudze Azure Blob Storage.

Zmienianie segmentów kanału informacyjnego

Zestawienie zmian to dziennik zmian, które są zorganizowane w segmenty godzinowe, ale dołączane do i aktualizowane co kilka minut. Te segmenty są tworzone tylko wtedy, gdy w tej godzinie wystąpią zdarzenia zmiany obiektu blob. Dzięki temu aplikacja kliencka może korzystać ze zmian występujących w określonych zakresach czasu bez konieczności przeszukiwania całego dziennika. Aby dowiedzieć się więcej, zobacz Specyfikacje.

Dostępny segment godzinowy zestawienia zmian jest opisany w pliku manifestu, który określa ścieżki do plików zestawienia zmian dla tego segmentu. Lista katalogu wirtualnego $blobchangefeed/idx/segments/ zawiera te segmenty uporządkowane według czasu. Ścieżka segmentu opisuje początek godzinowego zakresu czasu reprezentowanego przez segment. Możesz użyć tej listy, aby odfiltrować segmenty dzienników, które cię interesują.

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

Uwaga

Element $blobchangefeed/idx/segments/1601/01/01/0000/meta.json jest tworzony automatycznie po włączeniu zestawienia zmian. Możesz bezpiecznie zignorować ten plik. Jest to zawsze pusty plik inicjowania.

Plik manifestu segmentu (meta.json) przedstawia ścieżkę plików zestawienia zmian dla tego segmentu chunkFilePaths we właściwości . Oto przykład pliku manifestu segmentu.

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

Uwaga

Kontener $blobchangefeed jest wyświetlany dopiero po włączeniu funkcji zestawienia zmian na twoim koncie. Zanim będzie można wyświetlić listę obiektów blob w kontenerze, musisz poczekać kilka minut po włączeniu zestawienia zmian.

Zmienianie rekordów zdarzeń

Pliki zestawienia zmian zawierają serię rekordów zdarzeń zmiany. Każdy rekord zdarzenia zmiany odpowiada jednej zmianie pojedynczego obiektu blob. Rekordy są serializowane i zapisywane w pliku przy użyciu specyfikacji formatu Apache Avro . Rekordy można odczytywać przy użyciu specyfikacji formatu pliku Avro. Istnieje kilka bibliotek dostępnych do przetwarzania plików w tym formacie.

Pliki zestawienia zmian są przechowywane w katalogu wirtualnym $blobchangefeed/log/ jako uzupełnialne obiekty blob. Pierwszy plik zestawienia zmian w każdej ścieżce będzie miał 00000 nazwę pliku (na przykład 00000.avro). Nazwa każdego kolejnego pliku dziennika dodanego do tej ścieżki zwiększy się o 1 (na przykład: 00001.avro).

Schematy rekordów zdarzeń

Opis każdej właściwości znajduje się w temacie Schemat zdarzeń usługi Azure Event Grid dla usługi Blob Storage. Zdarzenia BlobPropertiesUpdated i BlobSnapshotCreated są obecnie przeznaczone wyłącznie do zmiany źródła danych i nie są jeszcze obsługiwane w przypadku zdarzeń usługi Blob Storage.

Uwaga

Pliki zestawienia zmian dla segmentu nie są natychmiast wyświetlane po utworzeniu segmentu. Długość opóźnienia mieści się w normalnym interwale opóźnienia publikowania zestawienia zmian, który mieści się w ciągu kilku minut od zmiany.

Schemat w wersji 1

Następujące typy zdarzeń mogą być przechwytywane w rekordach zestawienia zmian w schemacie w wersji 1:

  • Obiekt blobTworzenie
  • Obiekt blobDeleted
  • BlobPropertiesUpdated
  • Obiekt blobSnapshotTworzenie

W poniższym przykładzie pokazano rekord zdarzenia zmiany w formacie JSON, który używa schematu zdarzeń w wersji 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"
        }
    }
}

Wersja schematu 3

Następujące typy zdarzeń mogą być przechwytywane w rekordach zestawienia zmian przy użyciu schematu w wersji 3:

  • Obiekt blobTworzenie
  • Obiekt blobDeleted
  • BlobPropertiesUpdated
  • Obiekt blobSnapshotTworzenie

W poniższym przykładzie pokazano rekord zdarzenia zmiany w formacie JSON, który używa schematu zdarzeń w wersji 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"
        }
    }
}

Schemat w wersji 4

Następujące typy zdarzeń mogą być przechwytywane w rekordach zestawienia zmian w schemacie w wersji 4:

  • Obiekt blobTworzenie
  • Obiekt blobDeleted
  • BlobPropertiesUpdated
  • Obiekt blobSnapshotTworzenie
  • BlobTierChanged
  • Zainicjowano operację blobAsyncOperation
  • RestorePointMarkerCreated

W poniższym przykładzie przedstawiono rekord zdarzenia zmiany w formacie JSON, który używa schematu zdarzeń w wersji 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"
        }
    }
}

Wersja schematu 5

Następujące typy zdarzeń mogą być przechwytywane w rekordach zestawienia zmian w schemacie w wersji 5:

  • Obiekt blobTworzenie
  • Obiekt blobDeleted
  • BlobPropertiesUpdated
  • Obiekt blobSnapshotTworzenie
  • BlobTierChanged
  • Zainicjowano operację blobAsyncOperation

W poniższym przykładzie pokazano rekord zdarzenia zmiany w formacie JSON, który używa schematu zdarzeń w wersji 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"
        }
    }
}

Schemat w wersji 6

Następujące typy zdarzeń mogą być przechwytywane w rekordach zestawienia zmian w schemacie w wersji 6:

  • Obiekt blobTworzenie
  • Obiekt blobDeleted
  • BlobPropertiesUpdated
  • Obiekt blobSnapshotTworzenie
  • BlobTierChanged
  • Zainicjowano operację blobAsyncOperation

Wersja schematu 6 dodaje obsługę warstwy zimnej.

W poniższym przykładzie pokazano rekord zdarzenia zmiany w formacie JSON, który używa schematu zdarzeń w wersji 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"
        }
    }
}

Specyfikacje

  • Rekordy zdarzeń zmiany są dołączane tylko do zestawienia zmian. Po dołączeniu tych rekordów są niezmienne, a pozycja rekordu jest stabilna. Aplikacje klienckie mogą obsługiwać własny punkt kontrolny w pozycji odczytu zestawienia zmian.

  • Rekordy zdarzeń zmiany są dołączane w ciągu kilku minut od zmiany. Aplikacje klienckie mogą korzystać z rekordów, ponieważ są dołączane do dostępu do przesyłania strumieniowego lub zbiorcze w dowolnym innym czasie.

  • Rekordy zdarzeń zmiany są uporządkowane według kolejności modyfikacji na obiekt blob. Kolejność zmian w obiektach blob jest niezdefiniowana w usłudze Azure Blob Storage. Wszystkie zmiany w poprzednim segmencie są przed zmianami w kolejnych segmentach.

  • Rekordy zdarzeń zmiany są serializowane w pliku dziennika przy użyciu specyfikacji formatu Apache Avro 1.8.2 .

  • Zmień rekordy zdarzeń, w których eventType wartość ma wartość Control są rekordami systemu wewnętrznego i nie odzwierciedlają zmiany obiektów na koncie. Możesz bezpiecznie zignorować te rekordy.

  • Wartości w torbie storageDiagnostics właściwości są przeznaczone tylko do użytku wewnętrznego i nie są przeznaczone do użytku przez aplikację. Twoje aplikacje nie powinny mieć zależności umownej od tych danych. Możesz bezpiecznie zignorować te właściwości.

  • Czas reprezentowany przez segment jest przybliżony z granicami 15 minut. Dlatego aby zapewnić zużycie wszystkich rekordów w określonym czasie, należy użyć kolejnej poprzedniej i następnej godziny segmentu.

  • Każdy segment może mieć inną liczbę chunkFilePaths ze względu na wewnętrzne partycjonowanie strumienia dziennika w celu zarządzania przepływnością publikowania. Pliki dziennika w każdym chunkFilePath z nich mają gwarancję, że zawierają wzajemnie wykluczające się obiekty blob i mogą być używane i przetwarzane równolegle bez naruszania kolejności modyfikacji na obiekt blob podczas iteracji.

  • Segmenty zaczynają się w Publishing stanie. Po zakończeniu dołączania rekordów do segmentu będzie Finalizedto . Pliki dziennika w każdym segmencie, który jest datowany po dacie LastConsumable właściwości w $blobchangefeed/meta/Segments.json pliku, nie powinny być używane przez aplikację. Oto przykład LastConsumablewłaściwości w $blobchangefeed/meta/Segments.json pliku:

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

Warunki i znane problemy

W tej sekcji opisano znane problemy i warunki w bieżącej wersji zestawienia zmian.

  • Jeśli włączysz reguły zapory dla konta magazynu, żądania zarządzania cyklem życia dotyczące usuwania obiektów blob w kontenerze $blobchangefeed mogą zostać zablokowane. Można odblokować te żądania, określając wyjątki dla zaufanych usług firmy Microsoft. Aby uzyskać więcej informacji, zobacz sekcję Wyjątki w temacie Konfigurowanie zapór i sieci wirtualnych.
  • Właściwość LastConsumable pliku segments.json nie wyświetla pierwszej części, którą finalizuje kanał zmian. Ten problem występuje dopiero po sfinalizowaniu pierwszego segmentu. Wszystkie kolejne segmenty po pierwszej godzinie są dokładnie przechwytywane we LastConsumable właściwości .
  • Obecnie nie można wyświetlić kontenera $blobchangefeed podczas wywoływania interfejsu API ListContainers. Zawartość można wyświetlić, wywołując interfejs API ListBlobs bezpośrednio w kontenerze $blobchangefeed.
  • Tryb failover konta magazynu geograficznie nadmiarowego z włączonym zestawieniem zmian może spowodować niespójności między dziennikami zestawienia zmian a danymi obiektów blob i/lub metadanymi. Aby uzyskać więcej informacji na temat takich niespójności, zobacz Change feed and blob data niespójności.
  • Mogą wystąpić błędy 404 (Nie znaleziono) i 412 (Niepowodzenie warunku wstępnego) zgłoszone w kontenerach $blobchangefeed i $blobchangefeedsys . Można te błędy bezpiecznie zignorować.
  • Zdarzenia blobDeleted nie są generowane, gdy są usuwane wersje obiektów blob lub migawki. Zdarzenie BlobDeleted jest dodawane tylko wtedy, gdy obiekt blob podstawowy (główny) zostanie usunięty.
  • Rekordy zdarzeń są dodawane tylko w przypadku zmian w obiektach blob, które wynikają z żądań do punktu końcowego usługi Blob Service (blob.core.windows.net). Zmiany wynikające z żądań do punktu końcowego usługi Data Lake Storage (dfs.core.windows.net) nie są rejestrowane i nie będą wyświetlane w rekordach zestawienia zmian.

Często zadawane pytania

Zobacz Często zadawane pytania dotyczące obsługi zestawienia zmian.

Obsługa funkcji

Może to mieć wpływ na obsługę tej funkcji przez włączenie protokołu Data Lake Storage Gen2, sieciowego systemu plików (NFS) 3.0 lub protokołu SSH File Transfer Protocol (SFTP). Jeśli włączono dowolną z tych funkcji, zobacz Obsługa funkcji usługi Blob Storage na kontach usługi Azure Storage, aby ocenić obsługę tej funkcji.