Prise en charge du flux de modification dans Stockage Blob Azure

L’objectif du flux de modification est de fournir des journaux des transactions de toutes les modifications apportées aux objets blob et aux métadonnées d’objets blob dans votre compte de stockage. Le flux de modification fournit un journal ordonné, garanti, durable, immuable et en lecture seule de ces changements. Les applications clientes peuvent lire ces journaux à tout moment, soit en diffusion en continu, soit en mode de traitement par lot. Chaque modification génère exactement une entrée du journal des transactions. Vous n’avez donc pas à gérer plusieurs entrées de journal pour la même modification. Le flux de modification vous permet de créer des solutions efficaces et évolutives qui traitent les événements de modification qui se produisent dans votre compte Stockage Blob à moindre coût.

Pour savoir comment traiter des enregistrements dans le flux de modification, consultez l’article Traiter le flux de modification dans Stockage Blob Azure.

Comment fonctionne le flux de modification

Les enregistrements de flux de modification sont stockés en tant qu’objets blob dans un conteneur spécial dans votre compte de stockage au tarif standard des objets blob. Vous pouvez contrôler la période de rétention de ces fichiers en fonction de vos exigences (voir les conditions de la version actuelle). Les événements de modification sont ajoutés au flux de modification sous forme d’enregistrements dans la spécification de format Apache Avro : un format binaire, compact et rapide qui fournit des structures de données enrichies avec un schéma inlined. Ce format est largement utilisé dans l’écosystème Hadoop, Stream Analytics et Azure Data Factory.

Vous pouvez traiter ces journaux de manière asynchrone, incrémentielle ou complète. Un nombre quelconque d’applications clientes peuvent lire indépendamment le flux de modification, en parallèle, et à leur propre rythme. Les applications d’analytique que sont notamment Apache Drill ou Apache Spark peuvent utiliser des journaux directement comme fichiers Avro, ce qui vous permet de les traiter à très faible coût, avec une bande passante élevée et sans avoir à écrire une application personnalisée.

Le diagramme suivant montre comment des enregistrements sont ajoutés au flux de modification :

Diagramme montrant le fonctionnement du flux de modification pour fournir un journal ordonné des modifications apportées aux blobs

La prise en charge des flux de modification convient parfaitement aux scénarios qui traitent les données en fonction d’objets qui ont été modifiés. Par exemple, les applications peuvent :

  • Mettre à jour un index secondaire, se synchroniser avec un cache, un moteur de recherche ou tout autre scénario de gestion de contenu.
  • Extraire des informations et des métriques d’analytique métier, en fonction des modifications apportées à vos objets, en mode de diffusion en continu ou de traitement par lot.
  • Stocker, auditer et analyser les modifications apportées à vos objets, sur n’importe quelle période de temps, à des fins de sécurité, de conformité ou de renseignement pour la gestion des données d’entreprise.
  • Créer des solutions pour sauvegarder, mettre en miroir ou répliquer l’état des objets dans votre compte pour la gestion d’urgence ou la conformité.
  • Créer des pipelines d’application connectés qui réagissent aux événements de modification ou planifier des exécutions en fonction de l’objet créé ou modifié.

Le flux de modification est une fonctionnalité prérequise pour la réplication d’objets et la restauration dans le temps pour les objets blob de blocs.

Notes

Le flux de modification fournit un modèle de journal durable et ordonné des modifications apportées à un objet blob. Les modifications sont écrites et mises à disposition dans votre journal de flux de modification quelques minutes après la modification. Si votre application doit réagir aux événements plus rapidement que cela, envisagez d’utiliser des événements Stockage Blob à la place. Les événements Stockage Blob sont des événements uniques en temps réel qui permettent à vos fonctions ou applications Azure de réagir rapidement aux modifications apportées à un objet blob.

Activer et désactiver le flux de modification

Vous devez activer le flux de modification sur votre compte de stockage pour commencer la capture et l’enregistrement des modifications. Désactivez le flux de modification pour arrêter la capture des modifications. Vous pouvez activer et désactiver les modifications à l’aide de modèles Azure Resource Manager sur le Portail ou sur PowerShell.

