Что такое Clickstream в Авито?

Почти любое действие пользователя на сайте или в приложении Авито порождает аналитическое событие. Событие логирует действие и имеет набор полей, заранее предопределенных аналитиком. Например, событием может быть:

и многое другое. В настоящий момент в Авито 8000+ различных типов событий, а их общее количество на пике нагрузки 500+ rps.

Все события в JSON формате записываются в топик Kafka. За доставку событий от клиента (страницы сайта, мобильного приложения, микросервиса) отвечает команда clickstream backend, поддерживающая SDK на различных языках программирования и гарантии доставки событий без потерь.

После того, как события попадают в Kafka, начинают работать инструменты realtime processing, за которые отвечает наша команда clickstream processing. Мы обрабатываем поток событий так, чтобы:

Если очень просто, то все, что мы делаем, это читаем события из одного топика Kafka и пишем в другие. Звучит слишком просто? Тогда вот некоторые задачи, которыми мы занимаемся:

И, самое главное, мы делаем все это в realtime. Это значит, что мы будем обрабатывать каждое новое событие именно в тот момент, когда оно прилетело в Kafka - задержка между действием пользователя и нашей обработкой в среднем составляет секунды.

Кроме того, мы реализуем другие ETL пайплайны: Kafka → Clickhouse, Kafka →S3, Kafka → HDFS, в общем, можем направлять данные откуда угодно и куда угодно.

Для реализации realtime процессинга мы используем Apache Flink - стриминговый аналитический движок. Вообще, наш стек такой: