что такое потоковая обработка
Потоковая обработка — это технология обработки больших данных. Это позволяет пользователям запрашивать непрерывный поток данных и быстро обнаруживать условия за долю времени с момента получения данных. Время обнаружения варьируется от миллисекунд до минут. Например, с потоковой обработкой вы можете получать оповещения, запрашивая поток данных с датчиков температуры и определяя, когда температура достигает точки замерзания.
У него много названий: аналитика в реальном времени, потоковая аналитика, обработка сложных событий, потоковая аналитика в реальном времени и обработка событий. Хотя некоторые термины исторически различались, инструменты (фреймворки) теперь объединены термином «потоковая обработка». (Список фреймворков и последний раздел этой статьи для истории см.Quora вопросы)
это проходитApache Storm
как лайкHadoop
Та же технология, которая может дать быстрые результаты, была популяризирована, а затем принята как технология больших данных. Сейчас много конкурентов.
Зачем нужна потоковая обработка
Знания, полученные в результате обработки данных, ценны. Такие идеи не все созданы равными. Некоторые идеи имеют высокую ценность вскоре после того, как они происходят, и эта ценность быстро снижается со временем. Потоковая обработка нацелена на такие сценарии. Ключевое преимущество потоковой обработки заключается в том, что она предоставляет ценную информацию намного быстрее, обычно за миллисекунду.
Вот несколько дополнительных причин для использования потоковой обработки.
Причина 1:Некоторые данные поступают естественным образом в нескончаемом потоке событий. Для пакетной обработки необходимо сохранить ее, в какой-то момент остановить сбор данных и обработать данные. Затем вам нужно выполнить следующую партию, а затем беспокоиться об агрегировании нескольких пакетов. Напротив, потоковая передача более элегантна и более естественна для обработки бесконечного потока данных. Вы можете обнаруживать шаблоны, проверять результаты, просматривать несколько уровней фокусировки и легко просматривать данные из нескольких потоков одновременно.
Потоковая обработка естественно подходит для данных временных рядов и обнаружения закономерностей, которые меняются со временем. Например, если вы пытаетесь определить продолжительность веб-сеанса в бесконечном потоке (это пример попытки определить последовательность). Пакетная обработка очень сложна, потому что некоторые сеансы будут разделены на две партии. Потоковая обработка может легко справиться с этим.
Если вы сделаете шаг назад и подумаете об этом, самый непрерывный ряд данных — это данные временного ряда: датчики трафика, датчики состояния, журналы транзакций, журналы активности и т. д. Почти все данные IoT представляют собой данные временных рядов. Поэтому имеет смысл использовать модель программирования, которая работает естественно.
Причина 2:Пакетная обработка позволяет накапливать данные и пытаться обрабатывать их одновременно, тогда как потоковая обработка обрабатывает входящие данные немедленно, поэтому обработка масштабируется с течением времени. Следовательно, потоковая обработка может использовать гораздо меньше оборудования, чем пакетная обработка. Кроме того, потоковая обработка позволяет приблизительную обработку запросов за счет снижения нагрузки на систему. Поэтому потоковая обработка естественно подходит для случаев использования, где достаточно приблизительных ответов.
Причина 3:Иногда данные настолько велики, что их даже невозможно сохранить. Потоковая обработка позволяет обрабатывать большие объемы данных и сохранять только полезные биты.
Причина 4:Наконец, доступно много потоковых данных (например, транзакции клиентов, действия, посещения веб-сайтов), и по мере роста вариантов использования IoT (различные датчики) эти данные будут передаваться быстрее. Потоковая передача является более естественной моделью для рассмотрения и программирования этих вариантов использования.
Однако потоковая обработка не подходит для всех случаев использования. Хорошее эмпирическое правило заключается в том, что потоковая обработка сложна, если обработка требует многократного обхода полных данных или имеет произвольный доступ (например, наборы данных графа). Большим упущенным вариантом использования в потоковой обработке являются алгоритмы машинного обучения, которые обучают модели. С другой стороны, если обработка может быть выполнена за один проход данных или имеет временное расположение (обработка стремится получить доступ к самым последним данным), то она хорошо подходит для потоковой передачи.
Как сделать потоковую обработку
Если вы хотите создать приложение, которое обрабатывает потоковые данные и принимает решения в реальном времени, вы можете использовать инструмент или создать его самостоятельно. Ответ зависит от того, с какой сложностью вы планируете справляться, насколько вы хотите масштабироваться, насколько вам нужна надежность и отказоустойчивость и т. д.
Если вы хотите собрать приложение самостоятельно, поместите события в тему брокера сообщений (например,ActiveMQ
,RabbitMQ
илиKafka
), напишите код для преобразования изbroker
Темы в событиях приема (они становятся вашими потоками), а затем публикуют результатыbroker
. Такой код называетсяactor
.
Однако вместо написания описанного выше сценария с нуля вы можете сэкономить время, используя платформу потоковой передачи. Процессоры потока событий позволяютactor
напишите логику, подключитеactor
и подключите ребро к источнику данных. Вы можете отправлять события непосредственно в потоковый процессор или черезbroker
Отправка событий.
Процессор потока событий будет собирать данные, передавать данные каждомуactor
, убедитесь, что они выполняются в правильном порядке, собирают результаты, масштабируются при высокой нагрузке и обрабатывают сбои для выполнения тяжелой работы. НапримерStorm
,Flink
иSamza
. Если вы хотите создать свое приложение таким образом, ознакомьтесь с соответствующим руководством пользователя.
С 2016 года былиПотоковый SQL(Streaming SQL 101
) новые идеи. Мы называем язык «потоковым SQL», который позволяет пользователям писать SQL-подобный запрос для запроса потоковых данных. Появляется множество языков потокового SQL.
WSO2
потоковый процессор иSQLStreams
Другие проекты поддерживают SQL более пяти лет.
-
Apache Storm
Добавлена поддержка потоковой передачи SQL в 2016 г. - [Apache Flink добавил поддержку Streaming SQL с 2016 года] (Apache Flink добавил поддержку Streaming SQL с 2016 года)
- Apache Kafka добавил поддержку SQL (они называют его KSQL) в 2017 году.
- Apache Samza добавляет поддержку SQL в 2017 году
Используя язык потоковой передачи SQL, разработчики могут быстро включать потоковые запросы в свои приложения. По состоянию на 2018 год большинство потоковых процессоров поддерживают обработку данных с помощью языка потоковой передачи SQL.
Давайте разберемся, как сопоставить SQL с потоками. Потоки — это табличные данные в движении. Представьте себе бесконечную таблицу, в которой со временем появляются новые данные. Поток является такой таблицей. Запись или строка в потоке называется событием. Однако он имеет схему и ведет себя как строка базы данных. Чтобы понять эти моменты,Презентация Тайлера Акидау на Strataотличный ресурс.
Когда вы пишете SQL-запрос, вы запрашиваете данные, хранящиеся в базе данных. Однако когда вы пишете потоковые SQL-запросы, вы пишете их для данных сейчас и для данных, которые поступят в будущем. Поэтому потоковый SQL-запрос никогда не заканчивается. Есть проблема? Нет, потому что вывод запроса представляет собой поток. Как только событие совпадет и выходное событие будет немедленно доступно, оно будет помещено в выходной поток.
Поток представляет собой все события, которые могут пройти через логический канал и никогда не заканчиваются. Например, если у нас есть датчик температуры в котле, мы можем представить вывод датчика в виде потока. Однако классический SQL принимает данные, хранящиеся в таблицах базы данных, обрабатывает их и записывает в таблицы базы данных. Напротив, приведенный выше запрос будет получать поток данных по мере их поступления и создавать поток данных на выходе. Например, предположим, что каждые 10 минут в потоке котла происходит событие. Когда событие соответствует фильтру, запрос фильтра немедленно создаст событие в потоке результатов.
Таким образом, вы можете создать свое приложение следующим образом. Отправляйте события на потоковые процессоры, отправляя их напрямую или через брокера. Затем вы можете использовать «Streaming SQL» для написания потоковой части вашего приложения. Наконец, будетStream
Процессор настроен на работу с результатом. Это делается путем вызова службы при срабатывании потокового процессора или путем публикации события вbroker
тему и прослушайте тему до конца.
Доступно множество фреймворков потоковой обработки. (См. вопрос Quora:Какое решение для потоковой обработки лучше?).
Я рекомендую тот, который я помог построить,WSO2
потоковый процессор (WSO2SP
). это может быть отKafka
,HTTP
просьба, сообщениеbroker
Данные извлекаются в , а поток данных может быть запрошен с использованием языка «Streaming SQL».WSO2SP
даApache
Открытый исходный код по лицензии. Только два обычных сервера необходимы для обеспечения высокой доступности и могутОбработка 100 000 транзакций в секундупропускная способность. это может быть вKafka
Масштабирование до миллионовTPS
и поддерживает развертывание в нескольких центрах обработки данных.
кто использует стриминг
В общем, потоковая обработка полезна в случаях, когда мы можем обнаружить проблемы и у нас есть разумные ответы для улучшения результатов. Кроме того, в организации, управляемой данными, она играет ключевую роль.
Вот несколько вариантов использования
- Алгоритмический трейдинг, мониторинг фондового рынка
- Умный уход за пациентами
- Следите за производственной линией
- Оптимизация цепочки поставок
- Вторжение, наблюдение и обнаружение мошенничества (например,Uber)
- Большинство приложений для смарт-устройств: умный автомобиль, умный дом
- Smart Grid — (например, прогнозирование нагрузки и обнаружение выбросов, см.Интеллектуальная сеть, 4 миллиарда событий, пропускная способность в 100 тыс.)
- Мониторинг трафика, геозоны, отслеживание транспортных средств и диких животных, например.TFLЛондонская система управления транспортом
- Спортивная аналитика. Усовершенствуйте спорт с помощью аналитики в реальном времени (например, это то, что мы делаем в реальных футбольных матчах (например,Наложение аналитики в реальном времени на футбольные трансляции)
- Контекстно-зависимые акции и реклама
- Компьютерная система и сетевой мониторинг
- Профилактическое обслуживание (например,Методы машинного обучения для профилактического обслуживания)
- Обработка геопространственных данных
Дополнительные сведения о том, как использовать потоковую обработку, см.13 шаблонов потоковой обработки для создания приложений потоковой обработки и приложений реального времени
История потоковой обработки и ее основы
Потоковая обработка имеет долгую историю, начиная с активных баз данных, которые предоставляют условные запросы к данным, хранящимся в базах данных. Одним из первых фреймворков потоковой обработки былTelegraphCQ
, который встроен вPostgreSQL
выше.
Затем они разрастаются в две ветви.
Первая ветвь называется потоковой обработкой. Эти платформы позволяют пользователям создавать графы запросов, подключать пользовательский код и запускать графы запросов, используя множество машин. НапримерAurora
,PIPES
,STREAM
,Borealis
и YahooS4
. Эти архитектуры потоковой обработки ориентированы на масштабируемость.
Вторая ветвь называется комплексной обработкой событий. Эти фреймворки поддерживают языки запросов (например, сейчас мы используем потоковый SQL) и ориентированы на эффективную обработку событий для данного запроса, но обычно выполняются на 1-2 узлах. НапримерODE
,SASE
,Esper
,Cayuga
иSidhi
. Эти архитектуры ориентированы на эффективные алгоритмы потоковой передачи.
Эти две ветви фреймворков потоковой обработки ограничены нишевыми приложениями, такими как академические исследования или фондовый рынок. Потоковая обработка снова в центре внимания Yahoo S4 и Apache Storm. Он был представлен как «похожий на Hadoop, но в режиме реального времени». Это стало частью движения больших данных.
За последние пять лет две ветви были объединены. Я подробно описал в предыдущей статьеобсуждатьЭта проблема.
Если вы хотите узнать больше об истории фреймворков потоковой обработки, прочтитеRecent Advancements in Event ProcessingиProcessing flows of information: From data stream to complex event Processing
Надеюсь, это полезно. Если вам понравилась эта статья, вы можете найтиStream Processing 101иPatterns for Streaming Realtime Analytics.