Я хотел бы иметь эффективную систему в реальном времени для выполнения оконных счетчиков событий в режиме реального времени. Например, количество кликов на страну за последние 30 минут. Моя идея заключается в следующем, используя Кафку и Кассандру:
когда событие щелчка e происходит во время t , приращение отправляется в накопитель (я хотел бы использовать счетчики Кассандры для этой цели); в то же время это событие должно генерировать событие уменьшения в момент времени t + 30 мин , которое в основном отмечает выход события e из окна интереса. Этот декремент будет затем сохранен в аккумуляторе во время t + 30 мин . Опрос аккумулятора в любое время даст текущее правильное значение счетчика
Я не уверен, как этого добиться, используя Кафа. Я думал о 2 подходах
- клики отправляются в тему C; потребитель будет читать из C и создавать события в теме Cdelayed с сообщением ( Tdelay , key ); другой потребитель прочитает из Cdelayed и проверит содержимое первого прочитанного сообщения: если отметка времени в сообщении равна или после текущего времени, то сообщение читается и декремент отправляется в аккумулятор
- основной потребитель будет опрашивать с C и при выполнении первого чтения вызовет задержанного потребителя, который будет спать 30 минут перед началом чтения с самой ранней отметки времени; последний будет отвечать за уменьшение, первый за увеличение
Какое из 2 решений лучше? Правильно ли я использую Kafka API, если я 1) блокирую потребителя или 2) задерживаю потребителя?