Код Junior Kafka спрашивают часто обновлено

Посчитать 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
  1. committed.get(p, 0).
  2. Для поиска максимума с тай-брейком: ключ (-lag, int(p)).

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.