Voici quelques éléments à prendre en compte lorsque vous activez le flux de modification.

  • Il n’existe qu’un seul flux de modification pour le service blob dans chaque compte de stockage. Les enregistrements de flux de modification sont stockés dans le conteneur $blobchangefeed.

  • Les modifications de création, de mise à jour et de suppression sont capturées uniquement au niveau du service blob.

  • Le flux de modification capture toutes les modifications pour tous les événements disponibles qui se produisent sur le compte. Les applications clientes peuvent filtrer les types d’événements selon les besoins. (Voir les conditions de la version actuelle).

  • Seuls des comptes de stockage Blob, d’objets blob de blocs Premium et de type v2 universel Standard peuvent activer le flux de modification. Les comptes ayant un espace de noms hiérarchique ne sont pas pris en charge actuellement. Les comptes de stockage de type v1 universel ne sont pas pris en charge, mais peuvent être mis à niveau vers le type v2 universel sans temps d’arrêt. Pour plus d’informations, consultez Mettre à niveau vers un compte de stockage GPv2.

Activez le flux de modification sur votre compte de stockage à l’aide du portail Azure :

  1. Dans le Portail Azure, sélectionnez votre compte de stockage.

  2. Accédez à l’option Protection des données sous Gestion des données.

  3. Sous Suivi, sélectionnez Activer le flux de modification des objets blob.

  4. Choisissez le bouton Enregistrer pour confirmer vos paramètres de protection des données.

    Capture d’écran représentant l’activation du flux de modification dans le portail Azure

Utiliser le flux de modification

Le flux de modification produit plusieurs métadonnées et fichiers journaux. Ces fichiers se trouvent dans le conteneur $blobchangefeed du compte de stockage. Le conteneur $blobchangefeed peut être examiné dans le portail Azure ou via l’Explorateur Stockage Azure.

Vos applications clientes peuvent consommer le flux de modification en utilisant la bibliothèque du processeur de flux de modification d’objets blob fournie avec le kit SDK du processeur de flux de modification. Pour savoir comment traiter des enregistrements dans le flux de modification, consultez l’article Traiter les journaux de flux de modification dans Stockage Blob Azure.

Segments de flux de modification

Le flux de changements est un journal de changements qui sont organisés en segments horaires, mais ajoutés et mis à jour à intervalles réguliers de quelques minutes. Ces segments sont créés uniquement quand des événements de modification d’objet blob se produisent dans l’heure. Cela permet à votre application cliente de consommer des modifications qui se produisent dans des plages de temps spécifiques sans avoir à effectuer une recherche dans le journal entier. Pour en savoir plus, consultez Spécifications.

Un segment horaire disponible du flux de modification est décrit dans un fichier manifeste qui spécifie les chemins d’accès aux fichiers de flux de modification pour ce segment. La liste du répertoire virtuel $blobchangefeed/idx/segments/ montre ces segments dans l’ordre chronologique. Le chemin d’accès du segment décrit le début de l’intervalle horaire représenté par le segment. Vous pouvez utiliser cette liste pour filtrer les segments de journaux qui vous intéressent.

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

Notes

Le fichier $blobchangefeed/idx/segments/1601/01/01/0000/meta.json est automatiquement créé lorsque vous activez le flux de modification. Vous pouvez ignorer sans risque ce fichier. Il s’agit d’un fichier d’initialisation toujours vide.

Le fichier manifeste de segment (meta.json) affiche le chemin d’accès des fichiers de flux de modification pour ce segment dans la propriété chunkFilePaths. Voici un exemple d’un fichier manifeste de segment.

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

Notes

Le conteneur $blobchangefeed s’affiche uniquement une fois que vous avez activé la fonctionnalité du flux de modification sur votre compte. Vous devrez patienter quelques minutes après avoir activé le flux de modification pour pouvoir énumérer les objets blob du conteneur.

Enregistrements d’événements de modification

