Привязка входа концентратора событий для функций Azure
У меня есть функция Azure с привязкой ввода к концентратору событий.
public static async Task Run(TraceWriter log, string eventHubMessage)
Когда функция запускается, сколько сообщений она получает за исполнение по умолчанию?
Это 1 выполнение = 1 сообщение?
Я прочитал документацию и понимаю, что вы можете установить эти свойства в файле host.json функции:
"eventHub": {
// The maximum event count received per receive loop. The default is 64.
"maxBatchSize": 64,
// The default PrefetchCount that will be used by the underlying EventProcessorHost.
"prefetchCount": 256
}
Означает ли maxBatchSize, что я получу 64 сообщения за 1 выполнение?
2 ответа
@ Михаил - это правильно. Я просто хотел бы добавить следующее:
- Если вы используете шаблон EventHub-Trigger C# по умолчанию, созданная функция будет обрабатывать 1 сообщение за выполнение.
Если вам нужно, чтобы каждое выполнение обрабатывалось партиями, измените следующее:
а. В
function.json
добавить недвижимость"cardinality":"many"
как показано здесь.б. В
run.csx
изменить сигнатуру функции и обработать сообщения в цикле, например:public static async Task Run(TraceWriter log, string[] eventHubMessages) { foreach(string message in eventHubMessages) { // process messages } }
Конфигурация host.json, указанная вами в вопросе, позволяет вам экспериментировать с правильным размером пакета и буфером предварительной выборки, чтобы удовлетворить потребности вашего рабочего процесса.
Дополнительные комментарии:
- В соответствии с планом потребления функции в настоящее время разрешено
максимальное время выполнения поумолчанию - 5 минут (настраивается до 10 минут - добавлено 30.11.2017). Вам следует поэкспериментировать с настройками maxBatchSize и prefetchCount, чтобы убедиться, что обычное выполнение пакета завершится в течение определенного периода времени.
- PrefetchCount должен быть в 3-4 раза больше maxBatchSize.
- Каждый экземпляр узла функции поддерживается одним EventProcessorHost (EPH). EPH использует механизм контрольных точек для отметки последнего успешно обработанного сообщения. Выполнение функции может прекратиться преждевременно из-за
неперехваченных исключений в случаесбоя узлакода функции, тайм-аута или потери аренды раздела, что приведет к неудачной контрольной точке. Когда выполнение функции возобновится, полученная партия будет иметь сообщения от последней известной контрольной точки. Установка очень высокого значения для maxBatchSize также будет означать, что вы должны повторно обработать большую партию. EventHub гарантирует доставку как минимум один раз, но не как минимум один раз. Функции Azure не будут пытаться изменить это поведение. Если приоритетным является наличие только уникальных сообщений, вам необходимо устранить дедупликацию в последующих рабочих процессах.
По умолчанию это будет обработка 1 на 1, но вы также можете делать партии. Измените подпись вашей функции на
public static async Task Run(TraceWriter log, string[] eventHubMessages)
(если вы измените имя, как я, переименуйте параметр привязки тоже)
Справочный выпуск github.