У меня проблема с контрольной точкой хранилища BLOB-объектов в концентраторах событий. Мое приложение работает нормально, если у меня не установлен checkpoint_store при получении клиента-потребителя. Всякий раз, когда я пытаюсь установить переменную checkpoint_store и запустить свой код, он выдает следующее исключение:
Экземпляр EventProcessor 'xxxxxxxxxxx' концентратора событий ‹имя моего концентратора событий› группа потребителей ‹имя моей группы потребителей›. Произошла ошибка при балансировке нагрузки и заявлении права собственности. Исключение составляет KeyError ('ownerid'). Повторная попытка через xxxx секунд
Единственная запись в github, которую я смог найти, в которой даже упоминалась такая ошибка, - это этот, однако сама проблема так и не была решена, и человек, у которого возникла проблема, вместо этого использовал другую библиотеку.
Соответствующие библиотеки, которые я использую, - это azure-eventhub и azure-eventhub-checkpointstoreblob-aio.
Вот соответствующие фрагменты кода, который я использую (Я использовал это руководство в качестве руководства):
import asyncio
from azure.eventhub.aio import EventHubConsumerClient, EventHubProducerClient
from azure.eventhub import EventData
from azure.eventhub.extensions.checkpointstoreblobaio import BlobCheckpointStore
async def on_event(partition_context, event):
await partition_context.update_checkpoint(event)
#<do stuff with event data>
checkpoint_store = BlobCheckpointStore.from_connection_string(blob_connection_string, container_name)
client = EventHubConsumerClient.from_connection_string(connection_str, consumer_group, eventhub_name=input_eventhub_name, checkpoint_store=checkpoint_store)
async def main():
async with client:
await client.receive(
on_event=on_event,
)
print("Terminated.")
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Проблема, похоже, связана исключительно с контрольными точками хранилища BLOB-объектов; если я закомментирую «checkpoint_store = checkpoint_store» при создании клиента-потребителя, все будет работать без проблем.
Соединение с хранилищем BLOB-объектов выглядит нормально, поскольку я немного покопался и обнаружил, что в хранилище BLOB-объектов были созданы некоторые папки, «контрольная точка» и «право собственности»: снимок хранилища BLOB-объектов Последний из которых содержит некоторые файлы с 'ownerid' в их метаданных: метаданные файлов владельцев
Т.е. ключ определенно существует. Я думаю, что происходит то, что EventProcessor пытается получить метаданные о владении этими BLOB-объектами, но каким-то образом не может этого сделать. Если у кого-то есть идеи, как это исправить, я был бы очень признателен!