apache storm: от простого приложения до подробностей...
TRANSCRIPT
www.luxoft.com 1
XII международная конференцияCEE-SECR / РАЗРАБОТКА ПО28 - 29 октября, Москва
Kirill ShirokovApplication architect
Apache Storm
www.luxoft.com 2
http://www.excelacom.com/resources/blog/2016-update-what-happens-in-one-internet-minute
www.luxoft.com 3http://www1.unece.org/stat/platform/display/msis/Big+Data
www.luxoft.com 4
1975 1980 1985 1990 1995 2000 2005 2010 20151E+00
1E+01
1E+02
1E+03
1E+04
1E+05
1E+06
1E+07
CPU fre-quency
Transistors
www.luxoft.com 5
www.luxoft.com 6
www.luxoft.com 7
www.luxoft.com 8
А тем временем в одном банке...
www.luxoft.com 9
Транзакции
Курсы валют
Лимиты
Предупреждение на UI:превышениелимита по сумме транзакций
www.luxoft.com 10
Транзакции
Курсы валют
Лимиты
Предупреждение на UI:превышениелимита по сумме транзакций
www.luxoft.com 11
0.5 сек
Транзакции
Курсы валют
Лимиты
Предупреждение на UI:превышениелимита по сумме транзакций
www.luxoft.com 12
1,000,000документов/
час
5 документов/сутки
www.luxoft.com 13
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 14
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 15
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 16
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 17
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 18
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 19
Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс
www.luxoft.com 20
И всетакое вкусное...
www.luxoft.com 21
www.luxoft.com 22
streaming
batch
www.luxoft.com 23
Stream поверх batch: НЕТне верьте Spark Streaming!
Batch поверх stream: ДА
www.luxoft.com 24
Stream поверх batch: НЕТне верьте Spark Streaming!
Batch поверх stream: ДА
www.luxoft.com 25
Сферический Flink в вакууме
DataStream<Tuple2<String, Integer>> dataStream = env
.socketTextStream("localhost", 9999)
.flatMap(new Splitter())
.myTransformation()
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
www.luxoft.com 26
DataStream<Tuple2<String, Integer>> dataStream = env
.socketTextStream("localhost", 9999)
.flatMap(new Splitter())
.myTransformation()
.keyBy(0)
.timeWindow(Time.seconds(5))
.sum(1);
+ жестокий энтерпрайз! KTO_TAM_CAMOE_TAKOE^.XPEH_EMy:= uMEHHO_ETO_MOXHATOE_OHO_CAMOE; end; end; procedure XMblPb.B_nyTb; var ETOT_PAXuT: TAM_ABTOMAT; begin ETOT_PAXuT:= KTO_TAM_CAMOE_TAKOE; while not WyXEP do with ETOT_PAXuT^ do begin BblBOg; ETOT_PAXuT:= XPEH_EMy; rge_EMy_KBACuTb(1, 10); TOPMO3HyTb(10); end; end; procedure BAM_XOPOWO; begin BAM_TEMHO; WriteLN('OH TOPMO3 v1.0 Copyright The Future Hackers, 1993'); WriteLN(' Written by Kirill Sh…
www.luxoft.com 27
www.luxoft.com 28
Анатомия Storm
Spout A
Bolt A
Bolt DBolt B
Spout B
Bolt C
Storm Topology
www.luxoft.com 29
Анатомия Storm
Spout B
Spout A
Spout A
Spout A
Bolt A
Bolt DBolt B
Spout B
Bolt C
Storm Topology
www.luxoft.com 30
Storm Topology
Анатомия Storm Stream
Spout B
Spout A
Spout A
Spout A
Bolt A
Bolt DBolt B
Spout B
Bolt C
Tuple
www.luxoft.com 31
Простота API
www.luxoft.com 32
Storm: источник данных
class Spout extends BaseRichSpout {
void nextTuple() {Values tuple = new Values(…);
collector.emit(tuple);
}
}
www.luxoft.com 33
Storm: источник данных
class Spout extends BaseRichSpout {
void nextTuple() {Values tuple = new Values(…);
collector.emit(tuple);
}
}
www.luxoft.com 34
Storm: обработчик
class Bolt extends BaseRichBolt {
void execute(Tuple input) {Values output = …(input);
collector.emit(output);
}
}
www.luxoft.com 35
Storm: обработчик
class Bolt extends BaseRichBolt {
void execute(Tuple input) {Values output = …(input);
collector.emit(output);
}
}
www.luxoft.com 36
Storm: создание топологии
class MyTopology { void main(...) {
builder = new TopologyBuilder();
builder.addSpout(“spout”, new MySpout(), 2);
builder.addBolt(“bolt”, new MyBolt(), 4).shuffle(“spout”);
StormSubmitter.submit(“topology”, config, builder.buildTopology());
}
}
www.luxoft.com 37
Storm: создание топологии
class MyTopology { void main(...) {
builder = new TopologyBuilder();
builder.addSpout(“spout”, new MySpout(), 2);
builder.addBolt(“bolt”, new MyBolt(), 4).shuffle(“spout”);
StormSubmitter.submit(“topology”, config, builder.buildTopology());
}
}
www.luxoft.com 38
Storm: создание топологии
class MyTopology { void main(...) {
builder = new TopologyBuilder();
builder.addSpout(“spout”, new MySpout(), 2);
builder.addBolt(“bolt”, new MyBolt(), 4).shuffle(“spout”);
StormSubmitter.submit(“topology”, config, builder.buildTopology());
}
}
www.luxoft.com 39
Storm: создание топологии
class MyTopology { void main(...) {
builder = new TopologyBuilder();
builder.addSpout(“spout”, new MySpout(), 2);
builder.addBolt(“bolt”, new MyBolt(), 4).shuffle(“spout”);
StormSubmitter.submit(“topology”, config, builder.buildTopology());
}
}
www.luxoft.com 40
Storm: создание топологии
class MyTopology { void main(...) {
builder = new TopologyBuilder();
builder.addSpout(“spout”, new MySpout(), 2);
builder.addBolt(“bolt”, new MyBolt(), 4).shuffle(“spout”);
StormSubmitter.submit(“topology”, config, builder.buildTopology());
}
}
www.luxoft.com 41
Мониторинг и настройка
— Ваш телевизор в порядке! Идет репортаж с художественной выставки.
www.luxoft.com 42
www.luxoft.com 43
www.luxoft.com 44
www.luxoft.com 45
www.luxoft.com 46
WorkerJVM
www.luxoft.com 47
Host
www.luxoft.com 48
Подводные камни
www.luxoft.com 49
Проблема №1: грабли
сериализации
www.luxoft.com 50
Проблема №1: сериализация данных
class MyDataSupplier { // Not serializable!
public MyData getData() {
// Анонимный класс// Хотя: MyData implements Serializablereturn new MyData() { … }
}
}
www.luxoft.com 51
Сериализация кода: взлетим?
Создание компонентов
Сериализация
Передача на рабочие хосты
Десериализация
open() / prepare()
Обработка данных
Размещение топологии
Nimbus
Рабочиемашины
www.luxoft.com 52
Проблема №2: низкая производительность spout
www.luxoft.com 53
Проблема 1: низкая производительность spout
Сообщений/сек, Intel i3-3220
0
1000
2000
3000
4000
5000
6000
ТекущаяМаксимальная
www.luxoft.com 54
Остерегайтесь ISpoutWaitStrategy
class MySpout … { void nextTuple() {
if (iHaveTupleToSend()) {collector.emit(tuple);} else {// ISpoutWaitStrategy: 1ms delay}}
}
www.luxoft.com 55
MySpoutWaitStrategy
config.put(Config.TOPOLOGY_SLEEP_SPOUT_WAIT_STRATEGY_TIME_MS, 1000);
class MyStrategy implements ISpoutWaitStrategy {void emptyEmit(long streak) { /* Спите, сколько хотите! */ } }
Config.put(TOPOLOGY_SPOUT_WAIT_STRATEGY, “MyStrategy”);
www.luxoft.com 56
Проблема №3: «летучий голландец»
www.luxoft.com 57
Spout TxnFxBolt LimitCheckBolt UI
www.luxoft.com 58
Spout TxnFxBolt LimitCheckBolt UI
T
www.luxoft.com 59
Spout TxnFxBolt LimitCheckBolt UI
T
www.luxoft.com 60
Spout TxnFxBolt LimitCheckBolt UI
T
www.luxoft.com 61
Spout TxnFxBolt LimitCheckBolt UI
Storage
T
www.luxoft.com 62
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T
www.luxoft.com 63
Модели доставки (delivery)
www.luxoft.com 64
Модели доставки (delivery)
• At most once
www.luxoft.com 65
• At most once• At least once
Модели доставки (delivery)
www.luxoft.com 66
• At most once• At least once• Exactly once: МИФ!
Модели доставки (delivery)
www.luxoft.com 67
Spout TxnFxBolt LimitCheckBolt UI
www.luxoft.com 68
Spout TxnFxBolt LimitCheckBolt UI
AckerBolt
www.luxoft.com 69
Spout TxnFxBolt LimitCheckBolt UI
T
AckerBolt
www.luxoft.com 70
Spout TxnFxBolt LimitCheckBolt UI
T
AckerBolt
Регистрация кортежа + кому направлен
www.luxoft.com 71
Spout TxnFxBolt LimitCheckBolt UI
T
AckerBolt
www.luxoft.com 72
Spout TxnFxBolt LimitCheckBolt UI
ACK + кому направлен
T
AckerBolt
www.luxoft.com 73
Spout TxnFxBolt LimitCheckBolt UI
AckerBolt
T
www.luxoft.com 74
Spout TxnFxBolt LimitCheckBolt UI
ACK(покидает топологию)
AckerBolt
T
www.luxoft.com 75
Spout TxnFxBolt LimitCheckBolt UI
ACK T
AckerBolt
T
www.luxoft.com 76
Spout TxnFxBolt LimitCheckBolt UI
УРА!
AckerBolt
T
ACK T
www.luxoft.com 77
Spout TxnFxBolt LimitCheckBolt UI
ACK
AckerBolt
T
www.luxoft.com 78
Spout TxnFxBolt LimitCheckBolt UI
СПАСИБО!
AckerBolt
T
ACK
www.luxoft.com 79
И в чёмпроблема?
www.luxoft.com 80
Spout TxnFxBolt LimitCheckBolt UI
T1
AckerBolt
www.luxoft.com 81
Spout TxnFxBolt LimitCheckBolt UI
Регистрациякортежа
T1
AckerBolt
www.luxoft.com 82
Spout TxnFxBolt LimitCheckBolt UI
Storage
T1
AckerBolt
www.luxoft.com 83
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T1
AckerBolt
www.luxoft.com 84
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUTT1 FAIL
T1
AckerBolt
www.luxoft.com 85
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
Надо повторить
! T1
AckerBolt
www.luxoft.com 86
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T2 T1
AckerBolt
копия T1
www.luxoft.com 87
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T1
AckerBolt
T2
www.luxoft.com 88
Spout TxnFxBolt LimitCheckBolt UI
StorageБаза
ожила!AckerBol
t
T1T2
www.luxoft.com 89
Проблема 2: летучий голландец
Spout TxnFxBolt LimitCheckBolt UI
StorageAckerBolt
T1T2
ACK T1
www.luxoft.com 90
Проблема 2: летучий голландец
Spout TxnFxBolt LimitCheckBolt UI
Storage
WTF?
ACK T1
AckerBolt
T1T2
www.luxoft.com 91
Spout TxnFxBolt LimitCheckBolt UI
StorageAckerBolt
T2
T1: «летучий голландец»
www.luxoft.com 92
Spout TxnFxBolt LimitCheckBolt UI
StorageAckerBolt
T2
www.luxoft.com 93
Spout TxnFxBolt LimitCheckBolt UI
StorageAckerBolt
T2
www.luxoft.com 94
Spout TxnFxBolt LimitCheckBolt UI
Storage
ACK T2
AckerBolt
T2
www.luxoft.com 95
Spout TxnFxBolt LimitCheckBolt UI
Storage
ACK T2
AckerBolt
T2
www.luxoft.com 96
Spout TxnFxBolt LimitCheckBolt UI
Storage
T2 обработан!
AckerBolt
T2
ACK T2
www.luxoft.com 97
Решение?
www.luxoft.com 98
Решение? resetTimeout() Отслеживать таймаут и посылать FAIL
www.luxoft.com 99
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T1
AckerBolt
www.luxoft.com 100
Spout TxnFxBolt LimitCheckBolt UI
Storage
T1 resetTimeout
T1
AckerBolt
TIMEOUT
www.luxoft.com 101
Spout TxnFxBolt LimitCheckBolt UI
Storage
T1 FAIL
T1
AckerBolt
TIMEOUT
www.luxoft.com 102
Spout TxnFxBolt LimitCheckBolt UI
Storage
T1 FAIL
Txn
AckerBolt
TIMEOUT
www.luxoft.com 103
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUTT1 FAIL
AckerBolt
www.luxoft.com 104
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
Надо повторить
!
AckerBolt
www.luxoft.com 105
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T2
AckerBolt
копия T1
www.luxoft.com 106
Spout TxnFxBolt LimitCheckBolt UI
StorageTIMEOUT
T2
AckerBolt
Регистрациякортежа
www.luxoft.com 107
Spout TxnFxBolt LimitCheckBolt UI
Storage
ACK T2
AckerBolt
T2
www.luxoft.com 108
Spout TxnFxBolt LimitCheckBolt UI
Storage
ACK T2
AckerBolt
T2
www.luxoft.com 109
Spout TxnFxBolt LimitCheckBolt UI
Storage
T2 обработан!
AckerBolt
T2
ACK T2
www.luxoft.com 110
Конкуренты
www.luxoft.com 111
Конкуренты
Spark Streaming
www.luxoft.com 112
Конкуренты
Spark Streaming Heron by Twitter
www.luxoft.com 113
Конкуренты
Spark Streaming Heron by Twitter Apache Flink
www.luxoft.com 114
Конкуренты
Spark Streaming Heron by Twitter Apache Flink …
www.luxoft.com 115
СПАСИБО!