Les fichiers de flux de modification contiennent une série d’enregistrements d’événements de modification. Chaque enregistrement d’événement de modification correspond à une modification apportée à un objet blob individuel. Les enregistrements sont sérialisés et écrits dans le fichier à l’aide de la spécification du format Apache Avro. Les enregistrements peuvent être lus à l’aide de la spécification de format de fichier Avro. Plusieurs bibliothèques sont disponibles pour traiter les fichiers dans ce format.

Les fichiers de flux de modification sont stockés dans le répertoire virtuel $blobchangefeed/log/ sous forme de blobs ajoutés. Le premier fichier de flux de modification sous chaque chemin d’accès comportera 00000 dans le nom de fichier (par exemple 00000.avro). Le nom de chaque fichier journal suivant ajouté à ce chemin d’accès est incrémenté de 1 (par exemple : 00001.avro).

Schémas d’enregistrement des événements

Pour obtenir une description de chaque propriété, consultez Schéma d’événement Azure Event Grid pour Stockage Blob. Les événements BlobPropertiesUpdated et BlobSnapshotCreated sont actuellement exclusifs pour le flux de modification et ne sont pas encore pris en charge pour les événements de stockage Blob.

Notes

Les fichiers de flux de modification d’un segment n’apparaissent pas immédiatement après la création d’un segment. La durée du délai est comprise dans l’intervalle normal de latence de publication du flux de modification, ce qui représente quelques minutes après la modification.

Version du schéma 1

Les types d’événements suivants peuvent être capturés dans les enregistrements de flux de modification avec la version du schéma 1 :

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

L’exemple suivant montre un enregistrement d’événement de modification au format JSON qui utilise la version du schéma d’événement 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"
        }
    }
}

Version du schéma 3

Les types d’événements suivants peuvent être capturés dans les enregistrements de flux de modification avec la version du schéma 3 :

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

L’exemple suivant montre un enregistrement d’événement de modification au format JSON qui utilise la version du schéma d’événement 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"
        }
    }
}

Version du schéma 4

Les types d’événements suivants peuvent être capturés dans les enregistrements de flux de modification avec la version du schéma 4 :

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

L’exemple suivant montre un enregistrement d’événement de modification au format JSON qui utilise la version du schéma d’événement 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"
        }
    }
}

Version du schéma 5

Les types d’événements suivants peuvent être capturés dans les enregistrements de flux de modification avec la version du schéma 5 :

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

L’exemple suivant montre un enregistrement d’événement de modification au format JSON qui utilise la version du schéma d’événement 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"
        }
    }
}

Version 6 du schéma

Les types d’événements suivants peuvent être capturés dans les enregistrements de flux de modification avec la version 6 du schéma :

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

La version 6 du schéma ajoute la prise en charge du niveau froid.

L’exemple suivant montre un enregistrement d’événement de modification au format JSON qui utilise la version 6 du schéma d’événement :

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

