Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[JPoint 2017] Распределяй и властвуй — 2: Потоки данных наносят ответный удар

[JPoint 2017] Распределяй и властвуй — 2: Потоки данных наносят ответный удар

Виктор возвращается с продолжением доклада про обработку данных в памяти! На этот раз он противопоставит «потоковый» подход «пакетному». Как мы знаем, информации, зараза, много! Мало того, что её много, так ещё никто не хочет сидеть и ждать, пока Hadoop-кластер посчитает всё. Big Data уже не интересно, Fast Data — наше новое «всё»! Так что же делать, если новые данные всё прибывают и прибывают по каналам связи (через сокет-сервер ли или модную нынче Кафку) ежесекундно (а может, даже и быстрее)? Можно было бы складывать их в какое-нибудь хранилище и считать по ночам MapReduce-ом. Или всё-таки прибегнем к потоковой обработке? У каждого подхода есть свои преимущества и недостатки: как очевидные, так и те, что не всегда лежат на поверхности. После небольшого введения и обзора терминов Виктор на основе примеров кода покажет, как использовать Hazelcast Jet для распределенной обработки потоковых данных.

0680be1c881abcf19219f09f1e8cf140?s=128

Viktor Gamov

April 07, 2017
Tweet

More Decks by Viktor Gamov

Other Decks in Programming

