Uubah dukungan umpan di Azure Blob Storage

Tujuan dari umpan perubahan adalah untuk menyediakan log transaksi dari semua perubahan yang terjadi pada blob dan metadata blob di akun penyimpanan Anda. Umpan perubahan menyediakan log yang teratur, terjamin, tahan lama, tidak berubah, baca-saja dari perubahan ini. Aplikasi klien dapat membaca log ini kapan pun, baik dalam mode streaming atau dalam mode batch. Setiap perubahan menghasilkan tepat satu entri log transaksi, sehingga Anda tidak perlu mengelola beberapa entri log untuk perubahan yang sama. Umpan perubahan memungkinkan Anda untuk membangun solusi yang efisien dan dapat diskalakan yang memproses peristiwa perubahan yang terjadi di akun Blob Storage Anda dengan biaya rendah.

Untuk mempelajari cara memproses rekaman di umpan perubahan, lihat Umpan perubahan proses di Azure Blob Storage.

Cara kerja umpan perubahan

Data umpan perubahan disimpan sebagai blob dalam kontainer khusus di akun penyimpanan Anda dengan biaya harga blob standar. Anda dapat mengontrol periode penyimpanan file-file ini berdasarkan kebutuhan Anda (Lihat kondisi rilis saat ini). Peristiwa perubahan ditambahkan ke umpan perubahan sebagai rekaman dalam spesifikasi format Apache Avro: format biner ringkas dan cepat, yang menyediakan struktur data yang kaya dengan skema sebaris. Format ini banyak digunakan dalam ekosistem Hadoop, Azure Stream Analytics, dan Azure Data Factory.

Anda dapat memproses log ini secara asinkron, bertambah bertahap, atau penuh. Sejumlah aplikasi klien dapat secara independen membaca umpan perubahan, secara paralel, dan dengan kecepatan mereka sendiri. Aplikasi analitik seperti Apache Drill atau Apache Spark dapat mengonsumsi log langsung sebagai file Avro, yang memungkinkan Anda memprosesnya dengan biaya rendah, dengan bandwidth tinggi, dan tanpa harus menulis aplikasi khusus.

Diagram berikut ini memperlihatkan bagaimana rekaman ditambahkan ke umpan perubahan:

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

Dukungan umpan perubahan sangat cocok dengan skenario yang memproses data berdasarkan objek yang telah berubah. Misalnya, aplikasi dapat:

  • Memperbarui indeks sekunder, menyinkronkan dengan cache, mesin pencari, atau skenario manajemen konten lainnya.
  • Mengekstraksi wawasan dan metrik analitik bisnis berdasarkan perubahan yang terjadi pada objek Anda, baik secara streaming atau mode batch.
  • Menyimpan, mengaudit, dan menganalisis perubahan pada objek Anda, selama periode waktu apa pun, untuk keamanan, kepatuhan, atau kecerdasan untuk manajemen data perusahaan.
  • Membangun solusi untuk file cadangan, mencerminkan, atau mereplikasi status objek di akun Anda untuk manajemen bencana atau kepatuhan.
  • Membuat alur aplikasi terhubung yang bereaksi terhadap peristiwa perubahan atau menjadwalkan eksekusi berdasarkan objek yang dibuat atau diubah.

Umpan perubahan adalah fitur prasyarat untuk Replikasi Objek dan Pemulihan point-in-time untuk blob blok.

Catatan

Umpan perubahan menyediakan model log yang tahan lama dan teratur dari perubahan yang terjadi pada blob. Perubahan ditulis dan tersedia di log umpan perubahan Anda dalam urutan beberapa menit perubahan. Jika aplikasi Anda harus bereaksi terhadap peristiwa yang jauh lebih cepat dari ini, pertimbangkan untuk menggunakan peristiwa Penyimpanan Blob sebagai gantinya. Peristiwa Blob Storage menyediakan peristiwa satu kali secara real-time yang memungkinkan Azure Functions atau aplikasi Anda cepat bereaksi terhadap perubahan yang terjadi pada blob.

Mengaktifkan dan menonaktifkan umpan perubahan

