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 (z. B. HOYA, Storm-YARN und Apache Drill) 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
Variety
Velocity
Big Game Data - Volker Janz 8
9. ⚡ Events
Big Game Data - Volker Keynote Janz Template
9
10. Events ⚡
Big Game Data - Volker Janz 10
!
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.
11. Events ⚡
Big Game Data - Volker Janz 11
!
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.
12. 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 12
14. Events ⚡
prog/build
soci/message
set/change
prog/fight
soci/invite
Big Game Data - Volker Janz 14
15. Events ⚡
280M
Events / Tag
100G
Daten / Tag
3000G
Daten / Monat
Big Game Data - Volker Janz 15
16. Events ⚡
Big Game Data - Volker Janz
16
"
Hadoop
$
Game
Server
Drag Your Image Here
$
Game
Server
$
Game
Server
Game Backend Tracking
17. % Event Tracking
Big Game Data - Volker Keynote Janz Template
17
18. Event Tracking %
Aller Anfang
ist schwer
Big Game Data - Volker Janz 18
19. Event Tracking %
Konsumieren und Schreiben
der Events an die Korrekte
Stelle im HDFS (Partitionierung)
Big Game Data - Volker Janz 19
$
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)
20. Event Tracking %
'
Gateway
(
Queue
Twitter Kestrel
Big Game Data - Volker Janz 20
Client
)
Consumer
Apache Storm
Perl Script
REST API mit Dropwizard
21. Event Tracking %
Big Game Data - Volker Janz 21
$
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
24. Kestrel (
Persistent
Hält Messages im Speicher für Speed
Schreibt in Journal Dateien für Persistenz
Big Game Data - Volker Janz 24
25. Kestrel (
Zuverlässig
Clients können Messages „vorläufig“ lesen
Bei Abbruch wird Message „zurückgelegt“
Big Game Data - Volker Janz 25
26. Kestrel (
Flexibel
memcache Protokoll
Einfaches text Protokoll
Apache Thrift
Big Game Data - Volker Janz 26
27. Kestrel (
Big Game Data - Volker Janz 27
(
geordnet
(
geordnet
(
locker geordnet
28. Kestrel (
Client 1
Client 2
Big Game Data - Volker Janz 28
(events_queue
(
events_queue+fanout
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 29
}
}
32. Storm ⚡
Apache™ Storm is a distributed real-time
computation system for processing fast, large
streams of data.
Big Game Data - Volker Janz 32
33. Storm ⚡
❌
✓
Big Game Data - Volker Janz 33
⏩
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
34. Storm ⚡
Storm verarbeitet Datenströme aus Tupeln
Big Game Data - Volker Janz 34
Tupel
Tupel
Tupel
Tupel
Datenstrom
Ein Tupel ist eine Liste von Werten
35. Storm ⚡
Big Game Data - Volker Janz 35
Spout
Kestrel Spout hQtutpesl:l/e/ gvitohnu bD.caotemn/sntartöhmanemnarz/storm-kestrel
36. Storm ⚡
Bolt
Verarbeitung von Tupeln
Big Game Data - Volker Janz 36
37. Storm ⚡
In Datenbank schreiben
Big Game Data - Volker Janz 37
38. Storm ⚡
Aus Datenbank lesen
Big Game Data - Volker Janz 38
39. Storm ⚡
Optional weitere Tupel /
Datenströme erzeugen
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
Big Game Data - Volker Janz 39
40. Storm ⚡
Eine Topologie ist ein gerichteter
azyklischer Graph und eine
Komposition aus Spouts und Bolts
Big Game Data - Volker Janz 40
46. Lambda Architektur λ
Messaging
System Query
Big Game Data - Volker Janz 46
DB / DFS
Batch
Processing
System
Stream Processing System
DB Batch
Views
DB Real-
Time Views
Application
47. Hadoop 2 / YARN
HDFS MapReduce
/ Spark
Big Game Data - Volker Janz
Lambda Architektur
47
λ
Kestrel Query
Storm-YARN
HOYA
Hue /
Apache Twill
/ Apache
Slider
48. Hadoop 2 / YARN
Big Game Data - Volker Janz
Lambda Architektur
48
λ
Query
HDFS MapReduce
/ Spark
HDFS
Storm-YARN HOYA
Apache Mesos
49. Customer in
Hadoop / Hive
Big Game Data - Volker Janz
Lambda Architektur
49
λ
Tweets in HBase
select c.name, hb.tweets.count
from hive.ods.`customers` c
join hbase.user.`socialdata` hb
on c.customerId = convert_from(hb.rowkey, UTF-8);
http://incubator.apache.org/drill/
50. Lambda Architektur λ
Big Game Data - Volker Janz 50
$
Game Server
'
REST API
Perl
Script
(
Kestrel
Hadoop
'
REST API
(
Kestrel
LB
⚡
Storm
Cluster
Event
File
⟳
Round
Robin
51. Lambda Architektur λ
LB ⟳
(
Kestrel
Big Game Data - Volker Janz 51
$
Game Server
'
REST API
Perl
Script
'
REST API
Event
File
(
Kestrel
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer
52. Lambda Architektur λ
(
Kestrel
Big Game Data - Volker Janz 52
$
Game Server
'
REST API
Perl
Script
'
REST API
LB
Event
File
(
Kestrel
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer
⟳
53. Lambda Architektur λ
⟳
(
Kestrel
Big Game Data - Volker Janz
53
$
Game Server
'
REST API
Perl
Script
'
REST API
LB
Event
File
(
Kestrel
Speed
Layer Serving
Layer
Hadoop
HBASE
⚡
Storm
Cluster
Event
Consumer Batch Layer
Datenquelle
54. '
Mark Twain
If the only tool you have
is a hammer, everything
looks like a nail.
59. Events ⚡
Big Game Data - Volker Janz 59
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
60. Events ⚡
Big Game Data - Volker Janz
60
Client
"
Hadoop
$
Game
Server
Client
$
Game
Server
Client
$
Game
Server
Client Side Tracking
Game Backend Tracking
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 61
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 62
}
}
}
63. Storm ⚡
Kestrel Spout https://github.com/nathanmarz/storm-kestrel
Big Game Data - Volker Janz 63
public
collector
}
}
}
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));
Big Game Data - Volker Janz 64
}
collector.ack(tuple);
}
}
65. Storm ⚡
Big Game Data - Volker Janz 65
public
collector
}
collector
}
}
HDFS Bolt https://github.com/ptgoetz/storm-hdfs
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 66
}
67. Storm ⚡
Executor
Worker Prozess
Worker Node
⚙
Task
⚙
Task
⚙
Task
⚙
Task
Big Game Data - Volker Janz 67
image
Nimbus
ZK
68. Storm ⚡
Alternativen?
) http://odysseus.informatik.uni-oldenburg.de/
Big Game Data - Volker Janz 68
69. Kestrel (
SET <queue-name> <flags (ignored)> <expiration> <# bytes> *
echo -e "SET game_events 0 0 16n0.1.0/prog/buildn" | nc localhost 22133
) watch -t -d -n,1 'echo "DUMP_STATS" | nc localhost 22133'
GET <queue-name>[options] +
echo "GET game_events" | nc localhost 22133
Big Game Data - Volker Janz 69
70. '
Albert Einstein
Not everything that can
be counted counts.
Not everything that
counts can be counted.