Event Tracking ist ein bekanntes Problem aus dem Big Data Bereich. Die Präsentation zeigt unsere Lösung bei InnoGames und geht dabei auf Technologien wie Apache Storm und Kestrel näher ein. Zudem wird die Lambda Architektur vorgestellt und mit Beispieltechnologien verständlich und praktisch erklärt.
5. 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
6. " Was ist Big Data?
Big Game Data - Volker Keynote Janz Template
6
7. Was ist Big Data? "
Big Game Data - Volker Janz 7
8. Was ist Big Data? "
Volume
Big Game Data - Volker Janz 8
9. Was ist Big Data? "
Variety
Big Game Data - Volker Janz 9
10. Was ist Big Data? "
Velocity
Big Game Data - Volker Janz 10
11. Was ist Big Data? "
Big Game Data - Volker Janz 11
12. ⚡ Events
Big Game Data - Volker Keynote Janz Template
12
13. Events ⚡
Big Game Data - Volker Janz 13
!
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.
14. Events ⚡
Big Game Data - Volker Janz 14
!
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.
15. Events ⚡
Identifikatoren Metadaten Parameter
version/category/type/game/sprint/market/player/date/user_agent/param1/…/paramN
0.1.0/prog/build/foe/2.0.1/de/4711/2014-10-01T13:37.000Z/ua/kaserne/10/20/15
Big Game Data - Volker Janz 15
17. Events ⚡
prog/build
soci/message
set/change
prog/fight
soci/invite
Big Game Data - Volker Janz 17
18. Events ⚡
250M
Events / Tag
90G
Daten / Tag
2700G
Daten / Monat
Big Game Data - Volker Janz 18
19. Events ⚡
Big Game Data - Volker Janz 19
"
Game
Server
#
Hadoop
"
Game
Server
"
Game
Server
"
Game
Server
"
Game
Server
"
Game
Server
"
Game
Server
"
Game
Server
"
Game
Server
20. Events ⚡
Big Game Data - Volker Janz 20
Spieler verstehen
und Spiele
optimieren
Ad-hoc Analysen
und
automatisiere
Reports
Mobile
Plattformen
differenzieren
Drag Your Image Here
'
Datenbereitstellung
für andere
Systeme (BI)
⚡
Echtzeitanalysen
und Aktionen
21. % Event Tracking
Big Game Data - Volker Keynote Janz Template
21
22. Event Tracking %
Aller Anfang
ist schwer
Big Game Data - Volker Janz 22
23. Event Tracking %
Konsumieren und Schreiben
der Events an die Korrekte
Stelle im HDFS (Partitionierung)
Big Game Data - Volker Janz 23
"
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
Verteilte Speicherung
(HDFS) und Verarbeitung
(MapReduce, Spark)
24. Event Tracking %
'
Gateway
*
Queue
Twitter Kestrel
Big Game Data - Volker Janz 24
Client
+
Consumer
Apache Storm
Perl Script
REST API mit Dropwizard
25. Event Tracking %
Big Game Data - Volker Janz 25
"
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
28. Kestrel *
Persistent
Hält Messages im Speicher für Speed
Schreibt in Journal Dateien für Persistenz
Big Game Data - Volker Janz 28
29. Kestrel *
Zuverlässig
Clients können Messages „vorläufig“ lesen
Bei Abbruch wird Message „zurückgelegt“
Big Game Data - Volker Janz 29
30. Kestrel *
Flexibel
memcache Protokoll
Einfaches text Protokoll
Apache Thrift
Big Game Data - Volker Janz 30
31. Kestrel *
Big Game Data - Volker Janz 31
*
geordnet
*
geordnet
*
locker geordnet
32. Kestrel *
Client 1
Client 2
Big Game Data - Volker Janz 32
*events_queue
*
events_queue+fanout
33. 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 33
}
}
37. Storm ⚡
Apache™ Storm is a distributed real-time
computation system for processing fast, large
streams of data.
Big Game Data - Volker Janz 37
38. Storm ⚡
❌
✓
Big Game Data - Volker Janz 38
⏩
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“ oder „exactly
once“ Verarbeitung
von Nachrichten
39. Storm ⚡
Storm verarbeitet Datenströme aus Tupeln
Big Game Data - Volker Janz 39
Tupel
Tupel
Tupel
Tupel
Datenstrom
Ein Tupel ist eine Liste von Werten
40. Storm ⚡
Big Game Data - Volker Janz 40
Spout
Quelle von Datenströmen
41. Storm ⚡
Bolt
Verarbeitung von Tupeln
Big Game Data - Volker Janz 41
42. Storm ⚡
In Datenbank schreiben
Big Game Data - Volker Janz 42
43. Storm ⚡
Aus Datenbank lesen
Big Game Data - Volker Janz 43
44. Storm ⚡
Optional weitere Tupel /
Datenströme erzeugen
Big Game Data - Volker Janz 44
45. Storm ⚡
Eine Topologie ist ein gerichteter
azyklischer Graph und eine
Komposition aus Spouts und Bolts
Big Game Data - Volker Janz 45
46. 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 46
47. Storm ⚡
Executor
Worker Prozess
Worker Node
⚙
Task
⚙
Task
⚙
Task
⚙
Task
Big Game Data - Volker Janz 47
image
Nimbus
ZK
48. 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 48
}
}
}
49. Storm ⚡
Kestrel Spout https://github.com/nathanmarz/storm-kestrel
Big Game Data - Volker Janz 49
public
collector
}
}
}
50. 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));
Big Game Data - Volker Janz 50
}
collector.ack(tuple);
}
}
51. Storm ⚡
Big Game Data - Volker Janz 51
public
collector
}
collector
}
}
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
52. 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 52
}
58. Lambda Architektur λ
Messaging
System Query
Big Game Data - Volker Janz 58
DB / DFS
Batch
Processing
System
Stream Processing System
DB Batch
Views
DB Real-
Time Views
Application
60. Hadoop 2 / YARN
HDFS MapReduce
/ Spark
Big Game Data - Volker Janz
Lambda Architektur
60
λ
Apache
HDFS
Kafka / Kestrel Query
Storm-YARN HOYA
61. Lambda Architektur λ
Big Game Data - Volker Janz 61
"
Game Server
'
REST API
Perl
Script
*
Kestrel
Hadoop
'
REST API
*
Kestrel
LB
⚡
Storm
Cluster
⟳
Round
Robin
Event
File
62. Lambda Architektur λ
LB ⟳
*
Kestrel
Big Game Data - Volker Janz 62
"
Game Server
'
REST API
Perl
Script
'
REST API
Event
File
*
Kestrel
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer
63. Lambda Architektur λ
LB ⟳
*
Kestrel
Big Game Data - Volker Janz 63
"
Game Server
'
REST API
Perl
Script
'
REST API
Event
File
*
Kestrel
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer
64. Lambda Architektur λ
LB ⟳
*
Kestrel
Speed
Layer Serving
Layer
Big Game Data - Volker Janz 64
"
Game Server
'
REST API
Perl
Script
'
REST API
Event
File
*
Kestrel
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer Batch Layer
Datenquelle
65. *
Mark Twain
If the only tool you have
is a hammer, everything
looks like a nail.
68. *
Albert Einstein
Not everything that can
be counted counts.
Not everything that
counts can be counted.
69. + VIELEN DANK
!@prenomenon " de.linkedin.com/in/vjanz/
3
innogames.com
jobs.innogames.com
blog.innogames.com
Big Game Data - Volker Janz 69
70. + VIELEN DANK
JOIN US ,
!@prenomenon " de.linkedin.com/in/vjanz/
3
innogames.com
jobs.innogames.com
blog.innogames.com
Big Game Data - Volker Janz 70