Anda harus mengaktifkan umpan perubahan pada akun penyimpanan Anda untuk mulai menangkap dan merekam perubahan. Nonaktifkan umpan perubahan untuk berhenti menangkap perubahan. Anda dapat mengaktifkan dan menonaktifkan perubahan menggunakan templat Azure Resource Manager di Portal atau PowerShell.

Berikut adalah beberapa hal yang perlu diingat ketika Anda mengaktifkan umpan perubahan.

  • Hanya ada satu umpan perubahan untuk layanan blob di setiap akun penyimpanan. Catatan umpan perubahan disimpan di kontainer $blobchangefeed.

  • Perubahan Buat, Perbarui, dan Hapus hanya ditangkap di tingkat layanan blob.

  • Umpan perubahan menangkap semua perubahan untuk semua peristiwa yang tersedia yang terjadi pada akun. Aplikasi klien dapat memfilter jenis peristiwa sesuai kebutuhan. (Lihat kondisi rilis saat ini).

  • Hanya akun penyimpanan Blob, blob blok premium, dan v2 tujuan umum yang dapat mengaktifkan umpan perubahan. Akun dengan namespace layanan hierarki saat ini tidak didukung. Meskipun tidak didukung, akun penyimpanan v1 dapat ditingkatkan ke v2 tanpa waktu henti, lihat Meningkatkan ke akun penyimpanan GPv2 untuk informasi selengkapnya.

Aktifkan umpan perubahan pada akun penyimpanan Anda dengan menggunakan portal Microsoft Azure:

  1. Di portal Microsoft Azure, pilih akun penyimpanan Anda.

  2. Navigasikan ke opsi Proteksi data pada Manajemen Data.

  3. Pada Pelacakan, pilih Aktifkan umpan perubahan blob.

  4. Pilih tombol Simpan untuk mengonfirmasi pengaturan proteksi data Anda.

    Screenshot showing how to enable change feed in Azure portal

Mengonsumsi umpan perubahan

Umpan perubahan menghasilkan beberapa metadata dan file log. File-file ini terletak di kontainer $blobchangefeed akun penyimpanan. Kontainer $blobchangefeed dapat dilihat baik melalui portal Azure atau Penjelajah Azure Storage.

Aplikasi klien Anda dapat memanfaatkan umpan perubahan dengan menggunakan pustaka prosesor umpan perubahan blob yang disediakan dengan SDK prosesor umpan perubahan. Untuk mempelajari cara memproses rekaman di umpan perubahan, lihat Memproses log umpan perubahan di Azure Blob Storage.

Mengubah segmen umpan

Umpan perubahan adalah log perubahan yang diatur ke dalam segmenper jam, tetapi ditambahkan ke dan diperbarui setiap beberapa menit. Segmen-segmen ini dibuat hanya ketika ada peristiwa perubahan blob yang terjadi pada jam tersebut. Ini memungkinkan aplikasi klien Anda untuk mengonsumsi perubahan yang terjadi dalam rentang waktu tertentu tanpa harus mencari melalui seluruh log. Untuk mempelajari lebih lanjut, lihat Spesifikasi.

Segmen per jam yang tersedia dari umpan perubahan dijelaskan dalam file manifes yang menentukan jalur ke file umpan perubahan untuk segmen tersebut. Daftar $blobchangefeed/idx/segments/ direktori virtual menunjukkan segmen-segmen ini diurutkan berdasarkan waktu. Jalur segmen menjelaskan dimulainya rentang waktu per jam yang diwakili segmen. Anda bisa menggunakan daftar itu untuk memfilter segmen log yang menarik bagi Anda.

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

Catatan

$blobchangefeed/idx/segments/1601/01/01/0000/meta.json secara otomatis dibuat saat Anda mengaktifkan umpan perubahan. Anda bisa mengabaikan file ini dengan aman. Ini adalah file inisialisasi yang selalu kosong.

File manifes segmen (meta.json) menunjukkan jalur file umpan perubahan untuk segmen tersebut di properti chunkFilePaths. Berikut ini contoh file manifes segmen.

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

Catatan

Kontainer $blobchangefeed hanya muncul setelah Anda mengaktifkan fitur umpan perubahan di akun Anda. Anda harus menunggu beberapa menit setelah mengaktifkan umpan perubahan sebelum Anda dapat mencantumkan blob di dalam kontainer.

