apache storm: от простого приложения до подробностей...

115
www.luxoft.com 1 XII международная конференция CEE-SECR / РАЗРАБОТКА ПО 28 - 29 октября, Москва Kirill Shirokov Application architect Apache Storm

Upload: cee-secr

Post on 16-Apr-2017

225 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 1

XII международная конференцияCEE-SECR / РАЗРАБОТКА ПО28 - 29 октября, Москва

Kirill ShirokovApplication architect

Apache Storm

Page 2: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 2

http://www.excelacom.com/resources/blog/2016-update-what-happens-in-one-internet-minute

Page 3: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 3http://www1.unece.org/stat/platform/display/msis/Big+Data

Page 4: Apache Storm: от простого приложения до подробностей реализации

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

Page 5: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 5

Page 6: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 6

Page 7: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 7

Page 8: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 8

А тем временем в одном банке...

Page 9: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 9

Транзакции

Курсы валют

Лимиты

Предупреждение на UI:превышениелимита по сумме транзакций

Page 10: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 10

Транзакции

Курсы валют

Лимиты

Предупреждение на UI:превышениелимита по сумме транзакций

Page 11: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 11

0.5 сек

Транзакции

Курсы валют

Лимиты

Предупреждение на UI:превышениелимита по сумме транзакций

Page 12: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 12

1,000,000документов/

час

5 документов/сутки

Page 13: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 13

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 14: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 14

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 15: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 15

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 16: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 16

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 17: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 17

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 18: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 18

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 19: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 19

Технология?• Единая для разных проектов (support)• Сложная бизнес-логика• Жесткие NFR• Низкий порог вхождения• Мониторинг и настройка• Внезапно: память – дорогой ресурс

Page 20: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 20

И всетакое вкусное...

Page 21: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 21

Page 22: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 22

streaming

batch

Page 23: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 23

Stream поверх batch: НЕТне верьте Spark Streaming!

Batch поверх stream: ДА

Page 24: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 24

Stream поверх batch: НЕТне верьте Spark Streaming!

Batch поверх stream: ДА

Page 25: Apache Storm: от простого приложения до подробностей реализации

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);

Page 26: Apache Storm: от простого приложения до подробностей реализации

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…

Page 27: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 27

Page 28: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 28

Анатомия Storm

Spout A

Bolt A

Bolt DBolt B

Spout B

Bolt C

Storm Topology

Page 29: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 29

Анатомия Storm

Spout B

Spout A

Spout A

Spout A

Bolt A

Bolt DBolt B

Spout B

Bolt C

Storm Topology

Page 30: Apache Storm: от простого приложения до подробностей реализации

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

Page 31: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 31

Простота API

Page 32: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 32

Storm: источник данных

class Spout extends BaseRichSpout {

void nextTuple() {Values tuple = new Values(…);

collector.emit(tuple);

}

}

Page 33: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 33

Storm: источник данных

class Spout extends BaseRichSpout {

void nextTuple() {Values tuple = new Values(…);

collector.emit(tuple);

}

}

Page 34: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 34

Storm: обработчик

class Bolt extends BaseRichBolt {

void execute(Tuple input) {Values output = …(input);

collector.emit(output);

}

}

Page 35: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 35

Storm: обработчик

class Bolt extends BaseRichBolt {

void execute(Tuple input) {Values output = …(input);

collector.emit(output);

}

}

Page 36: Apache Storm: от простого приложения до подробностей реализации

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());

}

}

Page 37: Apache Storm: от простого приложения до подробностей реализации

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());

}

}

Page 38: Apache Storm: от простого приложения до подробностей реализации

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());

}

}

Page 39: Apache Storm: от простого приложения до подробностей реализации

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());

}

}

Page 40: Apache Storm: от простого приложения до подробностей реализации

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());

}

}

Page 41: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 41

Мониторинг и настройка

— Ваш телевизор в порядке! Идет репортаж с художественной выставки.

Page 42: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 42

Page 43: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 43

Page 44: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 44

Page 45: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 45

Page 46: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 46

WorkerJVM

Page 47: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 47

Host

Page 48: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 48

Подводные камни

Page 49: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 49

Проблема №1: грабли

сериализации

Page 50: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 50

Проблема №1: сериализация данных

class MyDataSupplier { // Not serializable!

public MyData getData() {

// Анонимный класс// Хотя: MyData implements Serializablereturn new MyData() { … }

}

}

Page 51: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 51

Сериализация кода: взлетим?

Создание компонентов

Сериализация

Передача на рабочие хосты

Десериализация

open() / prepare()

Обработка данных

Размещение топологии

Nimbus

Рабочиемашины

Page 52: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 52

Проблема №2: низкая производительность spout

Page 53: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 53

Проблема 1: низкая производительность spout

Сообщений/сек, Intel i3-3220

0

1000

2000

3000

4000

5000

6000

ТекущаяМаксимальная

Page 54: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 54

Остерегайтесь ISpoutWaitStrategy

