Привязка ввода Dapr к концентратору событий Azure обрабатывает сообщения синхронно
Мы используем dapr вместе с входной привязкой для получения событий Интернета вещей из Azure Event Hub. Концентратор событий имеет 32 раздела, и отправитель использует идентификатор устройства в качестве ключа раздела. Контроллер, получающий события, делегирует их для обработки Актерам dapr.
Теперь я ожидаю, что сообщения в каждом разделе обрабатываются параллельно, в результате чего параллельные запросы к контроллеру получают события, позволяющие обрабатывать до 32 одновременных пакетов событий.
Однако тесты показывают, что события принимаются синхронно. Последующее событие принимается сразу после завершения полной обработки предыдущего события.
Теперь я знаю, что акторы обрабатывают сообщения одно за другим по дизайну, но я не читал ничего подобного для привязок ввода согласно документации .
Есть что-нибудь, чего я полностью упустил? В противном случае я не мог бы представить, как эта система может масштабироваться.
Мы используем dapr 0.11 вместе с ASP.NET Core 3.1, работающей в кластере AKS.
1 ответ
Я только что получил ответ на GitHub: https://github.com/dapr/components-contrib/issues/759
Таким образом, в основном это подтверждает мое наблюдение, основанное на текущей версии привязки концентратора событий dapr.
Однако вы можете вручную настроить идентификатор раздела для каждого компонента dapr. Таким образом, для одновременного чтения из 32 разделов вам в настоящее время придется использовать 32 компонента dapr, каждый из которых читает из отдельного раздела.
Цитата сверху Проблема GitHub:
[...] you can specify a Dapr component per partition ID: https://docs.dapr.io/operations/components/setup-bindings/supported-bindings/eventhubs/
If you set the partitionID field on the component metadata, the consumer will pull all messages for that partition ID.
Otherwise, it'll pull from all partitions.