Функции и терминология в Центрах событий AzureFeatures and terminology in Azure Event Hubs

Центры событий Azure — это масштабируемая служба обработки событий, которая принимает и обрабатывает большие объемы событий и данных с низкой задержкой и высокой надежностью.Azure Event Hubs is a scalable event processing service that ingests and processes large volumes of events and data, with low latency and high reliability. Подробный обзор этой службы см. в статье Что такое Центры событий?.See What is Event Hubs? for a high-level overview.

Эта статья продолжает тему Центров событий и содержит техническую информацию и сведения о реализации компонентов и функций этой службы.This article builds on the information in the overview article, and provides technical and implementation details about Event Hubs components and features.

Пространство именNamespace

Пространство имен концентраторов событий предоставляет уникальный контейнер, ограничивающий область действия. Вы можете обращаться к этому контейнеру по полному доменному имени и создавать в нем концентраторы событий или разделы Kafka.An Event Hubs namespace provides a unique scoping container, referenced by its fully qualified domain name, in which you create one or more event hubs or Kafka topics.

Центры событий для Apache KafkaEvent Hubs for Apache Kafka

Эта функция предоставляет конечную точку, которая позволяет клиентам обращаться к концентраторам событий с помощью протокола Kafka.This feature provides an endpoint that enables customers to talk to Event Hubs using the Kafka protocol. Такая интеграция обеспечивает клиентам конечную точку Kafka.This integration provides customers a Kafka endpoint. Благодаря этому пользователи могут настроить свои существующие приложения Kafka, для взаимодействия с концентраторами событий, предоставляя альтернативу запуску собственных кластеров Kafka.This enables customers to configure their existing Kafka applications to talk to Event Hubs, giving an alternative to running their own Kafka clusters. Концентраторы событий для Apache Kafka поддерживают протокол Kafka версии 1.0 и более поздних версий.Event Hubs for Apache Kafka supports Kafka protocol 1.0 and later.

При такой интеграции вам не нужно запускать кластеры Kafka или управлять ими с помощью Zookeeper.With this integration, you don't need to run Kafka clusters or manage them with Zookeeper. Это также позволяет работать с некоторыми из самых требовательных функций концентраторов событий, такими как Сбор, Автоматическое расширение и Геоизбыточное аварийное восстановление.This also allows you to work with some of the most demanding features of Event Hubs like Capture, Auto-inflate, and Geo-disaster Recovery.

Такая интеграция также позволяет таким приложениям как Mirror Maker или платформе как Kafka Connect работать без кластеров с недавно измененной конфигурацией.This integration also allows applications like Mirror Maker or framework like Kafka Connect to work clusterless with just configuration changes.

Издатели событийEvent publishers

Любая сущность, которая отправляет данные в концентратор событий, является создателем или издателем событий.Any entity that sends data to an event hub is an event producer, or event publisher. Издатели событий могут публиковать события с помощью HTTPS, AMQP 1.0 или Kafka (версия 1.0 и более поздние).Event publishers can publish events using HTTPS or AMQP 1.0 or Kafka 1.0 and later. Издатели событий используют маркер подписанного URL-адреса (SAS), чтобы идентифицировать себя в концентраторе событий. Также они могут использовать уникальное удостоверение или общий подписанный URL-адрес.Event publishers use a Shared Access Signature (SAS) token to identify themselves to an event hub, and can have a unique identity, or use a common SAS token.

Публикация событияPublishing an event

Вы можете опубликовать событие через протокол AMQP 1.0, Kafka 1.0 (или более поздние) или HTTPS.You can publish an event via AMQP 1.0, Kafka 1.0 (and later), or HTTPS. Центры событий предоставляют клиентские библиотеки и классы для публикации событий в концентраторе событий от клиентов .NET.Event Hubs provides client libraries and classes for publishing events to an event hub from .NET clients. Для других сред выполнения и платформ можно использовать любой клиент AMQP 1.0, например Apache Qpid.For other runtimes and platforms, you can use any AMQP 1.0 client, such as Apache Qpid. Можно публиковать события по отдельности или в пакетном режиме.You can publish events individually, or batched. Для одной публикации (экземпляра данных события) установлено ограничение в 1 МБ, независимо от того, одиночное это событие или пакет.A single publication (event data instance) has a limit of 1 MB, regardless of whether it is a single event or a batch. Публикация событий, размер которых превышает это пороговое значение, приводит к ошибке.Publishing events larger than this threshold results in an error. Мы советуем не передавать издателям сведения о секциях в концентраторе событий, а указывать только ключ секции (см. следующий раздел) или их удостоверение через маркер SAS.It is a best practice for publishers to be unaware of partitions within the event hub and to only specify a partition key (introduced in the next section), or their identity via their SAS token.

