Udostępnij za pomocą


Obsługa kanału zmian w usłudze Azure Blob Storage

Celem strumienia zmian jest zapewnienie dzienników wszystkich transakcji dotyczących zmian w obiektach blob i ich metadanych na koncie magazynowym. Źródło zmian zapewnia uporządkowane, gwarantowane, trwałe, niezmienne dzienniki tylko do odczytu tych zmian. Aplikacje klienckie mogą w dowolnym momencie odczytywać te dzienniki, zarówno w trybie przesyłania strumieniowego, jak i 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 kanału zmian są przechowywane jako obiekty blob w specjalnym kontenerze na koncie magazynu przy standardowych cenach za obiekty 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 przedstawiający sposób działania zestawienia zmian w celu zapewnienia uporządkowanego dziennika zmian w obiektach blob

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

  • Aktualizowanie indeksu pomocniczego, synchronizowanie z pamięcią podręczną, wyszukiwarką lub innymi scenariuszami zarządzania zawartością.
  • Wyodrębnij metryki i szczegółowe informacje analizy biznesowej na podstawie zmian występujących w obiektach, zarówno w trybie przesyłania strumieniowego, jak i wsadowym.
  • Przechowywanie, przeprowadzanie inspekcji i analizowanie zmian w obiektach w dowolnym okresie na potrzeby zabezpieczeń, zgodności lub analizy na potrzeby zarządzania danymi przedsiębiorstwa.
  • 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ą wymaganą dla replikacji obiektów i przywracania do określonego punktu w czasie dla obiektów blob blokowych.

Uwaga / Notatka

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

Włączanie i wyłączanie zestawienia zmian

Musisz włączyć strumień zmian na koncie storage, aby rozpocząć przechwytywanie i rejestrowanie zmian. Wyłącz strumień 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.

Oto kilka rzeczy, o których należy pamiętać, kiedy włączysz kanał zmian.

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

  • Zmiany związane z tworzeniem, aktualizowaniem i usuwaniem są rejestrowane tylko na poziomie usługi blob.

  • Kanał 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, konta blokowych obiektów blob w warstwie Premium oraz konta magazynu Blob mogą włączać funkcję zestawienia zmian. Konta z włączoną hierarchiczną przestrzenią nazw nie są obecnie obsługiwane. Konta magazynowe ogólnego przeznaczenia w wersji 1 nie są obsługiwane, ale można je uaktualnić do wersji GPv2 bez przestojów. Proszę zobaczyć Uaktualnianie do konta magazynu GPv2, aby uzyskać więcej informacji.

  • Domyślnie Change Feed przechowuje dzienniki na czas nieokreślony. Okres przechowywania dzienników zestawienia zmian można skonfigurować pod względem dni, co pozwala określić, jak długo dzienniki są zachowywane przed automatycznym usunięciem. To zachowanie przechowywania można zmodyfikować podczas początkowej konfiguracji zestawienia zmian, a następnie za pomocą opcji Ochrona danych w sekcji Zarządzanie danymi w witrynie Azure Portal.

  • Aby usunąć wszystkie istniejące dzienniki Change Feed, zaktualizuj okres przechowywania do 1 dnia, a następnie wyłącz funkcję Change Feed.

Korzystając z portalu Azure, włącz kanał informacyjny zmian na koncie magazynu danych.

  1. W portalu Azure wybierz swoje konto magazynowe.

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

  3. W obszarze Śledzenie wybierz pozycję Włącz kanał zmian blob.

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

    Zrzut ekranu przedstawiający sposób włączania zestawienia zmian w witrynie Azure Portal

Korzystanie ze zestawienia zmian

Strumień zmian generuje kilka plików metadanych i dzienników. Te pliki znajdują się w kontenerze $blobchangefeed konta magazynowego. Kontener $blobchangefeed można wyświetlić za pośrednictwem witryny Azure Portal lub Eksploratora 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 źródle danych o zmianach, zobacz Przetwarzanie logów źródła zmian w usłudze Azure Blob Storage.

Zmienianie segmentów kanału informacyjnego

Zestawienie zmian to dziennik zmian, które są zorganizowane w godzinowesegmenty, ale dodawane i aktualizowane co kilka minut. Te segmenty są tworzone tylko wtedy, gdy w tej godzinie wystąpią zdarzenia zmian bloba. 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 / Notatka

Element $blobchangefeed/idx/segments/1601/01/01/0000/meta.json jest tworzony automatycznie, gdy włączysz kanał 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 w właściwości chunkFilePaths dla tego segmentu. 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 / Notatka

Kontener $blobchangefeed jest wyświetlany dopiero po włączeniu funkcji śledzenia zmian na Twoim koncie. Po włączeniu funkcji zmiany danych, będziesz musiał poczekać kilka minut, zanim będzie można wyświetlić listę obiektów blob w kontenerze.

Zmienianie rekordów zdarzeń

Pliki zestawienia zmian zawierają serię rekordów dotyczących 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 dotyczą wyłącznie zmiany kanału danych i nie są jeszcze obsługiwane w przypadku zdarzeń związanych z przechowywaniem blobów.

Uwaga / Notatka

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 dziennika zmian w schemacie w wersji 1:

  • Utworzono Blob
  • Blob usunięty
  • ZaktualizowanoWłaściwościBloba
  • 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:

  • Utworzono Blob
  • Blob usunięty
  • ZaktualizowanoWłaściwościBloba
  • 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 kanału zmian zgodnie z wersją schematu 4:

  • Utworzono Blob
  • Blob usunięty
  • ZaktualizowanoWłaściwościBloba
  • Obiekt blobSnapshotTworzenie
  • BlobTierChanged
  • Zainicjowano operację blobAsyncOperation
  • PunktOdniesieniaUtworzony

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:

  • Utworzono Blob
  • Blob usunięty
  • ZaktualizowanoWłaściwościBloba
  • 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 przeglądu zmian według schematu w wersji 6:

  • Utworzono Blob
  • Blob usunięty
  • ZaktualizowanoWłaściwościBloba
  • 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 pozostają one niezmienne, a ich pozycja w zapisie jest stabilna. Aplikacje klienckie mogą obsługiwać własny punkt kontrolny w pozycji odczytu zestawienia zmian.

  • Rekordy zdarzeń dotyczących zmian są dodawane w ciągu kilku minut od dokonania zmiany. Aplikacje klienckie mogą wybrać korzystanie z rekordów na bieżąco, gdy są one dodawane, w celu uzyskania dostępu do przesyłania strumieniowego lub zbiorczo w dowolnym innym momencie.

  • Rekordy zdarzeń zmiany są uporządkowane według kolejności modyfikacji na każdy 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 ma wartość Control, które są wewnętrznymi rekordami systemowymi i nie odzwierciedlają zmian w obiektach na Twoim 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ć przetworzenie wszystkich rekordów w określonym czasie, należy przetwarzać segmenty zarówno poprzedniej, jak i następnej godziny.

  • 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 rozpoczynają się w Publishing statusie. Po zakończeniu dołączania rekordów do segmentu, będzie to Finalized. Pliki dziennika w każdym segmencie, które mają datę późniejszą niż data właściwości LastConsumable w pliku $blobchangefeed/meta/Segments.json, nie powinny być używane przez twoją aplikację. Oto przykład właściwości LastConsumable w pliku $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"
        }
    }
}

Warunki i znane problemy

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

  • Jeśli włączysz reguły firewalla dla konta magazynu, żądania związane z zarządzaniem cyklem życia dotyczące usuwania blobów 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 zawiera listy pierwszego segmentu, który finalizuje źródło zmian. Ten problem występuje dopiero po sfinalizowaniu pierwszego segmentu. Wszystkie kolejne segmenty po pierwszej godzinie są przechwytywane dokładnie we właściwości LastConsumable.
  • 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.
  • Przełączenie awaryjne kont magazynu z geograficzną nadmiarowością z włączonym kanałem zmian może spowodować niespójności między dziennikami kanału zmian a danymi obiektów BLOB i/lub metadanymi. Aby uzyskać więcej informacji na temat takich niespójności, zapoznaj się z nieciągłościami changelogów i danych blob.
  • W kontenerach $blobchangefeed mogą wystąpić błędy 404 (Nie znaleziono) i 412 (Niepowodzenie warunku wstępnego). Te błędy można bezpiecznie zignorować.
  • Zdarzenia BlobDeleted nie są generowane, gdy wersje obiektów blob lub migawki są usuwane. 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.

Najczęściej zadawane pytania (FAQ)

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.