К основному содержанию
скилл

azure-eventhub-py — скилл Python-стриминга

Скилл для работы с Azure Event Hubs из Python: отправка событий, чтение партиций, чекпоинты в blob-хранилище. Пригодится, когда агент пишет продюсеров и консьюмеров.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add microsoft/skills --skill azure-eventhub-py -a claude-code
Открыть на GitHub

Что делает azure-eventhub-py

Скилл описывает Python SDK azure-eventhub: как создать EventHubProducerClient и EventHubConsumerClient, собрать батч событий с учётом лимита размера, отправить его в конкретную партицию по partition_id или по ключу, а на приёме — обновлять чекпоинт после обработки. Есть разделы про синхронный и асинхронный клиенты.

Для чекпоинтов нужен отдельный пакет azure-eventhub-checkpointstoreblob-aio и blob-хранилище: BlobCheckpointStore принимает URL аккаунта и имя контейнера. Аутентификация идёт через DefaultAzureCredential — локально он подхватывает Azure CLI или VS Code, в Azure работает через managed identity. Скилл советует не тащить в код строки подключения и ключи: они обходят аудит и ротацию в Entra. В продакшене credential chain ограничивают переменной AZURE_TOKEN_CREDENTIALS=prod.

Перед запуском понадобятся переменные окружения: EVENT_HUB_FULLY_QUALIFIED_NAMESPACE и EVENT_HUB_NAME для любой схемы аутентификации, а для чекпоинтов ещё STORAGE_ACCOUNT_URL и CHECKPOINT_CONTAINER. Клиенты скилл требует оборачивать в контекстный менеджер, иначе сокеты и кэш токенов освобождаются не сразу.

Какие задачи решает

  • отправить поток событий в Event Hub батчами
  • прочитать события из партиции и не потерять позицию
  • настроить чекпоинты в blob-хранилище
  • переписать продюсера на асинхронный клиент
  • заменить строку подключения на DefaultAzureCredential

Примеры запросов агенту

  • напиши продюсера на azure-eventhub, который шлёт батч событий в my-eventhub
  • сделай консьюмера с чекпоинтами в BlobCheckpointStore
  • переведи отправку событий на асинхронный EventHubProducerClient

Как установить azure-eventhub-py

1Через Skills CLI (Vercel)

npx skills add microsoft/skills --skill azure-eventhub-py -a claude-code

2Вручную: положить файлы

~/.claude/skills/azure-eventhub-py/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/azure-eventhub-py/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о azure-eventhub-py

Как установить azure-eventhub-py в Claude?

Выполните npx skills add microsoft/skills --skill azure-eventhub-py -a claude-code. Скилл окажется в ~/.claude/skills/azure-eventhub-py/SKILL.md.

Что делает azure-eventhub-py?

Даёт агенту рабочие примеры Python SDK для Azure Event Hubs: продюсеры, консьюмеры, партиции и чекпоинты.

Какие пакеты нужны для работы скилла?

azure-eventhub и azure-identity, а для чекпоинтов в blob-хранилище — azure-eventhub-checkpointstoreblob-aio.

Исходный текст

SKILL.md · MIT
---
name: azure-eventhub-py
description: |
  Azure Event Hubs SDK for Python streaming. Use for high-throughput event ingestion, producers, consumers, and checkpointing.
  Triggers: "event hubs", "EventHubProducerClient", "EventHubConsumerClient", "streaming", "partitions".
license: MIT
metadata:
  author: Microsoft
  version: "1.0.0"
  package: azure-eventhub
---

# Azure Event Hubs SDK for Python

Big data streaming platform for high-throughput event ingestion.

## Installation

```bash
pip install azure-eventhub azure-identity
# For checkpointing with blob storage
pip install azure-eventhub-checkpointstoreblob-aio
```

## Environment Variables

```bash
EVENT_HUB_FULLY_QUALIFIED_NAMESPACE=<namespace>.servicebus.windows.net  # Required for all auth methods
EVENT_HUB_NAME=my-eventhub  # Required for all auth methods
STORAGE_ACCOUNT_URL=https://<account>.blob.core.windows.net  # Required for checkpoint storage
CHECKPOINT_CONTAINER=checkpoints  # Required for checkpoint storage
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
```

## Authentication & Lifecycle

> **🔑 Two rules apply to every code sample below:**
>
> 1. **Prefer `DefaultAzureCredential`.** It works locally (Azure CLI / VS Code / Developer CLI) and in Azure (managed identity, workload identity) with no code change. Avoid connection strings, account/API keys — they bypass Entra audit and rotation.
>    - Local dev: `DefaultAzureCredential` works as-is.
>    - Production: set `AZURE_TOKEN_CREDENTIALS=prod` (or `AZURE_TOKEN_CREDENTIALS=<specific_credential>`) to constrain the credential chain to production-safe credentials.
> 2. **Wrap every client in a context manager** so HTTP transports, sockets, and token caches are released deterministically:
>    - Sync: `with <Client>(...) as client:`
>    - Async: `async with <Client>(...) as client:` **and** `async with DefaultAzureCredential() as credential:` (from `azure.identity.aio`)
>
> Snippets may abbreviate this setup, but production code should always follow both rules.

