Посетил сегодня встечу на тему «Breaking ETL barrier with Spark Streaming and Real Time Txn Volume Forecasting» и решил записать путевые заметки. Заметки получились немного циничные, но, надеюсь, интересные.



Встреча была организована компанией Concur, которая в основном работает на корпоративных клиентов, предоставляя им набор финансово-«туристических» услуг. Материл был интересный, уровень — легкий, обзор будет короткий.

Вкратце, смысл в том, чтобы заменить ETL на такое же примерно количество процессов, которые читают транзакционные логи и посылают их через Kafka в Spark Streaming, где они могут быть «лучше обработаны и проанализированны», и дальше сложены в OLAP (как и раньше). То есть это, по сути ETL, но real time, а не пакетный, и более программируемый.

Короткая вводная — со Spark я не работал, о Kafka читал только художественную литературу, Java не знаю, Scala и Akka знаю поверхностно, своих монадов не писал, потому не могу оценить техническую сторону предоставленного решения. На встречу я попал почти случайно. Где-то так.

И немного об организаторах. Встреча была проведена небольшой инициативной командой от фирму Concur. Офис Concur находится практически через дорогу от офиса Expedia, что в наши дни не означает ничего, потому как 90% народу и в одной фирме, и в другой, на самом деле сидит в Индии.



Я на работе пользуюсь их сервисом и то, что вижу, похоже на комбинацию 2х сервисов.

Первый сервис напоминает Expedia — я могу планировать и заказывать все детали командировки: билеты, машину, отель, выбирать по всякому (ближе-дешевле-быстрее); хорошая интеграци с отелями, авиакомпаниями; учтены детали компании где я работаю, например, есть «предпочтительные» рейсы и если я ими не пользуюсь, то должен привести обоснование и получить разрешение от моего начальства. Хорошо сделано.

Второй сервис — это отчеты о затратах и другая околофинансовая тематика.

Конечно, бухгалтерия видит все это по другому и сложнее. В целом система очень сложная и большая, даже огромная. Интегрирована с многими другими системами — отели, платежи и т.д.

Собственно, докладчик и начал с того, что у них есть проблемы, связанные с общей сложностью и размером системы, которую они и хотят побороть. По словам докладчика, в Concur-е около 28000 то ли баз данных, то ли ETL процессов, но в любом случае цифра впечатляющая. И «ночью» они перегоняют данные из OLTP баз в OLAP базы, дабы генерировать отчеты и анализировать всякие неясности. Ночь тут понятие относительное от локального времени заказчика, но это не сильно облегчает жизнь.

А потом докладчик добил фразой, что некоторые ETL длятся до 10 часов. И начал втаптывать текущую архитектуру в грязь:



Я несколько оживился, но вопросов задавать не стал — народ в зале кивал и одобрял каждый гвоздь в крышку этого гроба, в общем, не стал я придираться. Но как можно назвать 28000 databases монолитом или «hard to scale» я не понимаю. Да, нынче модно так обзывать все, и я понимаю, что инициативная группа, на доклад которой я попал, по сути пропагандирует локальную революцию (и пожизненную оплату 2-3 городов индийских программистов), и тут любые эпитеты допустимы.

Потом докладчик рассказал, что есть 100% идеальное решение проблемы и зал с ним как-то сразу согласился. Ну, то есть 28000 слева они, конечно, не масштабируются, да. А вот те же 28000 справа сразу раз — и масштабируются.



Дальше пошло немного веселее — быстро прошлись по существующим вариантам и как-то тоже их обругали немного. Я не успел сделать фото, где справа были еще отчеты, но на них то же не особо концентрировались — ну, отчет и отчет, делов то, отчет — это не архитектура! Отдельно упомянули Alerts — им была посвящена вторая часть мероприятия, но об этом позже.



Устно сравнили Spark Streaming с конкурентами, отдельно упомянули возможность обрабатывать события и пакетные данные одним и тем же кодом. Код конечно надо писать на Scala. Отдельно и многократно упоминались Exactly Once, гарантированная доставка и встроенная резервная репликация данных.



Ну и собственно финальный слайд:



Слева внизу OLTP — это те 28000 баз, они были, есть и будут.
Справа внизу синенькие OLAP — это то куда сейчас стекаются данные по ETL. Репликация есть и остается, отчеты есть и остаются. Тут ничего не меняем.
Между ними сейчас ETL процессы запускаемые по сложному графику, на схеме не показано.

Все остальное — это будущее, но очень светлое!

Слева внизу «P» — это продюсер, их много, читатель уже наверняка знает, сколько их будет. Этот продюсер читает транзакционные логи и посылает в Kafka. Конечно, как protobuf, ведь так быстрее! А Kafka в 5-20 раз быстрее, чем RabbitMQ. В будущем мы OLTP базы устраним и заменим на Service Bus, потому как Event Store! Но не сейчас, к сожалению, мешает UI, и тут мы безсильны…

Дальше данные идут в Spark Streaming, где мы напишем несложный Scala код и Spak-SQL запросы. Результат запишем в OLAP. Он не будет до конца правильный, потому как Eventual Consistency, но это нормально, так сейчас везде.

