Код Middle Kafka обновлено
Идемпотентный консьюмер при at-least-once
Условие
Консьюмер получает сообщения с повторами (at-least-once): список [event_id, account, amount]. Напишите apply_events(messages): примените к балансам счетов (начальный баланс 0) каждое событие ровно один раз, повторы с уже обработанным event_id пропускайте. Верните {"balances": {счёт: баланс}, "skipped": число пропущенных повторов}.
Примеры
apply_events([["e1", "A", 100], ["e2", "A", -30], ["e1", "A", 100]]) // {"balances":{"A":70},"skipped":1}
apply_events([]) // {"balances":{},"skipped":0}
apply_events([["e1", "A", 10], ["e2", "B", 20], ["e3", "A", 5], ["e2", "B", 20], ["e2", "B", 20]]) // {"balances":{"A":15,"B":20},"skipped":2}
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.