Поддержка канала изменений в Хранилище BLOB-объектов Azure

Канал изменений предназначен для предоставления журналов транзакций всех изменений, происходящих в больших двоичных объектах и метаданных больших двоичных объектов в вашей учетной записи хранения. Канал изменений предоставляет упорядоченный, гарантированный, устойчивый, неизменяемый журнал этих изменений, предназначенный только для чтения. Клиентские приложения могут считывать эти журналы в любое время как в потоковой передаче, так и в пакетном режиме. Каждое изменение создает ровно одну запись журнала транзакций, поэтому вам не придется управлять несколькими записями журнала для одного и того же изменения. Канал изменений позволяет создавать эффективные и масштабируемые решения, которые обрабатывают события изменения, происходящие в учетной записи хранения BLOB-объектов, с низкой стоимостью.

Сведения об обработке записей в канале изменений см. в Хранилище BLOB-объектов Azure веб-канале изменений процесса.

Как работает канал изменений

Записи канала изменений хранятся в виде BLOB-объектов в специальном контейнере в учетной записи хранения со стандартными расценками на BLOB-объекты. Вы можете контролировать срок хранения этих файлов в соответствии с вашими требованиями (см. условия текущего выпуска). События изменения добавляются в канал изменений в виде записей в спецификации формата Apache Avro: компактный, быстрый двоичный формат, обеспечивающий широкие возможности структуры данных со встроенной схемой. Этот формат широко используется в экосистеме Hadoop, Stream Analytics и фабрике данных Azure.

Эти журналы можно обрабатывать асинхронно, постепенно или полностью. Любое количество клиентских приложений может независимо считывать информацию канала изменений, параллельно и в собственном темпе. Такие приложения аналитики, как Apache Drill или Apache Spark, могут использовать журналы непосредственно в качестве файлов Avro, что позволяет обрабатывать их с низкой стоимостью, с высокой пропускной способностью и без необходимости писать пользовательское приложение.

На следующей схеме показано, как записи добавляются в канал изменений.

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

Поддержка канала изменений хорошо подходит для сценариев с обработкой данных на объектах, которые были изменены. Примеры операций, которые могут выполнить приложения, приведены ниже.

  • Обновление вторичного индекса, синхронизация с кэшем, поисковой системой или любыми другими сценариями управления содержимым.
  • Извлечение аналитических данных и метрик бизнес-аналитики с учетом изменений, происходящих с объектами в потоковом или пакетном режиме.
  • Хранение и анализ изменений в объектах за любой период времени для того, чтобы обеспечить безопасность, соблюдение нормативных требований или аналитику для управления корпоративными данными.
  • Создание решений для резервного копирования, зеркального отображения или репликации состояния объектов в учетной записи для аварийного управления или соблюдения нормативных требований.
  • Создание подключенных конвейеров приложений, реагирующих на события изменения или планирование выполнений на основе созданных или измененных объектов.

Канал изменений — это необходимый компонент для репликации объектов и восстановления на момент времени для блочных BLOB-объектов.

Примечание.

Канал изменений предоставляет устойчивую упорядоченную модель журнала изменений, происходящих в большом двоичном объекте. Изменения записываются и становятся доступными в журнале канала изменений в течение нескольких минут после изменения. Если приложение должно реагировать на события гораздо быстрее, попробуйте использовать события хранилища BLOB-объектов. События хранилища BLOB-объектов предоставляют одноразовые события в реальном времени, которые позволяют функциям и приложениям Azure быстро реагировать на изменения, происходящие в большом двоичном объекте.

Включение и отключение канала изменений

Необходимо включить канал изменений в учетной записи хранения, чтобы начать считывание и запись изменений. Отключите канал изменений для отмены записи изменений. Вы можете включать и отключать изменения с помощью шаблонов Azure Resource Manager на портале или в PowerShell.

Ниже приведены некоторые моменты, которые следует учитывать при включении канала изменений.

  • Существует только один канал изменений для службы BLOB-объектов в каждой учетной записи хранения. Записи канала изменений хранятся в контейнере $blobchangefeed.

  • Создание, обновление и удаление изменений фиксируются только на уровне службы BLOB-объектов.

  • Канал изменений фиксирует все изменения для всех доступных событий, происходящих в учетной записи. При необходимости клиентские приложения могут отфильтровывать типы событий. (См. условия текущего выпуска.)

  • Канал изменений можно включить только для учетных записей общего назначения версии 2 (цен. категория "Стандартный"), блочных BLOB-объектов (цен. категория "Премиум") и BLOB-объектов. Учетные записи с включенным иерархическим пространством имен в настоящее время не поддерживаются. Учетные записи хранения общего назначения версии 1 не поддерживаются, но их можно обновить до версии 2 без простоев. Дополнительные сведения см. в статье Обновление до учетной записи хранения GPv2.

