Посчитать lag консьюмер-группы
Условие
Напишите group_lag(end_offsets, committed): end_offsets словарь партиция -> log end offset, committed словарь партиция -> закоммиченный оффсет группы (партиции без коммита отсутствуют, для них группа читает с начала, считайте коммит равным 0). Ключи партиций строки. Верните {"total": суммарный lag, "max_partition": партиция с наибольшим lag (при равенстве с меньшим номером), "by_partition": {партиция: lag}}. Lag не может быть отрицательным. Для пустого топика {"total": 0, "max_partition": None, "by_partition": {}}.
Примеры
group_lag({"0":10500,"1":8000}, {"0":9700,"1":8000}) // {"total":800,"max_partition":"0","by_partition":{"0":800,"1":0}}
group_lag({}, {}) // {"total":0,"max_partition":null,"by_partition":{}}
group_lag({"0":100,"1":50}, {"0":100}) // {"total":50,"max_partition":"1","by_partition":{"0":0,"1":50}}
Как подойти
Подсказки: 2
committed.get(p, 0).- Для поиска максимума с тай-брейком: ключ
(-lag, int(p)).
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Идемпотентный консьюмер при at-least-once
Следующий вопрос
Распределение ключей по партициям