Обработка потока для каждого пользователя

Мне нужно обрабатывать данные из набора потоков, применяя ту же разработку к каждому потоку независимо от других потоков.

Я уже видел такие фреймворки, как storm, но похоже, что он позволяет обрабатывать только статические потоки (т.е. твиты из твиттера), в то время как мне нужно обрабатывать данные от каждого пользователя отдельно.

Простым примером того, что я имею в виду, может быть система, в которой каждый пользователь может отслеживать свое местоположение по GPS и просматривать статистику, такую ​​как средняя скорость, ускорение, сожженные калории и т. Д. В режиме реального времени. Конечно, у каждого пользователя будут свои собственные потоки, и система должна обрабатывать потоки каждого пользователя отдельно, как если бы у каждого пользователя была своя собственная выделенная топология, обрабатывающая его данные.

Есть ли способ добиться этого с помощью таких фреймворков, как Storm, Spark Streaming или Samza?

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

Спасибо большое за помощь


person Marco DallaG    schedule 17.06.2015    source источник


Ответы (3)


Используя Storm, вы можете группировать данные, используя шаблон соединения с группировкой полей, если у вас есть идентификатор пользователя в ваших кортежах. Это гарантирует, что данные будут разделены по идентификатору пользователя и, таким образом, вы получите логические подпотоки. Ваш код должен только уметь обрабатывать несколько групп / подпотоков, потому что один экземпляр болта получает несколько групп для обработки. Но Storm наверняка поддерживает ваш вариант использования. Он также может запускать код Python.

person Matthias J. Sax    schedule 17.06.2015
comment
Большое спасибо за ответ. Можно ли обработать скользящие окна данных пользователя? Могу ли я быть уверен, что данные обрабатываются с упорядочением по метке времени (упорядоченная обработка IIRC может быть гарантирована только с использованием трезубца, который, похоже, не поддерживает python)? - person Marco DallaG; 17.06.2015
comment
Лично я использую Storm только с Java. Для Java вы можете выполнять обработку скользящего окна, но вам нужно реализовать всю логику самостоятельно. Вы также можете использовать Trindent, однако, насколько мне известно, вы не можете коррелировать кортежи из разных пакетов. Таким образом, это не настоящие раздвижные окна. Storm также не дает никаких гарантий упорядочивания (вы можете вернуться к коду в моем репозитории на github). Я предполагаю, что с помощью Python вам нужно будет реализовать упорядочивание и скользящие окна в своем собственном коде. (Spark Streaming и Flink Streaming также не поддерживают упорядоченную обработку - я не знаю о Samza) - person Matthias J. Sax; 17.06.2015

В Samza, как и в Storm, можно разделить отдельные потоки по некоторому идентификатору пользователя. Это гарантирует, что один и тот же процессор будет видеть все события для определенного пользователя (а также идентификаторы других пользователей, которые функция разделения [например, хэш] назначает этому процессору). Однако ваше описание звучит как что-то, что, скорее всего, будет выполняться в системе клиента, а не на стороне сервера.

Поддержка языков без JVM была предложена для Samza, но еще не реализована.

person Jakob Homan    schedule 14.07.2015
comment
Спасибо за ваш ответ. Мы выполняем обработку на стороне сервера по разным причинам, в нашем случае обработка на стороне клиента не подходит. Samza действительно была бы замечательной, если бы она поддерживала многоязычный язык ... Если многоязычная поддержка когда-либо появится в Samza, я обязательно рассмотрю возможность его использования. Еще раз большое спасибо - person Marco DallaG; 15.07.2015

Для этого можно использовать потоковый процессор WSO2. Вы можете разделить входной поток по имени пользователя и обработать события, относящиеся к каждому пользователю отдельно. Логика обработки должна быть написана на Siddhi QL, который является языком, подобным SQL.

WSO2 SP также имеет оболочку python для выполнения административных задач, таких как отправка, редактирование вакансий. Но вы не можете написать логику обработки, используя код Python.

person Sajith Eshan    schedule 02.05.2018