У нас есть искровой структурированный потоковый запрос, который считывает данные из eventhub , выполняет некоторую обработку и записывает данные обратно в eventhub . У нас включена контрольная точка - мы сохраняем данные контрольной точки в Azure Datalake Gen2.
Когда мы запускаем запрос, мы видим что-то странное - со временем производительность нашего запроса (задержка) медленно падает . Когда мы запускаем запрос в первый раз, длительность пакета составляет ~ 3 секунды. После рабочего дня продолжительность пакета составляет 20 секунд, а через 2 дня мы получаем + 40 секунд. Интересно, что когда мы удаляем папку контрольной точки (или иным образом сбрасываем контрольную точку), задержка возвращается к нормальной (2сек).
Если посмотреть на производительность запроса после 2 дней работы с одним и тем же каталогом контрольных точек, становится совершенно ясно, что это write-forward-log / "walCommit" , который растет и послеНекоторое время занимает большую часть времени обработки.
Мои вопросы: что движет этим поведением - это естественнодля WalCommit дольше и дольше? Может ли это быть Azure Datalake Gen2? Нужны ли нам записи для записи в EventHub? Каковы общие способы, как улучшить это (не предполагая отключение WAL) ..