Transcript

  1. @gamussa @hazelcast #jpoint Распределяй и Властвуй -2:
 Потоки данных наносят

    ответный удар

  2. Stream v. Batch

  3. Кто?

  4. Solutions Architect Кто?

  5. Solutions Architect Developer Advocate Кто?

  6. Solutions Architect Developer Advocate @gamussa везде в интернете Кто?

  7. Solutions Architect Developer Advocate @gamussa везде в интернете А ты

    зафоловил меня, $userName © Кто?
  8. Part Deux?

  9. None
  10. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

  11. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

    ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  12. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

    ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  13. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

    ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  14. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

    ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так
  15. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут

    ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так ✓ Читайте абстракт ✓ Как и Вы, я здесь в коммандировке
  16. @gamussa @hazelcast #jpoint Disclaimer: Ham пишут * авторская орфография сохранена

  17. @gamussa @hazelcast #jpoint Disclaimer: Ham пишут ? Спикер … уделяет

    время лишь одному банальному примеру подсчёта слов в файле с использованием фреймворка их компании. * авторская орфография сохранена
  18. None
  19. @gamussa @hazelcast #jpoint Пакетная Обработка Данные в состоянии покоя

  20. @gamussa @hazelcast #jpoint Данные и запросы Происхождение и обработка

  21. @gamussa @hazelcast #jpoint

  22. @gamussa @hazelcast #jpoint

  23. @gamussa @hazelcast #jpoint Данньые…

  24. @gamussa @hazelcast #jpoint Данньые…

  25. @gamussa @hazelcast #jpoint ✓ … immutable по своей сути Данньые…

    ✓ … привязаны ко времени
  26. @gamussa @hazelcast #jpoint CRUD -> CR Мариванна, в углу скр..©

  27. @gamussa @hazelcast #jpoint Обработка – это запрос

  28. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному

    набору данных
  29. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному

    набору данных Проекции
  30. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному

    набору данных Проекции Агрегации
  31. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному

    набору данных Проекции Агрегации Joins
  32. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN"04/07/2017" AND "04/07/2017"

    GROUP BY user_vote;
  33. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN "04/7/2017" AND

    "04/08/2017" GROUP BY user_vote;
  34. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN"04/07/2017" AND "04/08/2007"

    GROUP BY user_vote;
  35. private static void countVotes(IMap<String, Vote> userVotes) { // execute the

    aggregation and print the result long countVotes = userVotes .aggregate(Aggregators.<String, Vote>count()); }
  36. None
  37. @gamussa @hazelcast #jpoint Lambda architecture origins http:/ /nathanmarz.com/blog/how-to-beat-the-cap-theorem.html

  38. @gamussa @hazelcast #jpoint Lambda Architecture

  39. None
  40. @gamussa @hazelcast #jpoint Предподсчитанньый результат http:/ /nathanmarz.com/blog/how-to-beat-the-cap-theorem.html

  41. @gamussa @hazelcast #jpoint Пакетньый процесс http:/ /nathanmarz.com/blog/how-to-beat-the-cap-theorem.html

  42. None
  43. @gamussa @hazelcast #jpoint Хранилище вьыдачи

  44. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать

  45. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V –

    в идеале
  46. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V –

    в идеале Очень быстро читать
  47. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V –

    в идеале Очень быстро читать хранить в памяти
  48. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V –

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

  50. @gamussa @hazelcast #jpoint Oracle Coherence

  51. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid

  52. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid Распределенные кэши

  53. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid Распределенные кэши

    Коммерческий продукт
  54. @gamussa @hazelcast #jpoint Infinispan

  55. @gamussa @hazelcast #jpoint Infinispan In-memory data grid

  56. @gamussa @hazelcast #jpoint Infinispan In-memory data grid распределённые кэши

  57. @gamussa @hazelcast #jpoint Infinispan In-memory data grid распределённые кэши Лицензия

    Apache v2
  58. @gamussa @hazelcast #jpoint Еще хотелки…

  59. @gamussa @hazelcast #jpoint Еще хотелки… Простота

  60. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API

  61. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость

  62. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость Cloud

    Native
  63. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость Cloud

    Native
  64. @gamussa @hazelcast #jpoint Псс, парень, Hazelcast IMDG, не хочешь? Ну

    очень быстрый грид ©
  65. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем?

  66. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем? In-memory Data Grid

  67. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем? In-memory Data Grid Распределенные

    Кэши (IMap, JCache) Проекции, Агрегации Java колекции (IList, ISet, IQueue) Система обмена сообщений (Topic, RingBuffer) Вычисления (ExecutorService, M-R)
  68. None
  69. @gamussa @hazelcast #oraclecode

  70. @gamussa @hazelcast #jpoint Пример: ПАКЕТНАЯ ОБРАБОТКА НА HAZELCAST и SPARK

  71. @gamussa @hazelcast #jpoint ДАННЫЕ НЕ ДОЛЖНЫ ОБНОВЛЯТЬСЯ ВО ВРЕМЯ ЧТЕНИЯ

  72. @gamussa @hazelcast #jpoint ПОЧЕМУ?

  73. @gamussa @hazelcast #jpoint ПРИ РАСШИРЕНИИ, MAP ПЕРЕРАСПРЕДЕЛЯЕТ ДАННЫЕ ВНУТРИ КОНТЕЙНЕРА

  74. @gamussa @hazelcast #jpoint КУРСОР НЕ УКАЗЫВАЕТ НА КОРРЕКТНУЮ ЗАПИСЬ. МОГУТ

    ВОЗНИКАТЬ ДУБЛИКАТЫ ИЛИ ДАННЫЕ ПРОПАДАТЬ
  75. @gamussa @hazelcast #jpoint Потоковая обработка Данные в движении

  76. @gamussa @hazelcast #jpoint Hazelcast Jet Считаем ваши слова. Быстро. В

    памяти
  77. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти

  78. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти

  79. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти

  80. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти

  81. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти

  82. @gamussa @hazelcast #jpoint Jet против мира Big Data

  83. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота

  84. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке
  85. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках)
  86. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость
  87. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость data affinity
  88. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking
  89. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG
  90. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные
  91. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в

    разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные discovery
  92. @gamussa @hazelcast #jpoint Когда пьытаешься объяснить современньый мир Big Data

  93. @gamussa @hazelcast #jpoint Локальность и привязка данньых

  94. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие

    задержки
  95. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие

    задержки данные и вычисления расположены на одной ноде
  96. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие

    задержки данные и вычисления расположены на одной ноде Привязка к структуре партиций
  97. @gamussa @hazelcast #jpoint Направленньый ациклический граф

  98. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения

  99. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения Вершина

    – шаг выполнения
  100. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения Вершина

    – шаг выполнения Работает как для пакетной и потоковой
  101. @gamussa @hazelcast #jpoint Исполнение графа

  102. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком
  103. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком Каждая вершина графа исполняется набором tasklet-ов
  104. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков
  105. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров
  106. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками
  107. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф

    целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками Back pressure между вершинами
  108. @gamussa @hazelcast #jpoint Cooperative Multithreading

  109. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле,

    который выполняется в native треде
  110. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле,

    который выполняется в native треде нет переключения контекста привязка к ядру процессора
  111. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле,

    который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms)
  112. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле,

    который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms)
  113. @gamussa @hazelcast #jpoint Cooperative Multithreading

  114. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000

    tasklet
  115. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000

    tasklet Если нечего делать, тред
  116. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000

    tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer
  117. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000

    tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer
  118. @gamussa @hazelcast #jpoint ТОпологии Что нам стоит кластер построить

  119. @gamussa @hazelcast #jpoint Топологии

  120. @gamussa @hazelcast #jpoint Топологии

  121. @gamussa @hazelcast #jpoint Топологии

  122. @gamussa @hazelcast #jpoint Топологии Jet!Cluster Sink Source / Enrichment

  123. @gamussa @hazelcast #jpoint Топологии

  124. None
  125. @gamussa @hazelcast #jpoint Benchmarks

  126. @gamussa @hazelcast #jpoint Benchmarks

  127. @gamussa @hazelcast #jpoint Демо

  128. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут

  129. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут

    ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.
  130. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут

    ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.
  131. @gamussa @hazelcast #jpoint проблемы Текущее состояние

  132. @gamussa @hazelcast #jpoint Проблемьы

  133. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям

  134. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям Работа с «бесконечными»

    данными
  135. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям Работа с «бесконечными»

    данными Неупорядоченные и «опоздавшие» события
  136. I FOUND YOUR LACK OF FAULT TOLERANCE disturbing

  137. @gamussa @hazelcast #jpoint 10 +1 Бэкапьы Консистентный бэкап системы Обработка

    «At-least once» vs «Exactly once» Снэпшот распределенной системы
  138. @gamussa @hazelcast #jpoint 10 10 Бэкапьы Консистентный бэкап системы Обработка

    «At-least once» vs «Exactly once» Снэпшот распределенной системы
  139. @gamussa @hazelcast #jpoint 10 10 11 Бэкапьы Консистентный бэкап системы

    Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  140. @gamussa @hazelcast #jpoint 10 11 10 11 Бэкапьы Консистентный бэкап

    системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  141. @gamussa @hazelcast #jpoint Reader Writer Reader

  142. @gamussa @hazelcast #jpoint Reader Writer Reader Snapshot

  143. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot

  144. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot

  145. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot

  146. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot

  147. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  148. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  149. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  150. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  151. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  152. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot

  153. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Writer Snapshot

  154. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Writer Snapshot

    Done!
  155. @gamussa @hazelcast #jpoint Как считать «бесконечные» данные?

  156. Конечное представление бесконечных данных

  157. @gamussa @hazelcast #jpoint

  158. @gamussa @hazelcast #jpoint https:/ /www.oreilly.com/ideas/the-world-beyond-batch-streaming-101

  159. @gamussa @hazelcast #jpoint Time-based обработка

  160. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на

    основе Времени события Времени обработки
  161. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на

    основе Времени события Времени обработки Сколько ждать «запоздалых» данных?
  162. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на

    основе Времени события Времени обработки Сколько ждать «запоздалых» данных? Точность vs Память
  163. @gamussa @hazelcast #jpoint Fatality

  164. @gamussa @hazelcast #jpoint Потоковая обработка: итоги

  165. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений

    реальном времени возможно!
  166. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений

    реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки)
  167. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений

    реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки) • Обработка «запоздалых» событий • Вам решать, сколько ждать
  168. @gamussa @hazelcast #jpoint hazelcast/hazelcast-jet-code-samples

  169. @gamussa @hazelcast #jpoint СПАСИБО! Вопросы? @gamussa viktor@hazelcast.com