Big Game Data 
Big Game Data - Volker Janz 
1 
Event Tracking @ InnoGames
Big Game Data - Volker Janz 2
Big Game Data - Volker Janz 3 
Volker Janz 
 Lead Software Developer 
! @prenomenon
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...
" Was ist Big Data? 
Big Game Data - Volker Keynote Janz Template 
6
Was ist Big Data? " 
Big Game Data - Volker Janz 7
Was ist Big Data? " 
Volume 
Variety 
Velocity 
Big Game Data - Volker Janz 8
⚡ Events 
Big Game Data - Volker Keynote Janz Template 
9
Events ⚡ 
Big Game Data - Volker Janz 10 
! 
Ein Event ist ein Indikator für ein beobachtbares Geschehen 
bzw. eine Zustan...
Events ⚡ 
Big Game Data - Volker Janz 11 
! 
Ein Event ist ein Indikator für ein beobachtbares Geschehen 
bzw. eine Zustan...
Events ⚡ 
Identifikatoren Metadaten Parameter 
version/category/type/game/sprint/market/player/date/user_agent/param1/…/pa...
Events ⚡ 
Big Game Data - Volker Janz 13
Events ⚡ 
prog/build 
soci/message 
set/change 
prog/fight 
soci/invite 
Big Game Data - Volker Janz 14
Events ⚡ 
280M 
Events / Tag 
100G 
Daten / Tag 
3000G 
Daten / Monat 
Big Game Data - Volker Janz 15
Events ⚡ 
Big Game Data - Volker Janz 
16 
"  
Hadoop 
$ 
Game 
Server 
Drag Your Image Here 
$ 
Game 
Server 
$ 
Game 
S...
% Event Tracking 
Big Game Data - Volker Keynote Janz Template 
17
Event Tracking % 
Aller Anfang 
ist schwer 
Big Game Data - Volker Janz 18
Event Tracking % 
Konsumieren und Schreiben 
der Events an die Korrekte 
Stelle im HDFS (Partitionierung) 
Big Game Data -...
Event Tracking % 
' 
Gateway 
( 
Queue 
Twitter Kestrel 
Big Game Data - Volker Janz 20 
 
Client 
) 
Consumer 
Apache St...
Event Tracking % 
Big Game Data - Volker Janz 21 
$ 
Game Server 
' 
REST API 
Perl 
Script 
( 
Kestrel 
 
Hadoop 
' 
RES...
( Kestrel 
https://github.com/twitter/kestrel 
Big Game Data - Volker Keynote Janz Template 
22
Kestrel ( 
Einfache, verteile 
Message queue 
Big Game Data - Volker Janz 23
Kestrel ( 
Persistent 
Hält Messages im Speicher für Speed 
Schreibt in Journal Dateien für Persistenz 
Big Game Data - Vo...
Kestrel ( 
Zuverlässig 
Clients können Messages „vorläufig“ lesen 
Bei Abbruch wird Message „zurückgelegt“ 
Big Game Data ...
Kestrel ( 
Flexibel 
memcache Protokoll 
Einfaches text Protokoll 
Apache Thrift 
Big Game Data - Volker Janz 26
Kestrel ( 
 
Big Game Data - Volker Janz 27 
( 
geordnet 
( 
geordnet 
( 
locker geordnet
Kestrel ( 
 
Client 1 
Client 2 
Big Game Data - Volker Janz 28 
(events_queue 
( 
events_queue+fanout 

Kestrel ( 
new KestrelConfig { 
queues = new QueueBuilder() { 
name = "q" 
maxItems = 500 
} :: new QueueBuilder() { 
name...
Kestrel ( 
Big Game Data - Volker Janz 30
⚡ Storm 
https://github.com/apache/storm 
Big Game Data - Volker Keynote Janz Template 
31
Storm ⚡ 
Apache™ Storm is a distributed real-time 
computation system for processing fast, large 
streams of data. 
Big Ga...
Storm ⚡ 
❌ 
✓ 
Big Game Data - Volker Janz 33 
⏩ 
Schnell 
1.000.000 100 Byte 
Nachrichten pro 
Sekunde pro Node 
, 
Skali...
Storm ⚡ 
Storm verarbeitet Datenströme aus Tupeln 
Big Game Data - Volker Janz 34 
Tupel 
Tupel 
Tupel 
Tupel 
Datenstrom ...
Storm ⚡ 
Big Game Data - Volker Janz 35 
Spout 
Kestrel Spout hQtutpesl:l/e/ gvitohnu bD.caotemn/sntartöhmanemnarz/storm-k...
Storm ⚡ 
Bolt 
Verarbeitung von Tupeln 
Big Game Data - Volker Janz 36
Storm ⚡ 
 
In Datenbank schreiben 
Big Game Data - Volker Janz 37
Storm ⚡ 
 
Aus Datenbank lesen 
Big Game Data - Volker Janz 38
Storm ⚡ 
Optional weitere Tupel / 
Datenströme erzeugen 
HDFS Bolt https://github.com/ptgoetz/storm-hdfs 
Big Game Data - ...
Storm ⚡ 
Eine Topologie ist ein gerichteter 
azyklischer Graph und eine 
Komposition aus Spouts und Bolts 
Big Game Data -...
λ Lambda Architektur 
Big Game Data - Volker Keynote Janz Template 
41
Lambda Architektur λ 
Abstrakte Architektur für die 
Realisierung von skalierbaren 
Echtzeitsystemen 
Big Game Data - Volk...
Lambda Architektur λ 
@nathanmarz 
http://manning.com/marz/ 
! 
 
Big Game Data - Volker Janz 43
Lambda Architektur λ 
Big Game Data - Volker Janz 44 
" 
Datenquellen 
Batch Layer 
Speed Layer 
Serving Layer Query
Lambda Architektur λ 
Big Game Data - Volker Janz 45 
" 
Datenquellen 
Query 
Batch Layer 
Speed Layer 
Serving Layer 
Mas...
Lambda Architektur λ 
Messaging 
System Query 
Big Game Data - Volker Janz 46 
DB / DFS 
Batch 
Processing 
System 
Stream...
Hadoop 2 / YARN 
HDFS MapReduce 
/ Spark 
Big Game Data - Volker Janz 
Lambda Architektur 
47 
λ 
Kestrel Query 
Storm-YAR...
Hadoop 2 / YARN 
Big Game Data - Volker Janz 
Lambda Architektur 
48 
λ 
Query 
HDFS MapReduce 
/ Spark 
HDFS 
Storm-YARN ...
Customer in 
Hadoop / Hive 
Big Game Data - Volker Janz 
Lambda Architektur 
49 
λ 
Tweets in HBase 
select c.name, hb.twe...
Lambda Architektur λ 
Big Game Data - Volker Janz 50 
$ 
Game Server 
' 
REST API 
Perl 
Script 
( 
Kestrel 
 
Hadoop 
' ...
Lambda Architektur λ 
LB ⟳ 
( 
Kestrel 
Big Game Data - Volker Janz 51 
$ 
Game Server 
' 
REST API 
Perl 
Script 
' 
REST...
Lambda Architektur λ 
( 
Kestrel 
Big Game Data - Volker Janz 52 
$ 
Game Server 
' 
REST API 
Perl 
Script 
' 
REST API 
...
Lambda Architektur λ 
⟳ 
( 
Kestrel 
Big Game Data - Volker Janz 
53 
$ 
Game Server 
' 
REST API 
Perl 
Script 
' 
REST A...
' 
Mark Twain 
If the only tool you have 
is a hammer, everything 
looks like a nail.
2012
' 
2014
( VIELEN DANK 
!@prenomenon " de.linkedin.com/in/vjanz/ 
0 
innogames.com 
jobs.innogames.com 
blog.innogames.com 
Big Gam...
Backup Folien
Events ⚡ 
Big Game Data - Volker Janz 59 
 
Spieler verstehen 
und Spiele 
optimieren  
Ad-hoc Analysen 
und 
automatisi...
Events ⚡ 
Big Game Data - Volker Janz 
60 
 
Client 
"  
Hadoop 
$ 
Game 
Server 
 
Client 
$ 
Game 
Server 
 
Client ...
Storm ⚡ 
Spouts und Bolts werden als 
individuelle Tasks parallel im Cluster 
ausgeführt, die Verteilung der Tupel 
geschi...
Storm ⚡ 
public class RedisSpout extends BaseRichSpout { 
// ... 
@Override 
public void nextTuple() { 
String message = j...
Storm ⚡ 
Kestrel Spout https://github.com/nathanmarz/storm-kestrel 
Big Game Data - Volker Janz 63 
public 
collector 
} 
...
Storm ⚡ 
public static class WordCount extends BaseBasicBolt { 
Map<String, Integer> counts = new HashMap<String, Integer>...
Storm ⚡ 
Big Game Data - Volker Janz 65 
public 
collector 
} 
collector 
} 
} 
HDFS Bolt https://github.com/ptgoetz/storm...
Storm ⚡ 
public static void main(String[] args) throws Exception { 
TopologyBuilder builder = new TopologyBuilder(); 
buil...
Storm ⚡ 
Executor 
Worker Prozess 
Worker Node 
⚙ 
Task 
⚙ 
Task 
⚙ 
Task 
⚙ 
Task 
Big Game Data - Volker Janz 67 
image ...
Storm ⚡ 
Alternativen? 
) http://odysseus.informatik.uni-oldenburg.de/ 
Big Game Data - Volker Janz 68
Kestrel ( 
SET <queue-name> <flags (ignored)> <expiration> <# bytes> * 
echo -e "SET game_events 0 0 16n0.1.0/prog/buildn"...
' 
Albert Einstein 
Not everything that can 
be counted counts. 
Not everything that 
counts can be counted.
Nächste SlideShare
Wird geladen in …5
×

Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

11.415 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Daten & Analysen
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
11.415
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
134
Aktionen
Geteilt
0
Downloads
21
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Big Game Data - Event Tracking mit Storm, Kestrel und der Lambda Architektur - data2day 2014

  1. 1. Big Game Data Big Game Data - Volker Janz 1 Event Tracking @ InnoGames
  2. 2. Big Game Data - Volker Janz 2
  3. 3. Big Game Data - Volker Janz 3 Volker Janz  Lead Software Developer ! @prenomenon
  4. 4. Big Game Data - Volker Janz 4
  5. 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. 6. " Was ist Big Data? Big Game Data - Volker Keynote Janz Template 6
  7. 7. Was ist Big Data? " Big Game Data - Volker Janz 7
  8. 8. Was ist Big Data? " Volume Variety Velocity Big Game Data - Volker Janz 8
  9. 9. ⚡ Events Big Game Data - Volker Keynote Janz Template 9
  10. 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. 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. 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
  13. 13. Events ⚡ Big Game Data - Volker Janz 13
  14. 14. Events ⚡ prog/build soci/message set/change prog/fight soci/invite Big Game Data - Volker Janz 14
  15. 15. Events ⚡ 280M Events / Tag 100G Daten / Tag 3000G Daten / Monat Big Game Data - Volker Janz 15
  16. 16. Events ⚡ Big Game Data - Volker Janz 16 "  Hadoop $ Game Server Drag Your Image Here $ Game Server $ Game Server    Game Backend Tracking
  17. 17. % Event Tracking Big Game Data - Volker Keynote Janz Template 17
  18. 18. Event Tracking % Aller Anfang ist schwer Big Game Data - Volker Janz 18
  19. 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. 20. Event Tracking % ' Gateway ( Queue Twitter Kestrel Big Game Data - Volker Janz 20  Client ) Consumer Apache Storm Perl Script REST API mit Dropwizard
  21. 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
  22. 22. ( Kestrel https://github.com/twitter/kestrel Big Game Data - Volker Keynote Janz Template 22
  23. 23. Kestrel ( Einfache, verteile Message queue Big Game Data - Volker Janz 23
  24. 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. 25. Kestrel ( Zuverlässig Clients können Messages „vorläufig“ lesen Bei Abbruch wird Message „zurückgelegt“ Big Game Data - Volker Janz 25
  26. 26. Kestrel ( Flexibel memcache Protokoll Einfaches text Protokoll Apache Thrift Big Game Data - Volker Janz 26
  27. 27. Kestrel (  Big Game Data - Volker Janz 27 ( geordnet ( geordnet ( locker geordnet
  28. 28. Kestrel (  Client 1 Client 2 Big Game Data - Volker Janz 28 (events_queue ( events_queue+fanout 
  29. 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 } }
  30. 30. Kestrel ( Big Game Data - Volker Janz 30
  31. 31. ⚡ Storm https://github.com/apache/storm Big Game Data - Volker Keynote Janz Template 31
  32. 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. 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. 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. 35. Storm ⚡ Big Game Data - Volker Janz 35 Spout Kestrel Spout hQtutpesl:l/e/ gvitohnu bD.caotemn/sntartöhmanemnarz/storm-kestrel
  36. 36. Storm ⚡ Bolt Verarbeitung von Tupeln Big Game Data - Volker Janz 36
  37. 37. Storm ⚡  In Datenbank schreiben Big Game Data - Volker Janz 37
  38. 38. Storm ⚡  Aus Datenbank lesen Big Game Data - Volker Janz 38
  39. 39. Storm ⚡ Optional weitere Tupel / Datenströme erzeugen HDFS Bolt https://github.com/ptgoetz/storm-hdfs Big Game Data - Volker Janz 39
  40. 40. Storm ⚡ Eine Topologie ist ein gerichteter azyklischer Graph und eine Komposition aus Spouts und Bolts Big Game Data - Volker Janz 40
  41. 41. λ Lambda Architektur Big Game Data - Volker Keynote Janz Template 41
  42. 42. Lambda Architektur λ Abstrakte Architektur für die Realisierung von skalierbaren Echtzeitsystemen Big Game Data - Volker Janz 42
  43. 43. Lambda Architektur λ @nathanmarz http://manning.com/marz/ !  Big Game Data - Volker Janz 43
  44. 44. Lambda Architektur λ Big Game Data - Volker Janz 44 " Datenquellen Batch Layer Speed Layer Serving Layer Query
  45. 45. Lambda Architektur λ Big Game Data - Volker Janz 45 " Datenquellen Query Batch Layer Speed Layer Serving Layer Master Datensatz Batch Views ⟳ Datenstrom Real-Time Views ⚡ Merged View &
  46. 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. 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. 48. Hadoop 2 / YARN Big Game Data - Volker Janz Lambda Architektur 48 λ Query HDFS MapReduce / Spark HDFS Storm-YARN HOYA Apache Mesos
  49. 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. 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. 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. 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. 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. 54. ' Mark Twain If the only tool you have is a hammer, everything looks like a nail.
  55. 55. 2012
  56. 56. ' 2014
  57. 57. ( VIELEN DANK !@prenomenon " de.linkedin.com/in/vjanz/ 0 innogames.com jobs.innogames.com blog.innogames.com Big Game Data - Volker Janz 57
  58. 58. Backup Folien
  59. 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. 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. 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. 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. 63. Storm ⚡ Kestrel Spout https://github.com/nathanmarz/storm-kestrel Big Game Data - Volker Janz 63 public collector } } }
  64. 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. 65. Storm ⚡ Big Game Data - Volker Janz 65 public collector } collector } } HDFS Bolt https://github.com/ptgoetz/storm-hdfs
  66. 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. 67. Storm ⚡ Executor Worker Prozess Worker Node ⚙ Task ⚙ Task ⚙ Task ⚙ Task Big Game Data - Volker Janz 67 image Nimbus ZK
  68. 68. Storm ⚡ Alternativen? ) http://odysseus.informatik.uni-oldenburg.de/ Big Game Data - Volker Janz 68
  69. 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. 70. ' Albert Einstein Not everything that can be counted counts. Not everything that counts can be counted.

×