В прошлом уроке Connect перенёс заказы в Kafka без единой строки кода. Но Отто нужна не копия, а живой счётчик на табло: сколько заказов пришло в каждую зону Екатеринбурга за последнюю минуту. Если Центр вдруг заваливает заказами, диспетчер должен вывести туда больше курьеров сейчас, а не завтра. Сегодня разберём, как считать такое прямо на потоке.
Счётчик у входа в торговый центр
У входа в торговый центр стоит счётчик посетителей. Охранник раз в час записывает в журнал: «с 12 до 13 вошло 340 человек», и обнуляет счётчик. Это окно в один час.
Бывает, что человек вошёл в 12:59, но датчик сработал с задержкой и прислал сигнал в 13:01. Куда его записать? Честно в «12-13», ведь вошёл он тогда. Но охранник уже закрыл строку. Можно подождать пару минут, прежде чем закрывать час. Чем дольше ждёшь, тем точнее цифра, но тем позже она появляется на табло.
Ровно эти вопросы решает Kafka Streams.
Что такое Kafka Streams
Kafka Streams это библиотека из Apache Kafka. Не отдельный сервер: ты подключаешь её к своему Java-приложению, и оно читает топики, считает и пишет результат в другие топики. Хочешь быстрее, запускаешь ещё экземпляры приложения, и они делят партиции, как участники консьюмер-группы.
Подсчёт «за последнюю минуту» в Streams это подсчёт в окнах. Два самых частых вида:
- Tumbling: окна подряд без перекрытий, 12:00-12:01, 12:01-12:02. Каждый заказ попадает ровно в одно окно.
- Hopping: окна перекрываются. Например, по две минуты с шагом в минуту: 12:00-12:02, 12:01-12:03. Один заказ попадает в два окна. Так считают «за последние две минуты, обновлять каждую минуту».
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.