Синергия Apache Kafka и Spark Streaming: потоковая обработка Big Data в реальном времени

Синергия Apache Kafka и Spark Streaming: потоковая обработка Big Data в реальном времени

    В этой статье мы рассмотрим архитектуру Big Data конвейера по непрерывной обработке потоковых данных в режиме реального времени на примере интеграции Apache Kafka и Spark Streaming.

    Что такое Spark Streaming и для чего он нужен

    Spark Streaming – это надстройка фреймворка с открытым исходным кодом Apache Spark для обработки потоковых данных. Спарк входит в экосистему проектов Hadoop и позволяет осуществлять распределённую обработку неструктурированной и слабоструктурированной информации. Изначально Спарк был написан на языке программирования Scala, затем добавилась часть компонентов на Java. Дополнительно к этим языкам, фреймворк также предоставляет API для Python и R [1].

    Apache Spark – это многокомпонентная система из следующих элементов:

    • Ядро (Spark Core), которое использует специализированные примитивы для рекуррентной обработки в оперативной памяти, что значительно ускоряет многократный доступ к загруженным в память пользовательским данным [1];
    • Spark SQL – модуль, который позволяет выполнять SQL-запросы над данными, сочетая реляционную обработку с процедурным API [2];
    • Spark Streaming — надстройка для обработки потоковых данных, о которой мы расскажем подробнее дальше;
    • Spark MLlib – набор библиотек машинного обучения (Machine Learning);
    • GraphX – библиотека для распределённой обработки графов.

    Спарк может работать как в среде кластера Hadoop под управлением YARN, так и без компонентов ядра хадуп. Спарк поддерживает несколько распределённых систем хранения (HDFS, OpenStack Swift, NoSQL-СУБД Cassandra, Amazon S3) и, в отличие от классического обработчика ядра Hadoop, который реализует двухуровневую концепцию MapReduce с дисковым хранилищем, Спарк работает с оперативной памятью, что существенно ускоряет вычисления [1].

    architecture, архитектура, Спарк, Spark
    Основные сведения об Apache Spark

     Зачем нужна интеграция Apache Kafka и Spark Streaming

    Как мы уже рассказывали в статье про основы Кафка для начинающих, Apache Kafka позволяет собирать и агрегировать непрерывные потоки Big Data от разных источников: устройств Internet of Things, приложений и сервисов. Однако, чтобы эти большие данные были полезны в прикладном смысле, их необходимо обрабатывать и анализировать. Apache Kafka не предназначена для интеллектуальной обработки данных, поэтому необходимы другие средства Big Data. В таком случае целесообразно использовать Spark Streaming, который будет обрабатывать потоки сообщений Кафка и записывать результат обработки в облачное хранилище, базу данных или распределенную файловую систему типа HDFS.

    Подобная задача актуальна, например, для банков и других финансовых организаций, которым необходимо обрабатывать потоки входящих транзакций в режиме реального времени по всем своим филиалам. Это может быть сделано с целью оперативного расчета открытой валютой позиции для казначейства, лимитов или финансового результата по сделкам и т.д.

    Несмотря на позиционирование Spark Streaming в качестве средства потоковой обработки, на практике он реализует «микропакетный» подход (micro-batch), когда поток данных интерпретируется как непрерывная последовательность небольших пакетов информации. Spark Streaming принимает данные из разных источников и объединяет их в небольшие пакеты через регулярные интервалы времени.

    В начале каждого интервала (batch interval) создается новый пакет, и любые данные, поступившие в течение этого времени, включаются в пакет. В конце интервала увеличение пакета прекращается. Размер batch interval определяется заранее и называется интервалом пакетирования. Для повышения отказоустойчивости приложения используются контрольные точки (checkpoints). Благодаря этому, когда Spark Streaming требуется восстановить утраченные данные, нужно только вернуться к последней контрольной точке и возобновить вычисления от нее [3]. Входящий в состав Apache Спарк движок Spark Engine передает пакеты обработанной информации в базу данных, облачные сервисы или файловые хранилища, а набор библиотек для машинного обучения Spark MLlib позволяет использовать эти данные в моделировании Machine Learning. Также средствами Spark SQL можно выполнять различные аналитические запросы. Таким образом, интеграция Apache Kafka и Spark Streaming обеспечивает непрерывный конвейер (pipeline) сбора и интеллектуальной обработки потоков Big Data в режиме реального времени. А как технически реализуется обмен данными между Apache Kafka и Spark Streaming, читайте в нашей следующей статье.

    Apache Kafka, Spark Streaming, Spark, Kafka, Спарк, Кафка
    Интеграция Apache Kafka и Spark Streaming

    Еще больше знаний об Apache Kafka, Спарк и других технологиях больших данных на наших практических курсах для руководителей, архитекторов, инженеров, администраторов, аналитиков Big Data и Data Scientist’ов в лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:

    Источники

    1. https://ru.wikipedia.org/wiki/Apache_Spark
    2. http://datareview.info/article/analitika-v-rezhime-realnogo-vremeni-s-pomoshhyu-spark-sql/
    3. https://habr.com/ru/post/451160/