Mengubah rekaman kejadian

File umpan perubahan berisi serangkaian rekaman peristiwa perubahan. Setiap rekaman peristiwa perubahan sesuai dengan satu perubahan ke blob individu. Rekaman dibuat berseri dan ditulis ke file menggunakan spesifikasi format Apache Avro. Rekaman dapat dibaca menggunakan spesifikasi format file Avro. Ada beberapa pustaka yang tersedia untuk memproses file dalam format tersebut.

File umpan perubahan disimpan di $blobchangefeed/log/ direktori virtual sebagai penambahan blob. File umpan perubahan pertama di bawah setiap jalur akan memiliki 00000 di nama file-nya (Misalnya, 00000.avro). Nama setiap file log berikutnya yang ditambahkan ke jalur tersebut akan bertambah 1 (Misalnya: 00001.avro).

Skema rekaman peristiwa

Untuk deskripsi setiap properti, lihat Skema peristiwa Azure Event Grid untuk Blob Storage. Kejadian BlobPropertiesUpdated dan BlobSnapshotCreated saat ini bersifat eksklusif untuk mengubah umpan dan belum didukung untuk Azure Blob Storage Events.

Catatan

File umpan perubahan untuk segmen tidak segera muncul setelah segmen dibuat. Lamanya penundaan berada dalam interval normal latensi penerbitan umpan perubahan, yakni dalam beberapa menit setelah perubahan.

Versi skema 1

Jenis peristiwa berikut dapat direkam dalam rekaman umpan perubahan dengan versi skema 1:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

Contoh berikut menunjukkan rekaman peristiwa perubahan dalam format JSON yang menggunakan versi skema peristiwa 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"
        }
    }
}

Versi skema 3

Jenis peristiwa berikut dapat direkam dalam rekaman umpan perubahan dengan versi skema 3:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

Contoh berikut menunjukkan rekaman peristiwa perubahan dalam format JSON yang menggunakan versi skema peristiwa 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"
        }
    }
}

Versi skema 4

Jenis peristiwa berikut dapat ditangkap dalam rekaman umpan perubahan dengan versi skema 4:

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

Contoh berikut menunjukkan rekaman peristiwa perubahan dalam format JSON yang menggunakan versi skema peristiwa 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"
        }
    }
}

Versi skema 5

Jenis peristiwa berikut dapat ditangkap dalam rekaman umpan perubahan dengan versi skema 5:

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

Contoh berikut menunjukkan rekaman peristiwa perubahan dalam format JSON yang menggunakan versi skema peristiwa 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"
        }
    }
}

Skema versi 6

Jenis peristiwa berikut dapat diambil dalam rekaman umpan perubahan dengan skema versi 6:

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

Skema versi 6 menambahkan dukungan untuk tingkat dingin.

Contoh berikut menunjukkan rekaman peristiwa perubahan dalam format JSON yang menggunakan skema peristiwa versi 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"
        }
    }
}