Чтобы включить канал изменений для BLOB-объектов в учетной записи хранения с помощью портала Azure, выполните следующее.

  1. Выберите свою учетную запись хранения на портале Azure.

  2. Перейдите к параметру Защита данных в разделе Управление данными.

  3. В разделе Отслеживание выберите Включить канал изменений BLOB-объекта.

  4. Нажмите кнопку Сохранить, чтобы подтвердить свои параметры защиты данных.

    Screenshot showing how to enable change feed in Azure portal

Чтение канала изменений

Канал изменений создает несколько файлов метаданных и журналов. Эти файлы находятся в контейнере $blobchangefeed учетной записи хранения. Контейнер $blobchangefeed можно просмотреть через портал Azure или Azure Storage Explorer.

Клиентские приложения могут использовать канал изменений с помощью библиотеки обработчика канала изменений BLOB-объектов, предоставляемой из пакета SDK для обработчика канала изменений. Сведения об обработке записей в канале изменений см. в разделе "Журналы веб-канала изменений процесса" в Хранилище BLOB-объектов Azure.

Сегменты канала изменений

Канал изменений — это журнал изменений, который организован в почасовыесегменты, но пополняется и обновляется каждые несколько минут. Сегменты создаются только при наличии событий изменения большого двоичного объекта, произошедших за этот час. Это позволяет клиентскому приложению использовать изменения, происходящие в определенные диапазоны времени, без необходимости выполнять поиск по всему журналу. Дополнительные сведения см. на странице со спецификациями.

Доступный ежечасный сегмент канала изменений описывается в файле манифеста, который указывает пути к файлам канала изменений для этого сегмента. В списке $blobchangefeed/idx/segments/ виртуальных каталогов показаны сегменты, упорядоченные по времени. Путь сегмента описывает начало почасового диапазона времени, который представляет сегмент. Этот список можно использовать для фильтрации сегментов интересующих вас журналов.

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

Примечание.

$blobchangefeed/idx/segments/1601/01/01/0000/meta.json автоматически создается при включении канала изменений. Этот файл можно игнорировать. Это всегда пустой файл инициализации.

В файле манифеста сегмента (meta.json) показан путь к файлам канала изменений для этого сегмента в свойстве chunkFilePaths. Ниже приведен пример сегмента файла манифеста.

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

Примечание.

Контейнер $blobchangefeed отображается только после включения функции канала изменений в учетной записи. После включения канала изменений необходимо подождать несколько минут, прежде чем можно будет перечислить большие двоичные объекты в контейнере.

Изменение записей событий

Файлы канала изменений содержат ряд записей о событиях изменения. Каждая запись события изменения соответствует одному изменению отдельного большого двоичного объекта. Записи выводятся в последовательность и записываются в файл, используя спецификацию формата Apache Avro. Записи можно считывать с помощью спецификации формата файла Avro. Существует несколько библиотек, которые можно использовать для обработки файлов в этом формате.

Файлы канала изменений хранятся в виртуальном каталоге $blobchangefeed/log/ как добавочные BLOB-объекты. Первый файл канала изменений в каждом пути будет содержать 00000 в имени файла (например, 00000.avro). Имя каждого последующего файла журнала, добавляемого к этому пути, увеличится на 1 (например, 00001.avro).

Схемы записи событий

Дополнительные описания каждого свойства см. в статье Схема событий службы "Сетка событий Azure" для хранилища BLOB-объектов. События BlobPropertiesUpdated и BlobSnapshotCreated в настоящее время являются эксклюзивными для канала изменений и пока не поддерживаются для событий хранилища BLOB-объектов.

Примечание.

Файлы канала изменений для сегмента не сразу появляются после создания сегмента. Продолжительность задержки находится в пределах обычного интервала задержки публикации канала изменений, который находится в течение нескольких минут после изменения.

Версия схемы 1

Следующие типы событий могут быть захвачены в записях канала изменений с версией схемы 1:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

В следующем примере показана запись события изменения в формате JSON, которая использует схему событий версии 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"
        }
    }
}

Версия схемы 3

Следующие типы событий могут быть захвачены в записях канала изменений с версией схемы 3:

  • BlobCreated
  • BlobDeleted
  • BlobPropertiesUpdated
  • BlobSnapshotCreated

В следующем примере показана запись события изменения в формате JSON, которая использует схему событий версии 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"
        }
    }
}

Версия схемы 4

Следующие типы событий могут быть захвачены в записях канала изменений с версией схемы 4:

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

В следующем примере показана запись события изменения в формате JSON, которая использует схему событий версии 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"
        }
    }
}

Версия схемы 5

Следующие типы событий могут быть захвачены в записях канала изменений с версией схемы 5:

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

В следующем примере показана запись события изменения в формате JSON, которая использует схему событий версии 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"
        }
    }
}

Схема версии 6

