Event Streams at Groupon Storm, Mesos and Griddle AJ & Erik - - PowerPoint PPT Presentation

event streams at groupon
SMART_READER_LITE
LIVE PREVIEW

Event Streams at Groupon Storm, Mesos and Griddle AJ & Erik - - PowerPoint PPT Presentation

Event Streams at Groupon Storm, Mesos and Griddle AJ & Erik Weathers (with special guest Brian McCallister) Storm Bolt A Bolt B Spout P Bolt X @Override public void execute(final Tuple tuple) { Span span = (Span)


slide-1
SLIDE 1

Event Streams at Groupon

Storm, Mesos and Griddle

AJ & Erik Weathers (with special guest Brian McCallister)

slide-2
SLIDE 2

Storm

slide-3
SLIDE 3

Spout P Bolt A Bolt X Bolt B

slide-4
SLIDE 4

@Override public void execute(final Tuple tuple) { Span span = (Span) tuple.getValueByField("span"); Trace trace = cache.getUnchecked(span.trace_id); trace.addSpan(span); collector.emit(new Values(trace.getId(), trace)); }

slide-5
SLIDE 5

Spout P Bolt A Bolt X Bolt B

slide-6
SLIDE 6

Supervisor Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task Server Nimbus Supervisor Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task Supervisor Server Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task

slide-7
SLIDE 7

Spout P Bolt A Bolt X Bolt B

slide-8
SLIDE 8

Supervisor Server Worker Executor Spout P Executor Bolt A Executor Bolt A Executor Bolt X Executor Spout P Executor Bolt X Supervisor Server Worker Executor Bolt X Executor Bolt B Executor Bolt B Executor Bolt X Executor Spout P Executor Bolt A Spout P Spout P Spout P Bolt A Bolt A Bolt A Bolt X Bolt X Bolt X Bolt X Bolt B Bolt B

slide-9
SLIDE 9

Storm on Mesos

slide-10
SLIDE 10

Mesos

slide-11
SLIDE 11

Supervisor Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task Server Nimbus Supervisor Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task Supervisor Server Worker Executor Task Executor Task Executor Task Executor Task Worker Executor Task Executor Task Executor Task Executor Task

slide-12
SLIDE 12

Worker Host Supervisor = Mesos Executor Worker = Mesos Task Storm Executor

Terminology Clarity

Storm Task

slide-13
SLIDE 13

Storm Mesos Framework

  • Bridges Storm & Mesos
  • Implements interfaces from each
  • Storm’s INimbus
  • Mesos’s Executor and Scheduler
  • Storm nimbus & supervisor daemons

run within the Framework processes

slide-14
SLIDE 14

Resource Model: Storm

  • Worker Slots
  • {host, port}
  • CPU, Mem ??
  • static set of Slots in

native Storm

slide-15
SLIDE 15

Resource Model: Mesos

  • Schedulers receive Offers
  • f CPU, Mem, etc.
  • Executors
  • Launch Tasks
slide-16
SLIDE 16

Worker Host Supervisor Worker Topo A Worker Topo B Worker Topo C Worker Host Supervisor Worker Topo A Worker Topo C Supervisor Supervisor Worker Topo B Worker Topo C Worker Topo C

Native Storm Storm on Mesos

More Supervisors

slide-17
SLIDE 17

nimbus core

Mesos Nimbus Class

Mesos

getAvailableSlots

resourceOffers

O O O O O O

mesos Scheduler

storm INimbus

S2 S1 S2 = TpWp S1 = TnWn

assignSlots

launchTasks

MesosNimbus process

Calculates Assignments

MesosNimbus

slide-18
SLIDE 18

Groupon Storm-as-a-Service

  • Mesos cluster dedicated to Storm
  • Submitter application for gatekeeping
  • Rsync Nimbus local state
  • Logging library for sending to Splunk & Kafka
  • Metrics library for sending to Monitoring
  • implements Storm’s IMetricsConsumer interface
slide-19
SLIDE 19

Pros vs. Native Storm

  • isolation for multi-tenancy
  • Storm's isolation scheduler is static
  • flexibility for number & size of worker processes
  • avoid a bunch of separate under-utilized clusters
  • team acts as centralized resource for Storm usage

and debugging

  • consistent operational visibility
slide-20
SLIDE 20
slide-21
SLIDE 21

Griddle

slide-22
SLIDE 22
  • DSP-like workflow
  • Adjacency Graph

Syntax

  • Mechanical Sympathy
slide-23
SLIDE 23

Website OOB Postcode Phone Number Geocode Country Code

slide-24
SLIDE 24

Website OOB Postcode Phone Number Country Code

Conditional

Post Condition

Conditional End

Geocode

slide-25
SLIDE 25

Active Edge Chooser

Website OOB Postcode Country Code

Conditional

Post Condition

Geocode

Conditional End

Phone Number

slide-26
SLIDE 26

class_alias TRIGGER com.groupon.griddle.lib.Trigger # other aliases elided # Let's get started vertex start of COUNTRY_CODE_INFERRER # Vertices active only for certain countries vertex begin_country_dependent of TRIGGER vertex geocoder of GEOCODER vertex website of WEBSITE_NORMALIZER vertex postcode of POSTCODE_NORMALIZER vertex end_country_dependent of TRIGGER aggregates_inputs # Signal end of conditional processing vertex country_dependence_done of TRIGGER # Active for all countries vertex oo_business of OUT_OF_BUSINESS # Depends on country which can be mutated by geocoder vertex phone_number of PHONE_NUM_NORMALIZER aggregates_inputs # If country deactivated, start will emit to {oo_business, country_dependence_done} # else will emit to {begin_country_dependent, oo_business} emit_to {oo_business, begin_country_dependent, country_dependence_done} 
 from start with_chooser ACTIVE_EDGE_CHOOSER # Country dependent adjacencies emit_to {postcode, website} from begin_country_dependent emit_to {geocoder} from postcode emit_to {end_country_dependent} from geocoder emit_to {end_country_dependent} from website emit_to {country_dependence_done} from end_country_dependent # phone number normalizer due to aggregates_inputs will act as post # deactive branch joining vertex emit_to {phone_number} from oo_business emit_to {phone_number} from country_dependence_done

slide-27
SLIDE 27

# Let's get started vertex start of COUNTRY_CODE_INFERRER # Vertices active only for certain countries vertex begin_country_dependent of TRIGGER vertex geocoder of GEOCODER vertex website of WEBSITE_NORMALIZER vertex postcode of POSTCODE_NORMALIZER

slide-28
SLIDE 28

# Let's get started vertex start of COUNTRY_CODE_INFERRER # Vertices active only for certain countries vertex begin_country_dependent of TRIGGER vertex geocoder of GEOCODER vertex website of WEBSITE_NORMALIZER vertex postcode of POSTCODE_NORMALIZER

slide-29
SLIDE 29

# Country dependent adjacencies emit_to {postcode, website} from begin_country_dependent emit_to {geocoder} from postcode emit_to {end_country_dependent} from geocoder emit_to {end_country_dependent} from website emit_to {country_dependence_done} from end_country_dependent

slide-30
SLIDE 30

emit_to {geocoder} from postcode

slide-31
SLIDE 31

emit_to {oo_business, begin_country_dependent, country_dependence_done} from start with_chooser ACTIVE_EDGE_CHOOSER

slide-32
SLIDE 32

emit_to {oo_business, begin_country_dependent, country_dependence_done} from start with_chooser ACTIVE_EDGE_CHOOSER

slide-33
SLIDE 33

Active Edge Chooser

Website OOB Postcode Country Code

Conditional

Post Condition

Geocode

Conditional End

Phone Number

slide-34
SLIDE 34

What does the DSL give you

  • Griddle compiler creates a binary graph
  • Binary graph processed with runtime that provides
  • ptimal concurrency
slide-35
SLIDE 35
slide-36
SLIDE 36

The End

slide-37
SLIDE 37

Future Work: Storm

  • make parallelism configurable at runtime
  • debuggability (stderr/out logging, history)
  • metrics scalability
  • replacement IScheduler to avoid big topologies

starving small topologies