```python
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
from azure.eventhub import EventHubProducerClient, EventHubConsumerClient

# Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Or use a specific credential directly in production:
# See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
namespace = "<namespace>.servicebus.windows.net"
eventhub_name = "my-eventhub"

# Producer
with EventHubProducerClient(
    fully_qualified_namespace=namespace,
    eventhub_name=eventhub_name,
    credential=credential
) as producer:
    # Use producer here (see following sections for operations)
    ...

# Consumer
with EventHubConsumerClient(
    fully_qualified_namespace=namespace,
    eventhub_name=eventhub_name,
    consumer_group="$Default",
    credential=credential
) as consumer:
    # Use consumer here (see following sections for operations)
    ...
```

## Client Types

| Client | Purpose |
|--------|---------|
| `EventHubProducerClient` | Send events to Event Hub |
| `EventHubConsumerClient` | Receive events from Event Hub |
| `BlobCheckpointStore` | Track consumer progress |

## Send Events

```python
from azure.eventhub import EventHubProducerClient, EventData
from azure.identity import DefaultAzureCredential

with EventHubProducerClient(
    fully_qualified_namespace="<namespace>.servicebus.windows.net",
    eventhub_name="my-eventhub",
    credential=DefaultAzureCredential()
) as producer:
    # Create batch (handles size limits)
    event_data_batch = producer.create_batch()
    
    for i in range(10):
        try:
            event_data_batch.add(EventData(f"Event {i}"))
        except ValueError:
            # Batch is full, send and create new one
            producer.send_batch(event_data_batch)
            event_data_batch = producer.create_batch()
            event_data_batch.add(EventData(f"Event {i}"))
    
    # Send remaining
    producer.send_batch(event_data_batch)
```

### Send to Specific Partition

```python
# By partition ID
event_data_batch = producer.create_batch(partition_id="0")

# By partition key (consistent hashing)
event_data_batch = producer.create_batch(partition_key="user-123")
```

## Receive Events

### Simple Receive

```python
from azure.eventhub import EventHubConsumerClient

def on_event(partition_context, event):
    print(f"Partition: {partition_context.partition_id}")
    print(f"Data: {event.body_as_str()}")
    partition_context.update_checkpoint(event)

with EventHubConsumerClient(
    fully_qualified_namespace="<namespace>.servicebus.windows.net",
    eventhub_name="my-eventhub",
    consumer_group="$Default",
    credential=DefaultAzureCredential()
) as consumer:
    consumer.receive(
        on_event=on_event,
        starting_position="-1",  # Beginning of stream
    )
```

### With Blob Checkpoint Store (Production)

```python
from azure.eventhub import EventHubConsumerClient
from azure.eventhub.extensions.checkpointstoreblob import BlobCheckpointStore
from azure.identity import DefaultAzureCredential

checkpoint_store = BlobCheckpointStore(
    blob_account_url="https://<account>.blob.core.windows.net",
    container_name="checkpoints",
    credential=DefaultAzureCredential()
)

with EventHubConsumerClient(
    fully_qualified_namespace="<namespace>.servicebus.windows.net",
    eventhub_name="my-eventhub",
    consumer_group="$Default",
    credential=DefaultAzureCredential(),
    checkpoint_store=checkpoint_store
) as consumer:
    def on_event(partition_context, event):
        print(f"Received: {event.body_as_str()}")
        # Checkpoint after processing
        partition_context.update_checkpoint(event)

    consumer.receive(on_event=on_event)
```

## Async Client

```python
from azure.eventhub.aio import EventHubProducerClient, EventHubConsumerClient
from azure.identity.aio import DefaultAzureCredential
import asyncio

async def send_events():
    credential = DefaultAzureCredential()
    
    async with EventHubProducerClient(
        fully_qualified_namespace="<namespace>.servicebus.windows.net",
        eventhub_name="my-eventhub",
        credential=credential
    ) as producer:
        batch = await producer.create_batch()
        batch.add(EventData("Async event"))
        await producer.send_batch(batch)

async def receive_events():
    async def on_event(partition_context, event):
        print(event.body_as_str())
        await partition_context.update_checkpoint(event)
    
    async with EventHubConsumerClient(
        fully_qualified_namespace="<namespace>.servicebus.windows.net",
        eventhub_name="my-eventhub",
        consumer_group="$Default",
        credential=DefaultAzureCredential()
    ) as consumer:
        await consumer.receive(on_event=on_event)

asyncio.run(send_events())
```

