Виктор возвращается с продолжением доклада про обработку данных в памяти! На этот раз он противопоставит «потоковый» подход «пакетному». Как мы знаем, информации, зараза, много! Мало того, что её много, так ещё никто не хочет сидеть и ждать, пока Hadoop-кластер посчитает всё. Big Data уже не интересно, Fast Data — наше новое «всё»! Так что же делать, если новые данные всё прибывают и прибывают по каналам связи (через сокет-сервер ли или модную нынче Кафку) ежесекундно (а может, даже и быстрее)? Можно было бы складывать их в какое-нибудь хранилище и считать по ночам MapReduce-ом. Или всё-таки прибегнем к потоковой обработке? У каждого подхода есть свои преимущества и недостатки: как очевидные, так и те, что не всегда лежат на поверхности. После небольшого введения и обзора терминов Виктор на основе примеров кода покажет, как использовать Hazelcast Jet для распределенной обработки потоковых данных.
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: Нам пишут
? Из названия не
было понятно,
что это
пропоганда
хазлкаста, что
не правильно.
✓ Все так 😏
✓ Читайте абстракт
✓ Как и Вы, я здесь в
коммандировке
17. @gamussa @hazelcast #jpoint
Disclaimer: Ham пишут
? Спикер … уделяет
время лишь одному
банальному
примеру подсчёта
слов в файле с
использованием
фреймворка их
компании.
* авторская орфография сохранена
35. private static void countVotes(IMap<String, Vote> userVotes) {
// execute the aggregation and print the result
long countVotes = userVotes
.aggregate(Aggregators.<String, Vote>count());
}
48. @gamussa @hazelcast #jpoint
Хранилище вьыдачи
Очень легко читать
K,V – в идеале
Очень быстро читать
хранить в памяти
хранить предподсчитанный результат
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
96. @gamussa @hazelcast #jpoint
Локальность и привязка данньых
Скорость и низкие задержки
данные и вычисления расположены
на одной ноде
Привязка к структуре партиций
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 между вершинами
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)
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
129. @gamussa @hazelcast #jpoint
* авторская орфография сохранена
Disclaimer: Ham пишут
? Про фэйлы нод в
хазелкасие хотелось
бы услышать
откровений и
примеры из жизни.
130. @gamussa @hazelcast #jpoint
* авторская орфография сохранена
Disclaimer: Ham пишут
? Про фэйлы нод в
хазелкасие хотелось
бы услышать
откровений и
примеры из жизни.
161. @gamussa @hazelcast #jpoint
Time-based обработка
Привязка записей к окнам на основе
Времени события
Времени обработки
Сколько ждать «запоздалых» данных?
162. @gamussa @hazelcast #jpoint
Time-based обработка
Привязка записей к окнам на основе
Времени события
Времени обработки
Сколько ждать «запоздалых» данных?
Точность vs Память
166. @gamussa @hazelcast #jpoint
Потоковая обработка: итоги
• Получать результаты вычислений реальном
времени возможно!
• Окна – конечное представление бесконечных
данных
• Окна основаны на временнЫх параметрах (время события + время
обработки)
167. @gamussa @hazelcast #jpoint
Потоковая обработка: итоги
• Получать результаты вычислений реальном
времени возможно!
• Окна – конечное представление бесконечных
данных
• Окна основаны на временнЫх параметрах (время события + время
обработки)
• Обработка «запоздалых» событий
• Вам решать, сколько ждать