Решение об использовании AMQP или HTTPS обусловлено сценарием использования.The choice to use AMQP or HTTPS is specific to the usage scenario. AMQP требует установки постоянного двунаправленного сокета в дополнение к безопасности на уровне транспорта (TLS) или протоколу SSL/TLS.AMQP requires the establishment of a persistent bidirectional socket in addition to transport level security (TLS) or SSL/TLS. Использование AMQP связано с повышенными сетевыми затратами при инициализации сеанса, а использование HTTPS — с дополнительной нагрузкой SSL при каждом запросе.AMQP has higher network costs when initializing the session, however HTTPS requires additional SSL overhead for every request. AMQP отличается более высокой производительностью при частых публикациях.AMQP has higher performance for frequent publishers.

Центры событий

Центры событий обеспечивают доставку всех событий, использующих одинаковое значение ключа секции, в соответствующем порядке и в одну секцию.Event Hubs ensures that all events sharing a partition key value are delivered in order, and to the same partition. Если ключи секций используются с применением политик издателя, удостоверение издателя и значение ключа секции должны совпадать.If partition keys are used with publisher policies, then the identity of the publisher and the value of the partition key must match. В противном случае возникает ошибка.Otherwise, an error occurs.

Политика издателяPublisher policy

Центры событий обеспечивают точный контроль над издателями событий через политики издателя.Event Hubs enables granular control over event publishers through publisher policies. Политики издателя — это функции среды выполнения, которые упрощают обработку большого количества независимых издателей событий.Publisher policies are run-time features designed to facilitate large numbers of independent event publishers. Благодаря политикам издателя каждый издатель использует свой собственный уникальный идентификатор при публикации событий в концентраторе событий с помощью следующего механизма:With publisher policies, each publisher uses its own unique identifier when publishing events to an event hub, using the following mechanism:

//[my namespace].servicebus.windows.net/[event hub name]/publishers/[my publisher name]

Не требуется создавать имена издателей заранее, но они должны соответствовать маркеру SAS, который используется при публикации события, для обеспечения идентификации независимого издателя.You don't have to create publisher names ahead of time, but they must match the SAS token used when publishing an event, in order to ensure independent publisher identities. При использовании политик издателя значение PartitionKey присваивается имени издателя.When using publisher policies, the PartitionKey value is set to the publisher name. Для правильной работы эти значения должны совпадать.To work properly, these values must match.

СборCapture

Функция "Сбор" в Центрах событий позволяет автоматически собирать данные потоковой передачи в Центры событий и сохранять их в выбранной учетной записи хранения BLOB-объектов или учетной записи службы Azure Data Lake.Event Hubs Capture enables you to automatically capture the streaming data in Event Hubs and save it to your choice of either a Blob storage account, or an Azure Data Lake Service account. Эту функцию можно включить на портале Azure и указать минимальный размер записываемых данных и интервал времени для записи.You can enable Capture from the Azure portal, and specify a minimum size and time window to perform the capture. С помощью функции "Сбор" в Центрах событий можно указать собственную учетную запись хранилища BLOB-объектов Azure и контейнер или учетную запись службы Azure Data Lake, используемую для хранения собранных данных.Using Event Hubs Capture, you specify your own Azure Blob Storage account and container, or Azure Data Lake Service account, one of which is used to store the captured data. Зафиксированные данные записываются в формате Apache Avro.Captured data is written in the Apache Avro format.

СекцииPartitions

Центры событий обеспечивают потоковую передачу сообщений так, чтобы каждый секционированный потребитель считывал только определенное подмножество (секцию) потока сообщений.Event Hubs provides message streaming through a partitioned consumer pattern in which each consumer only reads a specific subset, or partition, of the message stream. Этот шаблон обеспечивает горизонтальное масштабирование для обработки событий и предоставляет другие функции, ориентированные на поток, которые недоступны для очередей и разделов.This pattern enables horizontal scale for event processing and provides other stream-focused features that are unavailable in queues and topics.

Секция — это упорядоченная последовательность событий, хранящаяся в концентраторе событий.A partition is an ordered sequence of events that is held in an event hub. По мере поступления новых событий они добавляются в конец этой последовательности.As newer events arrive, they are added to the end of this sequence. Секцию можно рассматривать как «журнал фиксации».A partition can be thought of as a "commit log."

Концентраторы событий