## Event Properties

```python
event = EventData("My event body")

# Set properties
event.properties = {"custom_property": "value"}
event.content_type = "application/json"

# Read properties (on receive)
print(event.body_as_str())
print(event.sequence_number)
print(event.offset)
print(event.enqueued_time)
print(event.partition_key)
```

## Get Event Hub Info

```python
with producer:
    info = producer.get_eventhub_properties()
    print(f"Name: {info['name']}")
    print(f"Partitions: {info['partition_ids']}")
    
    for partition_id in info['partition_ids']:
        partition_info = producer.get_partition_properties(partition_id)
        print(f"Partition {partition_id}: {partition_info['last_enqueued_sequence_number']}")
```

## Best Practices

1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async) for proper cleanup. For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
3. **Use `DefaultAzureCredential`** for portable auth across local dev and Azure (avoid connection strings / API keys when possible).
4. **Use batches** for sending multiple events
5. **Use checkpoint store** in production for reliable processing
6. **Use async client** for high-throughput scenarios
7. **Use partition keys** for ordered delivery within a partition
8. **Handle batch size limits** — catch ValueError when batch is full
9. **Set appropriate consumer groups** for different applications

## Reference Files

| File | Contents |
|------|----------|
| [references/checkpointing.md](references/checkpointing.md) | Checkpoint store patterns, blob checkpointing, checkpoint strategies |
| [references/partitions.md](references/partitions.md) | Partition management, load balancing, starting positions |
| [scripts/setup_consumer.py](scripts/setup_consumer.py) | CLI for Event Hub info, consumer setup, and event sending/receiving |

© Microsoft · MIT · microsoft/skills

Похожие скиллы

Всё по теме «Облака: AWS, Azure, GCP» →
dataverse-python-best-practices официальный github Правило для GitHub Copilot с рабочими шаблонами работы с Dataverse SDK для Python: авторизация, клиент, CRUD-операции. ★ 40 418звёзд репо azure-sql-database MicrosoftDocs Помогает проектировать, настраивать и чинить базы Azure SQL Database. Подсказывает лимиты, выбор тарифов vCore или DTU и выгружает свежую документацию Microsoft Learn. CX Codex +1 1 300установок azure-blob-storage MicrosoftDocs Скилл передаёт агенту базу знаний по Azure Blob Storage: настройку уровней доступа, SFTP, BlobFuse2 и безопасность. Пригодится при отладке хранилища и миграции данных. CX Codex +1 322установок cosmosdb-best-practices cosmosdb-agent-kit Скилл с набором правил по Azure Cosmos DB: моделирование данных, ключи разделов, запросы, SDK. Пригодится, когда агент пишет или правит код под Cosmos DB. CX Codex +1 1 100установок python-azure-iot-edge-modules официальный github Скилл помогает проектировать и развертывать модули Azure IoT Edge на Python. Пригодится для фильтрации телеметрии, адаптеров протоколов и локального инференса. 47установок azure-verified-modules hashicorp Скилл с обязательными требованиями Azure Verified Modules: проверяет и помогает писать Terraform-модули, которые проходят сертификацию AVM. CX Codex +1 3 300установок

Из того же набора64

Весь набор →
zustand-store-ts Скилл задаёт шаблон стора Zustand на TypeScript: отдельные типы для состояния и действий, middleware subscribeWithSelector, селекторы. 3установок azure-resource-lookup Перечисляет и находит ресурсы Azure по подпискам и группам через Azure Resource Graph. Нужен, когда надо увидеть, что вообще развёрнуто. 2установок azure-prepare Готовит проект к деплою через Azure Developer CLI: пишет azure.yaml, инфраструктуру на Bicep или Terraform и Dockerfile. Нужен, когда вы уже выбрали azd. 2установок azure-search-documents-py Подсказывает агенту, как писать код для Azure AI Search на Python: векторный и гибридный поиск, семантический ранжинг, индексы. 2установок azure-cosmos-py Подсказывает агенту, как работать с Azure Cosmos DB через Python SDK: CRUD документов, запросы, контейнеры, ключи разделов. 2установок azure-appconfiguration-py Скилл учит агента работать с Azure App Configuration из Python: читать и записывать настройки, включать фича-флаги, снимать снапшоты. 2установок azure-ai-textanalytics-py Скилл для работы с Azure AI Language из Python: тональность, сущности, ключевые фразы, определение языка, поиск персональных данных и медицинский NLP. 2установок azure-upgrade Проводит оценку и автоматизирует переход Azure-нагрузок между планами, тарифами и SKU, а также обновляет устаревшие Azure SDK в коде. 1установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой