Пользователь Kafka - совет по дизайну проекта

Я новичок в Kafka и потоковой передаче данных, и мне нужен совет по следующему требованию: наша система ожидает около 1 миллиона входящих сообщений в день. Сообщение содержит идентификатор проекта. Сообщение должно быть отправлено пользователям только этого проекта. В нашем случае, допустим, у нас есть проекты A, B и C. Пользователи, открывающие панель управления проекта A, видят / получают сообщения только проекта A.

Это моя идея пока реализовать решение для требования,

Сообщения должны быть отправлены в тему Kafka по мере их поступления, давайте назовем эту тему корневой темой. Сообщения, однажды отправленные в корневую тему, могут быть прочитаны потребителем / слушателем Kafka и на основе идентификатора проекта в сообщении могут отправить это сообщение в конкретную тему проекта. Таким образом, любое сообщение может попасть в тему A, B или C. Подумайте об использовании веб-сокетов для обновления сообщения по мере его поступления на панели мониторинга пользователей проекта. Для N тем проекта будет N потребителей / слушателей. Эти потребители будут отправлять конкретное сообщение проекта в конкретные конечные точки веб-сокета проекта.

Пожалуйста, сообщите, могу ли я внести какие-либо улучшения в вышеуказанный дизайн.

В качестве системы обмена сообщениями выберите Kafka, поскольку она отличается высокой масштабируемостью и отказоустойчивостью.

Перед отправкой клиенту не требуется сложного преобразования или обогащения данных. Будет ли иметь смысл использовать Apache Flink или Hazelcast Jet для потоковой передачи или потоковую передачу Kafka, достаточно ли для этого простого требования.

Кроме того, когда мне следует рассмотреть возможность использования Hazelcast Jet или Apache Flink в моем проекте.

Должен ли я использовать Flink say, когда мне нужно обновить несколько свойств в сообщении на основе вызова веб-службы или поиска в базе данных, прежде чем отправлять его пользователям?

Должен ли я использовать Hazelcast Jet только тогда, когда мне нужен весь набор данных в памяти, чтобы получить значение свойства? или использование Jet принесет некоторые преимущества даже для моего простого случая использования, указанного выше. Пожалуйста, порекомендуйте.


person data_engineer    schedule 30.01.2018    source источник
comment
Hazelcast Jet поддерживает бесконечные преобразования потоков, поэтому это касается не только операций с целыми наборами данных. Обратите внимание, что один миллион сообщений в день считается очень низким трафиком. Эти системы рассчитаны на обработку нескольких миллионов в секунду.   -  person Marko Topolnik    schedule 30.01.2018
comment
Спасибо, Марко, я думал об использовании Spring JMS Listener для прослушивания сообщений из внешней (не Kafka) темы. Ваше предложение: я использую Jet здесь для бесконечных потоков, так как в моем случае источником является тема внешнего обмена сообщениями, и нет определенного конец обрабатываемого потока. Попробую это.   -  person data_engineer    schedule 30.01.2018


Ответы (2)


Kafka Streams - отличный инструмент для преобразования одной темы Kafka в другую тему Kafka.

Вам нужен инструмент для перемещения данных из темы Kafka в другую систему через веб-сокеты.

Потоковый процессор предоставляет вам удобный инструмент для создания этого конвейера данных (среди прочего, соединители с Kafka и веб-сокетами, а также масштабируемая, отказоустойчивая среда выполнения). Таким образом, вы можете использовать потоковый процессор, даже если вы не преобразовываете данные.

Преимуществом Hazelcast Jet является встроенный масштабируемый уровень кэширования. Возможно, вы захотите кэшировать вызовы базы данных / веб-службы, чтобы обогащение выполнялось локально, уменьшая количество обращений к удаленным службам.

Узнайте, как использовать Jet для читать из Kafka и как записывать данные в TCP-сокет (не веб-сокет).

person Vlado Schreiner    schedule 30.01.2018
comment
Спасибо, Владо, я ищу перемещение сообщений из корневой темы в темы проекта. Мы будем использовать кластер разработчиков. Я думал, что мы должны создать проект Topics, а Kafka позаботится о репликации для обеспечения отказоустойчивости. Потребители темы проекта должны читать из конкретных тем проекта и нажимать на веб-сокет. Планируется использовать Spring-Websocket для отправки сообщений в веб-браузер, чтобы количество пользователей могло подключаться к панели мониторинга (веб-странице) этого проекта для просмотра соответствующих сообщений. - person data_engineer; 30.01.2018
comment
Здравствуйте, Kafka Streams кажется наиболее удобным инструментом для перемещения данных из корневой темы в тему продукта, так как это его цель. Что касается панелей мониторинга: означает ли это, что каждый клиент веб-сокета (веб-браузер) получает полную историю сообщений после подключения? Это может привести к массовой передаче данных при каждом повторном подключении. Более того, вы в основном реализуете потоковый процессор в веб-браузере. Хотя это может быть правильный дизайн, рассмотрите возможность использования надлежащего потокового процессора для подготовки панели мониторинга проекта. Эта панель может храниться в str. прок. и потребляются через WS для уменьшения трафика. - person Vlado Schreiner; 31.01.2018
comment
Вы правы, Владо, полная история сообщений не должна отправляться обратно пользователю, должны быть критерии фильтрации, будет использоваться потоковый процессор, как вы посоветовали. Спасибо. - person data_engineer; 01.02.2018

Я хотел бы предложить вам другой вариант. Я совсем не специалист по Spark / Jet, но изучаю их несколько недель.

Я бы использовал Pentaho Data Integration (чайник), чтобы потреблять от Kafka, и я напишет шаг чайника (или шаг пользовательского класса Java) для записи сообщений в Hazelcast IMAP.

Затем следует использовать этот подход http://www.c2b2.co.uk/middleware-blog/hazelcast-websockets.php, чтобы предоставить конечным пользователям веб-сокеты.

person Kleyson Rios    schedule 31.01.2018
comment
Спасибо за ваш вклад, Клейсон, я не уверен, что смогу убедить мою команду использовать Kettle для написания сообщений в Hazelcast. Спасибо за ссылку на веб-сокеты с Hazelcast. - person data_engineer; 01.02.2018