Центры событий сохраняют данные в течение указанного времени хранения, которое определяется для всех секций в концентраторе событий.Event Hubs retains data for a configured retention time that applies across all partitions in the event hub. События удаляются по истечении срока действия; невозможно явно удалить их.Events expire on a time basis; you cannot explicitly delete them. Так как секции независимы и содержат собственные последовательности данных, они часто расширяются с разной скоростью.Because partitions are independent and contain their own sequence of data, they often grow at different rates.

Концентраторы событий

Количество секций определяется во время создания. Рабочий диапазон — от 2 до 32.The number of partitions is specified at creation and must be between 2 and 32. Так как число секций неизменно, вам следует продумать масштаб заранее.The partition count is not changeable, so you should consider long-term scale when setting partition count. Секции — это способ организации данных, который соотносится со степенью параллелизма подчиненных элементов, требуемой для работы потребляющих приложений.Partitions are a data organization mechanism that relates to the downstream parallelism required in consuming applications. Поэтому количество секций в концентраторе событий непосредственно связано с предполагаемым числом параллельных модулей чтения.The number of partitions in an event hub directly relates to the number of concurrent readers you expect to have. Но вы можете увеличить число секций, превысив максимальное ограничение (32 секции). Для этого обратитесь к группе разработчиков Центров событий.You can increase the number of partitions beyond 32 by contacting the Event Hubs team.

Вы можете задать для него максимально возможное значение, которое равно 32 во время создания.You may want to set it to be the highest possible value, which is 32, at the time of creation. Помните, что наличие нескольких секций приведет к тому, что события отправляются в несколько секций без изменения порядка, если только отправители не настроили отправку в один раздел из 32, оставив оставшиеся 31 секции избыточными.Remember that having more than one partition will result in events sent to multiple partitions without retaining the order, unless you configure senders to only send to a single partition out of the 32 leaving the remaining 31 partitions redundant. В первом случае придется считывать события по всем 32 секциям.In the former case, you will have to read events across all 32 partitions. В последнем случае нет очевидных дополнительных затрат, помимо дополнительной настройки, которую необходимо внести на узле обработчика событий.In the latter case, there is no obvious additional cost apart from the extra configuration you have to make on Event Processor Host.

Хотя секции можно идентифицировать и отправлять напрямую, это не рекомендуется делать.While partitions are identifiable and can be sent to directly, sending directly to a partition is not recommended. Вместо этого можно использовать конструкции более высокого уровня, представленные в разделе издателей событий .Instead, you can use higher level constructs introduced in the Event publishers section.

Секции заполнены последовательностями данных событий, которые содержат текст события, контейнер определяемых пользователем свойств, а также метаданные события, включая сведения о смещении в секции и ее номер в последовательности потока.Partitions are filled with a sequence of event data that contains the body of the event, a user-defined property bag, and metadata such as its offset in the partition and its number in the stream sequence.

Для достижения оптимального масштаба рекомендуется сбалансировать единицы пропускной способности 1:1 и секции.We recommend that you balance 1:1 throughput units and partitions to achieve optimal scale. Один раздел имеет гарантированный входной и выходной трафик до одной единицы пропускной способности.A single partition has a guaranteed ingress and egress of up to one throughput unit. Хотя вы можете достичь более высокой пропускной способности секции, производительность не гарантируется.While you may be able to achieve higher throughput on a partition, performance is not guaranteed. Поэтому настоятельно рекомендуется, чтобы количество секций в концентраторе событий не превышало число единиц пропускной способности.This is why we strongly recommend that the number of partitions in an event hub be greater than or equal to the number of throughput units.

Учитывая общую пропускную способность, которую вы планируете использовать, вы узнаете необходимое количество единиц пропускной способности и минимальное количество секций, но сколько разделов должно быть?Given the total throughput you plan on needing, you know the number of throughput units you require and the minimum number of partitions, but how many partitions should you have? Выберите количество секций на основе подчиненного параллелизма, который требуется достичь, а также будущих потребностей в пропускной способности.Choose number of partitions based on the downstream parallelism you want to achieve as well as your future throughput needs. Плата за количество разделов в концентраторе событий не взимается.There is no charge for the number of partitions you have within an Event Hub.

Дополнительные сведения о секциях и компромиссе между доступностью и надежностью см. в статье Руководство по программированию Центров событий и Доступность и согласованность в Центрах событий.For more information about partitions and the trade-off between availability and reliability, see the Event Hubs programming guide and the Availability and consistency in Event Hubs article.

Маркеры SASSAS tokens

