🤓 data-архитектуры: Lamda vs Kappa
по рабочей необходимости въезжаю в тему стриминга данных, пытаюсь вникнуть в тамошние концепции, основные проблемы и методы их решения. Первая тема на пути — базовые отличия обработки данных батчами и на непрерывном потоке.
батчинг — это просто и надёжно: тащишь все данные за какой-то период (для надёжности — с нахлёстом) и пересчитываешь спокойно произвольный период в прошлое по мере доезда всех данных. Получается консистентно, но вчера.
стриминг — это быстро, но сложно: данные льются потоком, их надо успевать читать и записывать. Если воркер упал, что происходит с данными? если для трансформации нужен стейт или джойн, то сколько держать событие в памяти? поначалу решения были неконсистентными by design
но всем хотелось сейчас и сразу, поэтому придумали как совместить эти два подхода
🔵 Lambda-архитектура
идея простая: когда хочется стриминг, но он ещё ненадёжный, делаем два потока данных:
1. текущий инкремент бежит через стриминг
2. а потом по старинке сверху накатываем батч
получается и быстро (но не надёжно), и eventually надёжно — после того как накатился следующий батч.
проблема в том, что код трансформаций теперь лежит в двух разных местах — и стриминг, и батчинг считают по-своему; приходится поддерживать две кодовые базы и следить за консистентностью.
http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
🟡 Kappa-архитектура
тогда другие умные люди подумали и предложили альтернативный подход: давайте держать единую версию трансформаций и пускай главным будет стриминг-реализация.
А если (когда!) надо будет пересчитать историю, то мы просто будем держать в памяти данные за нужный период и запускать новые версию джобов поверх них. Автор приводит пример что они в Линкедине таким образом держат в памяти 30 дней и для отдельных сущностей это может быть «терабайты».
http://radar.oreilly.com/2014/07/questioning-the-lambda-architecture.html
Звучит интересно, но пока не понял, как при каппа-архитектуре работают бекфилы? что делать, если надо пересчитать не 30 дней, а все данные за всю историю?
Post #308
1.31K