Spesifikasi

  • Mengubah rekaman peristiwa hanya ditambahkan ke umpan perubahan. Setelah ditambahkan, rekaman tidak dapat diubah dan tetap pada posisinya. Aplikasi klien dapat mempertahankan titik pemeriksaan mereka sendiri pada posisi baca umpan perubahan.

  • Rekaman catatan peristiwa ditambahkan dalam urutan beberapa menit perubahan. Aplikasi klien dapat memilih untuk mengonsumsi rekaman karena ditambahkan untuk akses streaming atau secara massal di waktu lain.

  • Rekaman peristiwa perubahan diurutkan berdasarkan urutan modifikasi per gumpalan. Urutan perubahan di seluruh blob tidak terdefinisi di Azure Blob Storage. Semua perubahan dalam segmen sebelumnya terjadi sebelum adanya perubahan pada segmen berikutnya.

  • Perubahan rekaman peristiwa diserialisasikan ke dalam file log menggunakan spesifikasi format Apache Avro 1.8.2.

  • Rekaman peristiwa perubahan di mana eventType nilainya Control adalah catatan sistem internal dan tidak mencerminkan perubahan pada objek di akun Anda. Anda dapat mengabaikan catatan tersebut dengan aman.

  • Nilai dalam tas properti storageDiagnostics hanya untuk penggunaan internal dan tidak dirancang untuk digunakan oleh aplikasi Anda. Aplikasi Anda tidak boleh memiliki dependensi kontraktual pada data tersebut. Anda dapat mengabaikan catatan tersebut dengan aman.

  • Waktu yang diwakili oleh segmen adalah diperkirakan dengan batas 15 menit. Jadi, untuk memastikan konsumsi semua catatan tetap berada dalam waktu tertentu, konsumsi segmen sebelumnya dan jam berikutnya berturut-turut.

  • Setiap segmen dapat memiliki jumlah chunkFilePaths berbeda yang disebabkan oleh pemartisian internal aliran log untuk mengelola throughput penerbitan. File log di masing-masing chunkFilePath dijamin mengandung blob yang saling eksklusif, dan dapat dikonsumsi dan diproses secara paralel tanpa melanggar urutan modifikasi per blob selama perulangan.

  • Segmen dimulai dalam status Publishing. Setelah penambahan rekaman ke segmen selesai, status akan menjadi Finalized. File log di segmen apa pun yang bertanggal setelah LastConsumable dari tanggal properti di dalam file $blobchangefeed/meta/Segments.json tidak boleh dikonsumsi oleh aplikasi Anda. Berikut ini contoh properti LastConsumable dalam file $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"
        }
    }
}

Kondisi dan masalah yang diketahui

Bagian ini menjelaskan masalah dan kondisi yang diketahui dalam rilis umpan perubahan saat ini.

  • Jika Anda mengaktifkan aturan firewall untuk akun penyimpanan Anda, permintaan manajemen siklus hidup untuk menghapus blob dalam kontainer $blobchangefeed mungkin diblokir. Anda dapat membuka blokir permintaan ini dengan menyediakan pengecualian untuk layanan Microsoft tepercaya. Untuk informasi selengkapnya, lihat bagian Pengecualian dalam Mengonfigurasi firewall dan jaringan virtual.
  • Properti LastConsumable file segments.json tidak mencantumkan segmen pertama yang diselesaikan umpan perubahan. Masalah ini terjadi hanya setelah segmen pertama diselesaikan. Semua segmen berikutnya setelah satu jam pertama ditangkap secara akurat di properti LastConsumable.
  • Saat ini Anda tidak dapat melihat kontainer $blobchangefeed saat Anda memanggil API ListContainers. Anda dapat melihat konten dengan memanggil ListBlobs API di kontainer $blobchangefeed secara langsung.
  • Failover akun penyimpanan akun penyimpanan geo-redundan dengan umpan perubahan yang diaktifkan dapat mengakibatkan inkonsistensi antara log umpan perubahan dan data blob dan/atau metadata. Untuk informasi selengkapnya tentang inkonsistensi tersebut, lihat Mengubah inkonsistensi data umpan dan blob.
  • Anda mungkin melihat kesalahan 404 (Tidak Ditemukan) dan 412 (Prasyarat Gagal) yang dilaporkan pada kontainer $blobchangefeed dan $blobchangefeedsys . Anda dapat mengabaikan kesalahan ini dengan aman.
  • Peristiwa BlobDeleted tidak dihasilkan saat versi blob atau rekam jepret dihapus. Peristiwa BlobDeleted ditambahkan hanya ketika blob dasar (root) dihapus.
  • Rekaman peristiwa ditambahkan hanya untuk perubahan pada blob yang dihasilkan dari permintaan ke titik akhir Blob Service (blob.core.windows.net). Perubahan yang dihasilkan dari permintaan ke titik akhir () titikdfs.core.windows.net akhir Data Lake Storage tidak dicatat dan tidak akan muncul di rekaman umpan perubahan.

Pertanyaan yang sering diajukan (FAQ)

Lihat Tanya Jawab Umum dukungan umpan perubahan.

Dukungan fitur

Dukungan untuk fitur ini mungkin terpengaruh dengan mengaktifkan Data Lake Storage Gen2, protokol Network File System (NFS) 3.0, atau SSH File Transfer Protocol (SFTP). Jika Anda telah mengaktifkan salah satu kemampuan ini, lihat Dukungan fitur Blob Storage di akun Azure Storage untuk menilai dukungan untuk fitur ini.