Центры событий используют подписанные URL-адреса, доступные на уровне пространства имен и концентратора событий.Event Hubs uses Shared Access Signatures, which are available at the namespace and event hub level. Маркер SAS создается на основе ключа SAS и хэша SHA URL-адреса, закодированного в определенном формате.A SAS token is generated from a SAS key and is an SHA hash of a URL, encoded in a specific format. С помощью имени ключа (политики) и маркера Центры событий могут повторно создать хэш, чтобы аутентифицировать отправителя.Using the name of the key (policy) and the token, Event Hubs can regenerate the hash and thus authenticate the sender. Как правило, маркеры SAS для издателей событий создаются только с правом отправки конкретному концентратору событий.Normally, SAS tokens for event publishers are created with only send privileges on a specific event hub. Этот механизм URL-адреса маркера SAS является основой для идентификации издателя, представленной в политике издателя.This SAS token URL mechanism is the basis for publisher identification introduced in the publisher policy. Дополнительные сведения о работе с SAS см. в статье Проверка подлинности подписи при общем доступе с помощью служебной шины.For more information about working with SAS, see Shared Access Signature Authentication with Service Bus.

Получатели событийEvent consumers

Любая сущность, считывающая данные из концентратора событий, является потребителем событий.Any entity that reads event data from an event hub is an event consumer. Все потребители Центров событий подключаются через сеанс AMQP 1.0, в рамках которого события доставляются, как только становятся доступными.All Event Hubs consumers connect via the AMQP 1.0 session and events are delivered through the session as they become available. Клиенту не требуется проводить опрос доступности данных.The client does not need to poll for data availability.

Группы получателейConsumer groups

Механизм публикации и подписки Центров событий реализован в виде групп потребителей.The publish/subscribe mechanism of Event Hubs is enabled through consumer groups. Группа потребителей — это представление всего концентратора событий (состояние, позиция или смещение).A consumer group is a view (state, position, or offset) of an entire event hub. Группы потребителей обеспечивают каждому из нескольких потребляющих приложений отдельное представление потока событий, а также возможность считывания потока независимо друг от друга в своем темпе и с собственными смещениями.Consumer groups enable multiple consuming applications to each have a separate view of the event stream, and to read the stream independently at their own pace and with their own offsets.

В архитектуре обработки потока каждое потребляющее приложение соответствует группе потребителей.In a stream processing architecture, each downstream application equates to a consumer group. Если вы хотите записать данные событий в долговременное хранилище, то приложение, записывающее данные в хранилище, является группой потребителей.If you want to write event data to long-term storage, then that storage writer application is a consumer group. Сложную обработку событий затем может выполнить еще одна (отдельная) группа потребителей.Complex event processing can then be performed by another, separate consumer group. К секции можно обращаться только через группу потребителей.You can only access partitions through a consumer group. В концентраторе событий всегда есть группа потребителей по умолчанию, и можно создать до 20 групп потребителей для концентратора событий стандартного уровня.There is always a default consumer group in an event hub, and you can create up to 20 consumer groups for a Standard tier event hub.

В секции для каждой группы потребителей может существовать не более пяти одновременных считывателей. Однако рекомендуется, чтобы в секции для каждой группы потребителей поддерживался только один активный получатель.There can be at most 5 concurrent readers on a partition per consumer group; however it is recommended that there is only one active receiver on a partition per consumer group. Внутри одного раздела каждый читатель получает все сообщения.Within a single partition, each reader receives all of the messages. Если в одном разделе находится несколько читателей, процесс обработки сообщений будет дублироваться.If you have multiple readers on the same partition, then you process duplicate messages. Это нужно обработать в своем коде, что не может быть тривиальной задачей.You need to handle this in your code, which may not be trivial. Тем не менее для некоторых сценариев такой поход допустим.However, it's a valid approach in some scenarios.

Ниже приведены примеры соглашения URI группы потребителей.The following are examples of the consumer group URI convention:

//[my namespace].servicebus.windows.net/[event hub name]/[Consumer Group #1]
//[my namespace].servicebus.windows.net/[event hub name]/[Consumer Group #2]

На следующем рисунке показана архитектура обработки потока Центров событий.The following figure shows the Event Hubs stream processing architecture:

Центры событий

Смещение потокаStream offsets

Смещение — это положение события внутри секции.An offset is the position of an event within a partition. Смещение можно представить как клиентский курсор.You can think of an offset as a client-side cursor. Смещение представляет собой байт-нумерацию события.The offset is a byte numbering of the event. Благодаря этому потребитель события (модуль чтения) может указать точку в потоке событий, с которой требуется начать чтение событий.This offset enables an event consumer (reader) to specify a point in the event stream from which they want to begin reading events. Можно указать смещение как отметку времени или как значение смещения.You can specify the offset as a timestamp or as an offset value. Потребители ответственны за хранение своих собственных значений смещения вне службы "Центры событий".Consumers are responsible for storing their own offset values outside of the Event Hubs service. В секции каждое событие включает смещение.Within a partition, each event includes an offset.