Spécifications

  • Les enregistrements d’événements de modification sont uniquement ajoutés au flux de modification. Une fois ces enregistrements ajoutés, ils sont immuables et la position d’enregistrement est stable. Les applications clientes peuvent conserver leur propre point de contrôle à la position de lecture du flux de modification.

  • Les enregistrements d’événements de modification sont ajoutés dans l’ordre de quelques minutes après la modification. Les applications clientes peuvent choisir de consommer des enregistrements à mesure qu’ils sont ajoutés pour un accès en continu ou en bloc à un autre moment.

  • Les enregistrements d’événements de modification sont classés par ordre de modification par blob. L’ordre des modifications entre les objets blob n’est pas défini dans Stockage Blob Azure. Toutes les modifications apportées à un segment précédent sont antérieures à toute modification apportée aux segments suivants.

  • Les enregistrements d’événements de modification sont sérialisés dans le fichier journal à l’aide de la spécification de format Apache Avro 1.8.2.

  • Les enregistrements d’événements de modification pour lesquelles eventTypea une valeur de Control sont des enregistrements système internes et ne reflètent pas une modification apportée aux objets de votre compte. Vous pouvez ignorer ces enregistrements sans risque.

  • Les valeurs du conteneur des propriétés storageDiagnostics sont destinées à un usage interne uniquement et ne sont pas conçues pour être utilisées par votre application. Vos applications ne doivent pas avoir de dépendance contractuelle sur ces données. Vous pouvez ignorer ces propriétés sans risque.

  • Le temps représenté par le segment est approximatif avec des limites de 15 minutes. Ainsi, pour garantir l’utilisation de tous les enregistrements dans un intervalle de temps spécifié, utilisez le segment consécutif de l’heure précédente et de l’heure suivante.

  • Chaque segment peut avoir un nombre différent de chunkFilePaths en raison du partitionnement interne du flux de journaux pour gérer le débit de publication. Les fichiers journaux de chaque chunkFilePath sont assurés de contenir des objets blob mutuellement exclusifs et peuvent être utilisés et traités en parallèle sans violer l’ordre des modifications par blob pendant l’itération.

  • Les segments commencent avec l’état Publishing. Une fois que l’ajout des enregistrements au segment est terminé, l’état est Finalized. Les fichiers journaux d’un segment dont la date est postérieure à celle de la propriété LastConsumable du fichier $blobchangefeed/meta/Segments.json ne doivent pas être consommés par votre application. Voici un exemple de la propriété LastConsumabledans un fichier $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"
        }
    }
}

Conditions et problèmes connus

Cette section décrit les problèmes connus et les conditions de la version actuelle du flux de modification.

  • Si vous activez des règles de pare-feu pour votre compte de stockage, les demandes de gestion du cycle de vie pour supprimer des objets blob dans le conteneur $blobchangefeed peuvent être bloquées. Vous pouvez débloquer ces requêtes en fournissant des exceptions pour les services Microsoft approuvés. Pour plus d’informations, consultez la section Exceptions dans Configurer des pare-feu et des réseaux virtuels.
  • La propriété LastConsumable du fichier segments.json ne répertorie pas le tout premier segment que le flux de modification finalise. Ce problème se produit uniquement après la finalisation du premier segment. Tous les segments suivants après la première heure sont capturés avec précision dans la propriété LastConsumable.
  • Actuellement, le conteneur $blobchangefeed n’apparaît pas quand l’API ListContainers est appelée. Vous pouvez afficher le contenu en appelant l’API ListBlobs directement sur le conteneur $blobchangefeed.
  • Le basculement de compte de stockage en comptes de stockage géoredondants avec le flux de modification activé peut entraîner des incohérences entre les journaux du flux de modification et les données et/ou métadonnées de l’objet blob. Pour plus d’informations concernant ces incohérences, consultez Incohérences du flux de modification et des données blob.
  • Vous pouvez voir des erreurs 404 (introuvable) et 412 (échec de la condition préalable) signalées sur les conteneurs $blobchangefeed et $blobchangefeedsys. Vous pouvez ignorer ces erreurs en toute sécurité.
  • Les événements BlobDeleted ne sont pas générés lorsque les versions des objets blob ou les instantanés sont supprimés. Un événement BlobDeleted est ajouté uniquement lorsqu’un objet blob De base (racine) est supprimé.
  • Les enregistrements d’événements sont ajoutés uniquement pour les modifications apportées aux objets blob résultant de requêtes au point de terminaison de service blob (blob.core.windows.net). Les modifications résultant de requêtes au point de terminaison (dfs.core.windows.net) du point de terminaison Data Lake Storage ne sont pas journalisées et ne s’affichent pas dans les enregistrements du flux de modification.

Forum aux questions (FAQ)

Consultez FAQ sur la prise en charge du flux de modification.

Prise en charge des fonctionnalités

La prise en charge de cette fonctionnalité peut être impactée par l’activation de Data Lake Storage Gen2, du protocole NFS (Network File System) 3.0 ou du protocole SFTP (SSH File Transfer Protocol). Si vous avez activé l’une de ces fonctionnalités, consultez Prise en charge des fonctionnalités Stockage Blob dans les comptes Stockage Azure pour évaluer la prise en charge de cette fonctionnalité.