Следующие типы событий могут быть записаны в записях канала изменений с схемой 6:

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

Схема версии 6 добавляет поддержку холодного уровня.

В следующем примере показана запись события изменения в формате JSON, использующая схему событий версии 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"
        }
    }
}

Спецификации

  • Записи о событиях изменения добавляются только в канал изменений. После добавления этих записей они являются неизменяемыми, а позиция записи — стабильной. Клиентские приложения могут сохранять собственную контрольную точку в позиции чтения канала изменений.

  • Записи о событиях изменения добавляются в течение нескольких минут после изменения. Клиентские приложения могут использовать записи по мере их добавления в потоковый доступ или целиком, когда возникнет необходимость.

  • Записи событий изменения упорядочиваются по порядку изменения на большой двоичный объект. Порядок изменений в больших двоичных объектах не определен в хранилище BLOB-объектов Azure. Все изменения в предыдущем сегменте произошли ранее изменений в последующем сегменте.

  • Записи событий изменений сериализуются в файл журнала с помощью спецификации Apache Avro 1.8.2.

  • Записи событий изменения, для которых в параметре eventType задано значение Control, являются внутренними системными записями и не отражают изменений объектов в вашей учетной записи. Эти записи можно спокойно игнорировать.

  • Значения в storageDiagnostics контейнере свойств предназначены только для внутреннего использования и не предназначены для использования приложением. Приложения не должны иметь контрактную зависимость от этих данных. Эти свойства можно спокойно игнорировать.

  • Время, представленное сегментом, приблизительно, с учетом пределов в 15 минут. Таким образом, чтобы обеспечить потребление всех записей в течение заданного времени, следует использовать последовательно сегменты предыдущего и следующего часов.

  • Каждый сегмент может иметь разное количество chunkFilePaths из-за внутреннего секционирования потока журнала для управления пропускной способностью публикации. Файлы журналов в каждом из chunkFilePath гарантированно содержат взаимоисключающие большие двоичные объекты, и их можно считывать и обрабатывать параллельно, не нарушая порядок изменений на большой двоичный объект во время итерации.

  • Сначала сегменты имеют состояние Publishing. После завершения добавления записей в сегмент он будет иметь состояние Finalized. Файлы журнала в любом сегменте, который имеет дату после даты свойства LastConsumable в файле $blobchangefeed/meta/Segments.json, не должны использоваться приложением. Ниже приведен пример свойства LastConsumable в файле $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"
        }
    }
}

Ограничения и известные проблемы

В этом разделе описаны известные проблемы и условия в текущем выпуске канала изменений.

  • Если вы включите правила брандмауэра для учетной записи хранения, управление жизненным циклом для удаления больших двоичных объектов в $blobchangefeed контейнере может быть заблокировано. Их можно разблокировать, предоставив исключения для доверенных служб Майкрософт. Дополнительные сведения см. в разделе об исключениях статьи Настройка брандмауэров и виртуальных сетей.
  • Свойство LastConsumable файла segments.json не содержит первый сегмент, финализованный каналом изменений. Эта проблема возникает только после финализации первого сегмента. Все последующие сегменты после первого часа будут без девиаций захвачены в свойстве LastConsumable.
  • В настоящее время невозможно увидеть контейнер $blobchangefeed при вызове API ListContainers. Содержимое можно просмотреть, вызвав API ListBlobs в контейнере $blobchangefeed напрямую.
  • служба хранилища отработка отказа учетных записей геоизбыточного хранения с включенным каналом изменений может привести к несоответствиям между журналами канала изменений и данными BLOB-объектов и /или метаданными. Дополнительные сведения о таких несоответствиях см. в разделе "Канал изменений" и "Несоответствия данных BLOB-объектов".
  • В $blobchangefeed и контейнерах $blobchangefeedsys могут отображаться ошибки 404 (не найдено) и 412 (предварительный сбой). Эти ошибки можно игнорировать.
  • События BLOBDeleted не создаются при удалении версий или моментальных снимков BLOB-объектов. Событие BlobDeleted добавляется только при удалении базового (корневого) BLOB-объекта.
  • Записи событий добавляются только для изменений больших двоичных объектов, которые приводят к запросам к конечной точке службы BLOB-объектов (blob.core.windows.net). Изменения, которые возникают из запросов к конечной точке Data Lake служба хранилища (dfs.core.windows.net) не регистрируются и не отображаются в записях канала изменений.

Вопросы и ответы

Часто задаваемые вопросы о поддержке канала изменений.

Поддерживаемые компоненты

На поддержку данной функции может повлиять включение протокола Data Lake Storage 2-го поколения, протокола сетевой файловой системы (NFS) 3.0 или протокола SFTP. Если вы включили любую из этих возможностей, см. Сведения о поддержке функций хранилища BLOB-объектов в учетных записях хранения Azure, чтобы оценить поддержку данной функции.