Центры событий

Контрольные точкиCheckpointing

Создание контрольных точек — это процесс, с помощью которого модули чтения помечают или фиксируют свое положение в последовательности событий секции.Checkpointing is a process by which readers mark or commit their position within a partition event sequence. Создание контрольных точек является ответственностью потребителя и выполняется для каждой секции в пределах группы потребителей.Checkpointing is the responsibility of the consumer and occurs on a per-partition basis within a consumer group. Это означает, что для каждой группы потребителей модуль чтения каждой секции должен хранить свое текущее положение в потоке событий и может сообщать службе, когда он считает поток данных завершенным.This responsibility means that for each consumer group, each partition reader must keep track of its current position in the event stream, and can inform the service when it considers the data stream complete.

Если модуль чтения отключается от секции, при повторном подключении он приступает к чтению данных с контрольной точки, которая ранее была отправлена последним модулем чтения этой секции в этой группе потребителей.If a reader disconnects from a partition, when it reconnects it begins reading at the checkpoint that was previously submitted by the last reader of that partition in that consumer group. При подключении модуль чтения передает это смещение в концентратор событий, чтобы указать место, с которого следует начинать чтение.When the reader connects, it passes the offset to the event hub to specify the location at which to start reading. Таким образом, можно использовать контрольные точки как для маркировки событий как "завершенных" подчиненными приложениями, так и для обеспечения устойчивости в случае отработки отказа между модулями чтения, работающими на разных компьютерах.In this way, you can use checkpointing to both mark events as "complete" by downstream applications, and to provide resiliency if a failover between readers running on different machines occurs. Вы можете вернуться к предыдущим данным, указав более низкое значение смещения по отношению к этому процессу создания контрольных точек.It is possible to return to older data by specifying a lower offset from this checkpointing process. В рамках такого подхода при создании контрольных точек вы обеспечиваете отказоустойчивость и воспроизведение потока событий.Through this mechanism, checkpointing enables both failover resiliency and event stream replay.

Стандартные задачи потребителяCommon consumer tasks

Все потребители Центров событий подключаются через двунаправленный канал связи с поддержкой состояния и сеанса AMQP 1.0.All Event Hubs consumers connect via an AMQP 1.0 session, a state-aware bidirectional communication channel. Каждая секция связана с сеансом связи AMQP 1.0, что упрощает транспортировку событий, разделенных по секциям.Each partition has an AMQP 1.0 session that facilitates the transport of events segregated by partition.

Подключение к секцииConnect to a partition

При подключении к секциям часто используется механизм аренды для координации подключения к конкретным секциям для чтения.When connecting to partitions, it is common practice to use a leasing mechanism to coordinate reader connections to specific partitions. Таким образом, в каждой секции в группе потребителей может быть только один активный модуль чтения.This way, it is possible for every partition in a consumer group to have only one active reader. Создание контрольных точек, аренда и администрирование модулей чтения упрощается за счет использования класса EventProcessorHost для клиентов .NET.Checkpointing, leasing, and managing readers are simplified by using the EventProcessorHost class for .NET clients. Узел обработчика событий — интеллектуальный агент потребителя.The Event Processor Host is an intelligent consumer agent.

Чтение событийRead events

После открытия сеанса и связи AMQP 1.0 для определенной секции служба Центров событий доставляет события в клиент AMQP 1.0.After an AMQP 1.0 session and link is opened for a specific partition, events are delivered to the AMQP 1.0 client by the Event Hubs service. Этот механизм доставки обеспечивает более высокую пропускную способность и меньшую задержку, чем механизмы извлечения по запросу, такие как HTTP GET.This delivery mechanism enables higher throughput and lower latency than pull-based mechanisms such as HTTP GET. Когда события отправляются клиенту, каждый экземпляр данных событий содержит важные метаданные, такие как смещение и порядковый номер, которые используются для упрощения создания контрольных точек в последовательности событий.As events are sent to the client, each event data instance contains important metadata such as the offset and sequence number that are used to facilitate checkpointing on the event sequence.

Данные событийEvent data:

  • OffsetOffset
  • Порядковый номерSequence number
  • ТекстBody
  • Свойства пользователяUser properties
  • Свойства системыSystem properties

Пользователь управляет смещением самостоятельно.It is your responsibility to manage the offset.

Дальнейшие действияNext steps

Дополнительные сведения о Центрах событий см. по следующим ссылкам:For more information about Event Hubs, visit the following links: