4. Запросы
-‐
Процент
платящих
из
Китая
за
декабрь,
пришедших
с
сайтов
автомобильной
тематики?
-‐
Процент
кликов
в
рекламной
кампании
XXXXXXXX
от
пользователей
iPhone
5
и
выше?
-‐
Какая
страница
чаще
всего
редактировалась
в
эту
неделю?
-‐
Сколько
гигабайт
на
вход
прокачал
10.5.160.201
за
вчера?
-‐
Число
уникальных
пользователей
за
последний
час?
7. Цифры,
цифры,
цифры
Процессинг
Входящих
событий
поточно:
25Tb/день,
23Gb/мин
в
пике
Входящих
событий
батчем:
160Tb/день
1
событие
≈
1Kb
Хранилище
400Tb
сжатых
данных
(≈
50-‐100Pb
сырых)
1000
запросов/мин
в
пике
90%
<1
сек,
95%
<2
сек,
99%
<10
сек
Стоимость
на
три
порядка
меньше
за
событие,
чем
у
“обычной”
платформы
аналитики
8. Где
храним
Druid
(h†p://druid.io)
In-‐house,
open-‐source
(Apache
License,
Yay!)
✔
Распределение
запросов
и
данных
✔
Колоночное
хранение
✘Ограничиваем
число
уникальных
рядков
(UUID)
✘
После
записи
данные
не
меняются
✘
Нет
джойнов
9. Обработка
потоковых
данных
API
Logic
map,
filter,
union,
join,
…
?
Обновление
логики
на
новую
версию
?
Как
запроцессить
данные
еще
раз
Druid
10. Обработка
потоковых
данных
II
API
Logic
Apache
Ka‘a
-‐
Топики
(показы,
клики,
конверсии)
-‐
N
разделов
на
топик
-‐
Сообщения
в
разделе
упорядочены
-‐
Клиент
управляет
чтением
-‐
Храним
неделю
данных
-‐
Реплицируем
2x
Ka‘a
Druid
11. Pipeline
logic
map
Ka‘a
read
filter
filter
Ka‘a
read
join
map
Druid
save
Druid
save
filter
12. Guaranteed
delivery
map
Ka‘a
read
filter
filter
Ka‘a
read
join
map
Druid
save
Druid
save
filter
Пофейлились:
-‐
Забить:
at
most
once
-‐
Повторить:
at
least
once
-‐
???:
Exactly
once
16. Это
все?
API
?
Опоздавшие
на
join
события
?
Отсутствие
exactly
once
?
Хотим
запроцессить
данные
старше
7ми
дней
(буфер
в
Ka‘a)
Ka‘a
Druid
Storm
Redis
19. Теперь
все?
Не-‐а
Сложности
Storm:
-‐
Сильная
связанность
-‐
Чувствителен
к
потерям
пакетов
-‐
Неочевидно,
где
узкое
место
в
производительности
и
какой
уровень
параллелизма
выставлять
Слишком
много
тонкой
настройки
L
20. Apache
Samza
Ka‘a
-‐
Пишем
промежуточные
результаты
на
диск
в
Ka‘у
-‐
Узкое
место
там,
где
отстаем
по
чтению
из
Ka‘и
-‐
Join/group
by
без
Redis