А вверху — это Hadoop. В принципе, он нам не нужен, но пусть будет — часть данных ведь прийдет в виде файлов и не по Service Bus. Увы, и так бывает. Поэтому Hadoop надо.

Вокруг этого слайда и прошли минут 15 вопросов и ответов.

Потом была сумбурная вторая часть, минут 15, где упомянули о сложении Twitter Trees. Зал молчал, вопросов не было.

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

Комментарии (5)


  1. alexxz
    16.07.2015 15:54

    Гладко было на бумаге… А не было ли цифр, сколько они собираются обрабатывать? Что-то со Спарком у нас складывается не всё так радостно и весело, как обещают такие доклады.


    1. itur Автор
      17.07.2015 09:37

      Цифр пока не было. Докладчики честно признались, что все пока работает на одном компе, собственно с него и демонстрировали три shell-a где что-то как бы происходило. Обещали в августе показать больше и, может, цифры какие-то дать.


  1. 0x0FFF
    16.07.2015 17:36
    +2

    Их целевая архитектура соответствует современным тенденциям в проектировании систем обработки данных, этакая смесь Data Lake + Lambda Architecture. Но вот сделана она не совсем так как надо, да и возможно человек, читавший этот доклад, не является автором предлагаемой архитектуры

    По проблемам (последний слайд с архитектурой):
    1. Продюссер «P» должен находиться перед OLTP системой, а не после нее. После OLTP уже можно делать стандартную выгрузку в хранилище или же CDC
    2. Архитектура с Spark Streaming не имеет особых преимуществ при отсутствии потребителя real-time данных, вроде каких-либо real-time отчетов или других аналогичных систем
    3. Стрелка между HDFS и Spark Streaming двухсторонняя, это вообще непонятно зачем. Данные тут должны идти только в одну сторону — от источника в виде Kafka в HDFS
    4. Непонятно, зачем сюда запихнули Tachyon — для быстрой отчетности есть OLAP в виде какой-нибудь MPP RDBMS, зачем поднимать данные в память из HDFS и получать к ним доступ через Hive — непонятно, все равно ведь быстрее MPP не получится, да и дорого. Тут скорее нужна еще стрелка из ETL, работающего на Hadoop, в их OLAP-хранилище

    В целом же можно реализовать подобную архитектуру и более красиво,

    как-то так

    RTI — real-time intelligence, STG — staging, FE — front-end, BE — back-end, SP — stored procedure, ES — Event Store, Srv — Web Service


    1. itur Автор
      17.07.2015 09:51
      +2

      Спасибо за развернутый коммент!
      1 — Да, наверное это правильно, чтобы продюсер был до OLTP, но это или UI переписывать или (если есть) App Layer.
      Все-таки читать логи как-то проще звучит. И продать легче.
      2 — Докладчик говорил что некоторые ETL-и длятся часами, я не очень понял на каком участке происходил затык, но может архитектура со Spark Streaming поможет убрать (сгладить) пиковые нагрузки. Т.е. эти часы распределятся на весь день. Тогда конечно что-то другое просядет…
      3 — возможно двусторонняя связь Kafka — HDFS, вернее Spark — HDFS, означает что данные приходят из обоих источников, а результаты идут в HDFS.
      4 — Tachyon — похоже что это просто кэш.

      Было бы интересно послушать доклад о Вашей архитектуре. Не для применения, а развития для :)


      1. 0x0FFF
        17.07.2015 10:17

        1 — Читать логи СУБД CDC умеет уже 10 лет, и никаких модных Kafka и Spark Streaming для этого не нужно
        2 — Тут вопрос в том, что real-time обработка данных зачастую дороже в плане ресурсов CPU и IO, чем batch-обработка (если имеется в виду именно одинаковая обработка). То есть растянуть нагрузку на весь день — плохой вариант. А хороший — это оставить процесс ETL для OLTP системы в покое, пусть он собирает данные из Kafka и раз в день запускает ту же логику на 4 часа. Другой же процесс, читающий те же самые данные, производит агрегацию в реальном времени. Допустим, пример из телекома: с предбиллинга сыпятся данные о вызовах, в real-time системе производится их агрегация по базовым станциям для показа статистики обрывов соединений в реальном времени на карте, а в batch-систему данные складываются «as is» и обрабатываются ночными ETL-процессами, строящими разные витрины и считающими KPI
        3 — Конкретно на последней картинке двухсторонняя связь означает, что данные загружаются в HDFS, после чего кем-то пушатся в Spark Streaming, который их затем складывает в OLTP систему. Вопрос в том, что между HDFS и OLTP системами Spark Streaming не нужен: какой смысл в real-time системе, находящейся между двумя batch-системами?
        4 — Я о том, что «горячие» данные должны лежать в OLTP, а «холодные» — в HDFS. Tachyon здесь — попытка работать с «горячими» данными в HDFS, где их по определению быть не должно. Уверяю вас, Tachyon + Hive будет в разы медленнее среднего MPP, а так как данные лежат только в памяти, эта связка будет еще и дороже и сложнее в управлении