Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014
-
Upload
volker-janz -
Category
Data & Analytics
-
view
10.448 -
download
3
Transcript of Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014
Big Game Data - Volker Janz
Big Game Data
1
Event Tracking @ InnoGames
Big Game Data - Volker Janz 2
Big Game Data - Volker Janz 3
@prenomenon!
Lead Software Developer💼
Volker Janz
Big Game Data - Volker Janz 4
Big Game Data - Volker Janz 5
InnoGames๏ Free-to-play Onlinespiele
๏ Die Stämme
๏ Forge of Empires
๏ Grepolis
๏ The West
๏ 350 Mitarbeiter am Standort Hamburg
๏ Mehr als 130 Millionen Registrierungen
๏ International
๏ Bester Arbeitgeber der Games Branche
Big Game Data - Volker Janz 6
" Was ist Big Data?
Keynote Template
Big Game Data - Volker Janz 7
Was ist Big Data? "
Big Game Data - Volker Janz 8
Was ist Big Data? "
VolumeVarietyVelocity
Big Game Data - Volker Janz 9
⚡ Events
Keynote Template
Big Game Data - Volker Janz 10
Events ⚡
!Ein Event ist ein Indikator für ein beobachtbares Geschehen
bzw. eine Zustandsänderung in Form einer Text Nachricht
welche aktiv sowie passiv durch oder für einen bestimmten,
identifizierbaren Nutzer oder ein System zu einer bestimmten
Zeit ausgelöst werden kann.
Big Game Data - Volker Janz 11
Events ⚡
!Ein Event ist ein Indikator für ein beobachtbares Geschehen
bzw. eine Zustandsänderung in Form einer Text Nachricht
welche aktiv sowie passiv durch oder für einen bestimmten,
identifizierbaren Nutzer oder ein System zu einer bestimmten
Zeit ausgelöst werden kann.
Big Game Data - Volker Janz 12
Events ⚡
0.1.0/prog/build/foe/2.0.1/de/4711/2014-10-01T13:37.000Z/ua/kaserne/10/20/15
Identifikatoren Metadaten Parameter
version/category/type/game/sprint/market/player/date/user_agent/param1/…/paramN
Big Game Data - Volker Janz 13
Events ⚡
Big Game Data - Volker Janz 14
Events ⚡
prog/build
prog/fight
set/change
soci/invite
soci/message
Big Game Data - Volker Janz 15
Events ⚡
280M100G3000G
Events / Tag
Daten / Tag
Daten / Monat
Big Game Data - Volker Janz16
Events ⚡
" Hadoop
$ GameServer
$ GameServer
$ GameServer
📈
👤
💻
Game Backend Tracking
Drag Your Image Here
Big Game Data - Volker Janz 17
% Event Tracking
Keynote Template
Big Game Data - Volker Janz 18
Event Tracking %
Aller Anfang ist schwer
Big Game Data - Volker Janz 19
Event Tracking %
$ Game Server
'Event
Gateway
Event Client
(Message Queue
)Event
Consumer
Hadoop
📈
👤
💻
Entkoppeln und einfacher einstieg ins System
Buffer und „Auffangbecken“ - Bereitstellung der Events an
Consumer
Konsumieren und Schreiben der Events an die Korrekte
Stelle im HDFS (Partitionierung)
Verteilte Speicherung (HDFS) und Verarbeitung
(MapReduce, Spark)
Big Game Data - Volker Janz 20
'Gateway
(Queue
💻Client
)Consumer
Twitter Kestrel
Apache Storm
Perl Script
REST API mit Dropwizard
Event Tracking %
Big Game Data - Volker Janz 21
Event Tracking %
$ Game Server
'REST API
Perl Script
(Kestrel
Hadoop
'REST API
(Kestrel
LB⚡
Storm Cluster
⟳Round Robin
Event File
Backup =nginx access.log +$request_body +logrotate +hadoop fs -put
Big Game Data - Volker Janz 22
( Kestrel
Keynote Template
https://github.com/twitter/kestrel
Big Game Data - Volker Janz 23
Kestrel (
Einfache, verteile Message queue
Big Game Data - Volker Janz 24
Kestrel (
Persistent Hält Messages im Speicher für Speed
Schreibt in Journal Dateien für Persistenz
Big Game Data - Volker Janz 25
Kestrel (
Zuverlässig Clients können Messages „vorläufig“ lesen Bei Abbruch wird Message „zurückgelegt“
Big Game Data - Volker Janz 26
Kestrel (
Flexibel memcache Protokoll
Einfaches text Protokoll Apache Thrift
Big Game Data - Volker Janz 27
💻
Kestrel (
(geordnet
(geordnet
(locker geordnet
Big Game Data - Volker Janz 28
💻
Kestrel (
(events_queue
(events_queue+fanout💻
Client 1
Client 2
Big Game Data - Volker Janz 29
Kestrel (
new KestrelConfig { queues = new QueueBuilder() { name = "q" maxItems = 500 } :: new QueueBuilder() { name = "q+fanout" maxAge = 1.minute } :: new QueueBuilder() { name = "x" maxMemorySize = 16.megabytes }}
Big Game Data - Volker Janz 30
Kestrel (
Big Game Data - Volker Janz 31
⚡ Storm
Keynote Template
https://github.com/apache/storm
Big Game Data - Volker Janz 32
Storm ⚡
Apache™ Storm is a distributed real-time computation system for processing fast, large
streams of data.
Big Game Data - Volker Janz 33
Storm ⚡
Schnell⏩
1.000.000 100 Byte Nachrichten pro
Sekunde pro Node
Skalierbar,
Parallele, im Cluster verteilte
Berechnung
Fehlertolerant❌
Ausfallende Worker und Nodes werden
automatisch kompensiert
Zuverlässig✓
Garantiert „at least once“ Verarbeitung
von Nachrichten
Big Game Data - Volker Janz 34
Storm ⚡
Tupel
Tupel
Tupel
Tupel
Datenstrom
Storm verarbeitet Datenströme aus Tupeln
Ein Tupel ist eine Liste von Werten
Big Game Data - Volker Janz 35
Storm ⚡
Spout
Quelle von DatenströmenKestrel Spout https://github.com/nathanmarz/storm-kestrel
Big Game Data - Volker Janz 36
Storm ⚡
Verarbeitung von Tupeln
Bolt
Big Game Data - Volker Janz 37
Storm ⚡
In Datenbank schreiben
Big Game Data - Volker Janz 38
Storm ⚡
Aus Datenbank lesen
Big Game Data - Volker Janz 39
Storm ⚡
Optional weitere Tupel / Datenströme erzeugen
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
Big Game Data - Volker Janz 40
Storm ⚡
Eine Topologie ist ein gerichteter azyklischer Graph und eine
Komposition aus Spouts und Bolts
Big Game Data - Volker Janz 41
λ Lambda Architektur
Keynote Template
Big Game Data - Volker Janz 42
Lambda Architektur λ
Abstrakte Architektur für die Realisierung von skalierbaren
Echtzeitsystemen
Big Game Data - Volker Janz 43
Lambda Architektur λ
@nathanmarz http://manning.com/marz/
!
📕
Big Game Data - Volker Janz 44
Lambda Architektur λ
" Datenquellen
Batch Layer
Speed Layer
Serving Layer Query
Big Game Data - Volker Janz 45
Lambda Architektur λ
" Datenquellen
Query
Batch Layer
Speed Layer
Serving Layer
Master Datensatz
Batch Views⟳
Datenstrom Real-Time Views⚡
Merged View&
Big Game Data - Volker Janz 46
Lambda Architektur λ
Messaging System Query
DB / DFSBatch
Processing System
Stream Processing System
DB Batch Views
DB Real-Time Views
Application
Big Game Data - Volker Janz
Hadoop 2 / YARN
Lambda Architektur
47
λ
Kestrel Query
HDFS MapReduce / Spark
Storm-YARN
HOYAHue /
Apache Twill / Apache
Slider
Big Game Data - Volker Janz
Hadoop 2 / YARN
Lambda Architektur
48
λ
Query
HDFS MapReduce / Spark
Storm-YARN HOYA
HDFS
Apache Mesos
Big Game Data - Volker Janz
Lambda Architektur
49
λ
select c.name, hb.tweets.countfrom hive.ods.`customers` cjoin hbase.user.`socialdata` hbon c.customerId = convert_from(hb.rowkey, UTF-8);
http://incubator.apache.org/drill/
Customer in Hadoop / Hive
Tweets in HBase
Big Game Data - Volker Janz 50
$ Game Server
'REST API
Perl Script
(Kestrel
Hadoop
'REST API
(Kestrel
LB⚡
Storm Cluster
Event File
Lambda Architektur λ
⟳Round Robin
Big Game Data - Volker Janz 51
$ Game Server
'REST API
Perl Script
'REST API
LB ⟳
Event File
(Kestrel
(Kestrel
Hadoop
HBASE
⚡
Storm Cluster
Event Consumer
Lambda Architektur λ
Big Game Data - Volker Janz 52
$ Game Server
'REST API
Perl Script
'REST API
LB
Event File
(Kestrel
(Kestrel
Hadoop
HBASE
⚡
Storm Cluster
Event Consumer
Lambda Architektur λ
⟳
Big Game Data - Volker Janz
⟳
53
$ Game Server
'REST API
Perl Script
'REST API
LB
Event File
(Kestrel
(Kestrel
Hadoop
HBASE
⚡
Storm Cluster
Event ConsumerBatch Layer
Speed Layer Serving
Layer
Datenquelle
Lambda Architektur λ
'Mark Twain
If the only tool you have is a hammer, everything
looks like a nail.
2012
'
2014
Big Game Data - Volker Janz 57
! @prenomenon " 0
VIELEN DANK(
de.linkedin.com/in/vjanz/innogames.com jobs.innogames.com blog.innogames.com
Backup Folien
Big Game Data - Volker Janz 59
🚀Spieler verstehen
und Spiele optimieren 📈
Ad-hoc Analysen und
automatisiere Reports
📱Mobile
Plattformen differenzieren
Drag Your Image Here
Events ⚡
'Datenbereitstellung
für andere Systeme (BI)
⚡Echtzeitanalysen
und Aktionen
Big Game Data - Volker Janz60
Events ⚡
💻Client
" Hadoop
$ GameServer
💻Client
$ GameServer
💻Client
$ GameServer
📈
👤
💻
Client Side Tracking
Game Backend Tracking
Big Game Data - Volker Janz 61
Storm ⚡
Spouts und Bolts werden als individuelle Tasks parallel im Cluster ausgeführt, die Verteilung der Tupel geschieht durch Stream Grouping
Big Game Data - Volker Janz 62
Storm ⚡
public class RedisSpout extends BaseRichSpout {
// ... @Override public void nextTuple() { String message = jedis.rpop(messageQueue);
if(null != message && !message.equals(NIL)) { int pos = message.indexOf(","); String entityId = message.substring(0, pos); String recordData = message.substring(pos+1); collector.emit(new Values(entityId, recordData)); } }
}
Big Game Data - Volker Janz 63
Storm ⚡
public
collector } }
}
Kestrel Spout https://github.com/nathanmarz/storm-kestrel
Big Game Data - Volker Janz 64
Storm ⚡
public static class WordCount extends BaseBasicBolt { Map<String, Integer> counts = new HashMap<String, Integer>();
@Override public void execute(Tuple tuple, BasicOutputCollector collector) { String sentence = tuple.getString(0);
for (String word : sentence.split(" ")) { collector.emit(tuple, new Values(word)); }
collector.ack(tuple); }
}
Big Game Data - Volker Janz 65
Storm ⚡
public
collector }
collector }
}
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
Big Game Data - Volker Janz 66
Storm ⚡
public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout", new RandomSentenceSpout(), 5); builder.setBolt("split", new SplitSentence(), 8).shuffleGrouping("spout"); builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word"));
Config conf = new Config(); conf.setDebug(true);
// ...
LocalCluster cluster = new LocalCluster(); cluster.submitTopology("word-count", conf, builder.createTopology());
Thread.sleep(10000);
cluster.shutdown();}
Big Game Data - Volker Janz 67
Storm ⚡
Worker NodeWorker Prozess
Executor
⚙
Task⚙
Task
⚙
Task⚙
Task
image
Nimbus
ZK
Big Game Data - Volker Janz 68
Storm ⚡
Alternativen?
) http://odysseus.informatik.uni-oldenburg.de/
Big Game Data - Volker Janz 69
Kestrel (
) watch -t -d -n,1 'echo "DUMP_STATS" | nc localhost 22133'
*SET <queue-name> <flags (ignored)> <expiration> <# bytes> echo -e "SET game_events 0 0 16\n0.1.0/prog/build\n" | nc localhost 22133
+GET <queue-name>[options] echo "GET game_events" | nc localhost 22133
'Albert Einstein
Not everything that can be counted counts. Not everything that
counts can be counted.