class MySpout … { void nextTuple() {

if (iHaveTupleToSend()) {collector.emit(tuple);} else {// ISpoutWaitStrategy: 1ms delay}}

}

Page 55: Apache Storm: от простого приложения до подробностей реализации

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”);

Page 56: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 56

Проблема №3: «летучий голландец»

Page 57: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 57

Spout TxnFxBolt LimitCheckBolt UI

Page 58: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 58

Spout TxnFxBolt LimitCheckBolt UI

T

Page 59: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 59

Spout TxnFxBolt LimitCheckBolt UI

T

Page 60: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 60

Spout TxnFxBolt LimitCheckBolt UI

T

Page 61: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 61

Spout TxnFxBolt LimitCheckBolt UI

Storage

T

Page 62: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 62

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T

Page 63: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 63

Модели доставки (delivery)

Page 64: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 64

Модели доставки (delivery)

• At most once

Page 65: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 65

• At most once• At least once

Модели доставки (delivery)

Page 66: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 66

• At most once• At least once• Exactly once: МИФ!

Модели доставки (delivery)

Page 67: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 67

Spout TxnFxBolt LimitCheckBolt UI

Page 68: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 68

Spout TxnFxBolt LimitCheckBolt UI

AckerBolt

Page 69: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 69

Spout TxnFxBolt LimitCheckBolt UI

T

AckerBolt

Page 70: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 70

Spout TxnFxBolt LimitCheckBolt UI

T

AckerBolt

Регистрация кортежа + кому направлен

Page 71: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 71

Spout TxnFxBolt LimitCheckBolt UI

T

AckerBolt

Page 72: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 72

Spout TxnFxBolt LimitCheckBolt UI

ACK + кому направлен

T

AckerBolt

Page 73: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 73

Spout TxnFxBolt LimitCheckBolt UI

AckerBolt

T

Page 74: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 74

Spout TxnFxBolt LimitCheckBolt UI

ACK(покидает топологию)

AckerBolt

T

Page 75: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 75

Spout TxnFxBolt LimitCheckBolt UI

ACK T

AckerBolt

T

Page 76: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 76

Spout TxnFxBolt LimitCheckBolt UI

УРА!

AckerBolt

T

ACK T

Page 77: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 77

Spout TxnFxBolt LimitCheckBolt UI

ACK

AckerBolt

T

Page 78: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 78

Spout TxnFxBolt LimitCheckBolt UI

СПАСИБО!

AckerBolt

T

ACK

Page 79: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 79

И в чёмпроблема?

Page 80: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 80

Spout TxnFxBolt LimitCheckBolt UI

T1

AckerBolt

Page 81: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 81

Spout TxnFxBolt LimitCheckBolt UI

Регистрациякортежа

T1

AckerBolt

Page 82: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 82

Spout TxnFxBolt LimitCheckBolt UI

Storage

T1

AckerBolt

Page 83: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 83

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T1

AckerBolt

Page 84: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 84

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUTT1 FAIL

T1

AckerBolt

Page 85: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 85

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

Надо повторить

! T1

AckerBolt

Page 86: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 86

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T2 T1

AckerBolt

копия T1

Page 87: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 87

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T1

AckerBolt

T2

Page 88: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 88

Spout TxnFxBolt LimitCheckBolt UI

StorageБаза

ожила!AckerBol

t

T1T2

Page 89: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 89

Проблема 2: летучий голландец

Spout TxnFxBolt LimitCheckBolt UI

StorageAckerBolt

T1T2

ACK T1

Page 90: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 90

Проблема 2: летучий голландец

Spout TxnFxBolt LimitCheckBolt UI

Storage

WTF?

ACK T1

AckerBolt

T1T2

Page 91: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 91

Spout TxnFxBolt LimitCheckBolt UI

StorageAckerBolt

T2

T1: «летучий голландец»

Page 92: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 92

Spout TxnFxBolt LimitCheckBolt UI

StorageAckerBolt

T2

Page 93: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 93

Spout TxnFxBolt LimitCheckBolt UI

StorageAckerBolt

T2

Page 94: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 94

Spout TxnFxBolt LimitCheckBolt UI

Storage

ACK T2

AckerBolt

T2

Page 95: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 95

Spout TxnFxBolt LimitCheckBolt UI

Storage

ACK T2

AckerBolt

T2

Page 96: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 96

Spout TxnFxBolt LimitCheckBolt UI

Storage

T2 обработан!

AckerBolt

T2

ACK T2

Page 97: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 97

Решение?

Page 98: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 98

Решение? resetTimeout() Отслеживать таймаут и посылать FAIL

Page 99: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 99

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T1

AckerBolt

Page 100: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 100

Spout TxnFxBolt LimitCheckBolt UI

Storage

T1 resetTimeout

T1

AckerBolt

TIMEOUT

Page 101: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 101

Spout TxnFxBolt LimitCheckBolt UI

Storage

T1 FAIL

T1

AckerBolt

TIMEOUT

Page 102: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 102

Spout TxnFxBolt LimitCheckBolt UI

Storage

T1 FAIL

Txn

AckerBolt

TIMEOUT

Page 103: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 103

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUTT1 FAIL

AckerBolt

Page 104: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 104

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

Надо повторить

!

AckerBolt

Page 105: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 105

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T2

AckerBolt

копия T1

Page 106: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 106

Spout TxnFxBolt LimitCheckBolt UI

StorageTIMEOUT

T2

AckerBolt

Регистрациякортежа

Page 107: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 107

Spout TxnFxBolt LimitCheckBolt UI

Storage

ACK T2

AckerBolt

T2

Page 108: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 108

Spout TxnFxBolt LimitCheckBolt UI

Storage

ACK T2

AckerBolt

T2

Page 109: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 109

Spout TxnFxBolt LimitCheckBolt UI

Storage

T2 обработан!

AckerBolt

T2

ACK T2

Page 110: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 110

Конкуренты

Page 111: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 111

Конкуренты

Spark Streaming

Page 112: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 112

Конкуренты

Spark Streaming Heron by Twitter

Page 113: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 113

Конкуренты

Spark Streaming Heron by Twitter Apache Flink

Page 114: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 114

Конкуренты

Spark Streaming Heron by Twitter Apache Flink …

Page 115: Apache Storm: от простого приложения до подробностей реализации

www.luxoft.com 115

СПАСИБО!