Как избежать ограничений Кафки? [закрытый]
Мы пытаемся построить BI-систему, которая будет собирать очень большие объемы данных, которые должны обрабатываться другими компонентами.
Мы решили, что будет хорошей идеей иметь промежуточный слой для сбора, хранения и распространения данных.
Данные представлены большим набором сообщений журнала. Каждое сообщение журнала имеет:
- продукт
- тип действия
- дата
- полезная нагрузка сообщения
Особенности системы:
- среднее значение: 1,5 миллион сообщений в минуту
- пик: 15 миллионов сообщений в минуту
- средний размер сообщения: 700 байт (приблизительно 1,3 ТБ / день)
- у нас есть 200 продуктов
- у нас есть 1100 типов действий
- данные следует проглатывать каждые 5 минут Потребительские приложения обычно нуждаются в продукте 1-2-3 с типами действий 1-2-3 (нам нужен быстрый доступ для 1 продукта / 1 типа действий)
Мы думали, что Кафка сделает эту работу, но мы столкнулись с несколькими проблемы.
Мы попытались создать тему для каждого типа действий и раздел для каждого продукта. Делая это, мы могли бы извлечь 1 продукт / 1 тип действия, который будет потребляться.
Изначально у нас была проблема с "слишком большим количеством открытых файлов", но после того, как мы изменили конфигурацию сервера для поддержки большего количества файлов, мы получаем ошибку нехватки памяти (12 ГБ выделено / узел)
Кроме того, у нас были проблемы со стабильностью Кафки. На большом количестве тем Кафка склонен замирать.
Наши вопросы:
- Подходит ли Кафка для нашего сценария использования? Может ли он поддерживать такое большое количество тем / разделов?
- можем ли мы организовать данные в Kafka другим способом, чтобы избежать этих проблем, но все же иметь хорошую скорость доступа для 1 типа продукта / 1 действия?
- Вы рекомендуете другие варианты Кафки, которые лучше подходят для этого?
1 ответ:
Я публикую этот ответ, чтобы другие пользователи могли увидеть принятое нами решение.
Из-за ограничений Кафки (большое нет. разделов, которые приводят к тому, что ОС достигает почти максимального количества открытых файлов) и несколько слабой производительности мы решили построить пользовательский фреймворк именно для наших нужд , используя библиотеки, такие как apache commons, guava, trove и т. д., Чтобы достичь необходимой нам производительности.
Вся система (распределенная и масштабируемая) состоит из 3 основных частей:
ETL (читает данные, обрабатывает их и записывает в двоичные файлы)
Ядро фреймворка (используется для чтения из двоичных файлов и вычисления статистики)
- API (используется многими системами для получения данных для отображения)
В качестве примечания: мы пробовали другие решения, такие как HBase, Storm и т. д., Но ни одно из них не соответствует нашим потребностям.