Организация конвейера загрузки событий из RabbitMQ в ClickHouse

Habr ·

В DWH требовалось организовать приём событий пользовательского поведения из RabbitMQ и предоставить команде e-commerce доступ к ним с задержкой не более пяти секунд. Под задержкой далее понимается интервал между публикацией сообщения в RabbitMQ и доступностью соответствующей записи для запроса в ClickHouse. В исходных именах таблиц и представлений используется термин customer tracking . В данной статье он обозначает события взаимодействия пользователя с платформой интернет-магазина: просмотры и переходы, поисковые запросы, операции с корзиной и действия в мобильном приложении. То есть термин clickstream events. Сразу было принято решение записывать в отдельные таблицы: 1. исходные сообщения в виде JSON-логов — для диагностики, аудита преобразований и повторного разбора; 2. типизированные колонки — для аналитических запросов без регулярного парсинга JSON. П.1 обеспечивает независимость от команды разработки платформы интернет-магазина и защищает (во всяком случае частично) обработчик очереди от Ограничение в пять секунд относится к конвейеру целиком. В представленной конфигурации значение rabbitmq_flush_interval_ms = 4000 резервирует до четырёх секунд для формирования пакета на стороне RabbitMQ-движка. Однако само по себе оно не гарантирует соблюдение end-to-end SLA: в измерение также входят публикация в брокер, доставка сообщения, обработка Materialized View и вставка в целевую таблицу. Поэтому фактическое соблюдение требования следует контролировать по метрикам задержки между временем публикации и временем доступности данных в ClickHouse. Читать далее

В DWH требовалось организовать приём событий пользовательского поведения из RabbitMQ и предоставить команде e-commerce доступ к ним с задержкой не более пяти секунд. Под задержкой далее понимается интервал между публикацией сообщения в RabbitMQ и доступностью соответствующей записи для запроса в ClickHouse. В исходных именах таблиц и представлений используется термин customer tracking . В данной статье он обозначает события взаимодействия пользователя с платформой интернет-магазина: просмотры и переходы, поисковые запросы, операции с корзиной и действия в мобильном приложении. То есть термин clickstream events. Сразу было принято решение записывать в отдельные таблицы: 1. исходные сообщения в виде JSON-логов — для диагностики, аудита преобразований и повторного разбора; 2. типизированные колонки — для аналитических запросов без регулярного парсинга JSON. П.1 обеспечивает независимость от команды разработки платформы интернет-магазина и защищает (во всяком случае частично) обработчик очереди от Ограничение в пять секунд относится к конвейеру целиком. В представленной конфигурации значение rabbitmq_flush_interval_ms = 4000 резервирует до четырёх секунд для формирования пакета на стороне RabbitMQ-движка. Однако само по себе оно не гарантирует соблюдение end-to-end SLA: в измерение также входят публикация в брокер, доставка сообщения, обработка Materialized View и вставка в целевую таблицу. Поэтому фактическое соблюдение требования следует контролировать по метрикам задержки между временем публикации и временем доступности данных в ClickHouse. Читать далее

Источник: Habr