SlideShare a Scribd company logo
 
	
  
GearPump	
  –	
  Real-­‐time	
  Streaming	
  Engine	
  
Using	
  Akka*	
  	
  
	
  
Sean	
  Zhong,	
  Kam	
  Kasravi,	
  Huafeng	
  Wang,	
  Manu	
  Zhang,	
  Weihua	
  Jiang	
  
{xiang.zhong,	
  kam.d.kasravi,	
  huafeng.wang,	
  tianlun.zhang,	
  weihua.jiang}@intel.com	
  
Intel	
  Big	
  Data	
  Technology	
  Team	
  
Dec.	
  2014	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
 
	
  
	
  
	
  
About	
  GearPump…………………………………………………………………………………………………………………….3	
  
Motive	
  .........................................................................................................................................................................................	
  3	
  
Example	
  .....................................................................................................................................................................................	
  4	
  
Overview	
  ...................................................................................................................................................................................	
  5	
  
Implementation	
  .....................................................................................................................................................................	
  7	
  
DAG	
  API	
  ................................................................................................................................................................................	
  7	
  
Application	
  Submission	
  .................................................................................................................................................	
  8	
  
Remote	
  Actor	
  Code	
  Provisioning	
  ...............................................................................................................................	
  8	
  
High	
  performance	
  Message	
  passing	
  .........................................................................................................................	
  9	
  
Flow	
  Control	
  ....................................................................................................................................................................	
  10	
  
Message	
  Loss	
  Detection	
  ..............................................................................................................................................	
  11	
  
Stream	
  Replay	
  .................................................................................................................................................................	
  11	
  
Master	
  High	
  Availability	
  .............................................................................................................................................	
  12	
  
Global	
  Clock	
  Service	
  .....................................................................................................................................................	
  13	
  
Fault	
  Tolerant	
  and	
  At-­‐Least-­‐Once	
  Message	
  Delivery	
  .....................................................................................	
  13	
  
Exactly	
  Once	
  Message	
  Delivery	
  (ongoing)	
  .........................................................................................................	
  14	
  
Dynamic	
  Graph	
  (ongoing)	
  .........................................................................................................................................	
  17	
  
Observations	
  on	
  Akka	
  ......................................................................................................................................................	
  17	
  
Experiment	
  Results	
  ...........................................................................................................................................................	
  18	
  
Throughput	
  ......................................................................................................................................................................	
  18	
  
Latency	
  ...............................................................................................................................................................................	
  18	
  
Fault	
  Recovery	
  time	
  .....................................................................................................................................................	
  19	
  
Future	
  Plan(s)	
  ......................................................................................................................................................................	
  19	
  
Summary	
  ................................................................................................................................................................................	
  19	
  
 
	
  
Reference	
  ...............................................................................................................................................................................	
  20	
  
 
	
  
About	
  GearPump	
  
GearPump	
  (https://github.com/intel-­‐hadoop/gearpump)	
  is	
  a	
  lightweight,	
  real-­‐time,	
  big	
  data	
  
streaming	
  engine.	
  It	
  is	
  inspired	
  by	
  recent	
  advances	
  with	
  Akka	
  and	
  a	
  desire	
  to	
  improve	
  on	
  existing	
  
streaming	
  frameworks.	
  GearPump	
  draws	
  from	
  a	
  number	
  of	
  existing	
  frameworks	
  including	
  
MillWheel1,	
  Apache	
  Storm2,	
  Spark	
  Streaming3,	
  Apache	
  Samza4,	
  Apache	
  Tez5,	
  and	
  Hadoop	
  YARN6	
  
while	
  leveraging	
  Actors	
  throughout	
  its	
  architecture.	
  	
  
	
  
The	
  name	
  GearPump	
  is	
  a	
  reference	
  to	
  the	
  engineering	
  term	
  “gear	
  pump,”	
  which	
  is	
  a	
  super	
  simple	
  
pump	
  that	
  consists	
  of	
  only	
  two	
  gears,	
  but	
  is	
  very	
  powerful	
  at	
  streaming	
  water.	
  	
  
In	
  this	
  article,	
  we	
  will	
  present	
  how	
  we’ve	
  leveraged	
  Akka	
  to	
  build	
  this	
  engine.	
  
Motive	
  
Today’s	
  big	
  data	
  streaming	
  frameworks	
  are	
  in	
  high	
  demand	
  to	
  process	
  immense	
  amounts	
  of	
  data	
  
from	
  a	
  rapidly	
  growing	
  set	
  of	
  disparate	
  data	
  sources.	
  Beyond	
  the	
  requirements	
  of	
  fault	
  tolerance,	
  
persistence	
  and	
  scalability,	
  streaming	
  engines	
  need	
  to	
  provide	
  a	
  programming	
  model	
  where	
  
computations	
  can	
  be	
  easily	
  expressed	
  and	
  deployed	
  in	
  a	
  distributed	
  manner.	
  GearPump	
  meets	
  this	
  
objective	
  while	
  differentiating	
  itself	
  from	
  other	
  streaming	
  engines	
  by	
  elevating	
  and	
  promoting	
  the	
  
Actor	
  Model	
  as	
  the	
  primary	
  entity	
  permeating	
  the	
  framework.	
  What	
  we	
  set	
  out	
  to	
  build	
  is	
  a	
  simple	
  
and	
  powerful	
  streaming	
  framework.	
  The	
  Scala	
  language	
  and	
  Akka	
  offer	
  a	
  higher	
  level	
  of	
  abstraction	
  
allowing	
  frameworks	
  to	
  focus	
  more	
  on	
  the	
  application	
  and	
  make	
  the	
  engine	
  more	
  lightweight.	
  
We’ve	
  adhered	
  to	
  several	
  basic	
  principles:	
  
l Message-­‐driven	
   architecture	
   is	
   the	
   right	
   choice	
   for	
   real-­‐time	
   streaming.	
   Real-­‐time	
  
applications	
   need	
   to	
   respond	
   to	
   messages	
   immediately.	
   Akka	
   gives	
   us	
   all	
   the	
   facilities	
   and	
  
building	
  blocks	
  for	
  message-­‐driven	
  architecture;	
  it	
  simplifies	
  the	
  design	
  and	
  coding	
  and	
  allows	
  
code	
  to	
  evolve	
  more	
  quickly.	
  	
  
l Actor	
   is	
   the	
   right	
   level	
   of	
   concurrency.	
  It	
  can	
  give	
  us	
  better	
  performance	
  to	
  scale	
  up	
  and	
  
scale	
  out.	
  We	
  have	
  seen	
  other	
  big	
  data	
  engines	
  using	
  process,	
  thread,	
  or	
  self-­‐managed	
  thread	
  
pools	
   to	
   parallelize.	
   Actors	
   are	
   much	
   more	
   lightweight.	
   Moreover,	
   they	
   have	
   many	
  
optimizations	
  related	
  to	
  concurrency;	
  Actor	
  execution	
  can	
  be	
  swapped	
  in	
  and	
  out	
  efficiently	
  
with	
  respect	
  to	
  fairness	
  and	
  performance.	
  	
  
l The	
  flexibility	
  of	
  the	
  Actor	
  Model	
  imbues	
  streaming	
  with	
  some	
  unique	
  abilities.	
  To	
  see	
  an	
  
example	
  of	
  this,	
  let’s	
  take	
  a	
  look	
  at	
  a	
  video	
  streaming	
  problem	
  in	
  the	
  next	
  section.	
  
Example	
  
Suppose	
  we	
  are	
  using	
  streaming	
  to	
  solve	
  a	
  public	
  security	
  problem:	
  we	
  want	
  to	
  find	
  and	
  track	
  a	
  
crime	
  suspect’s	
  location	
  by	
  correlating	
  all	
  video	
  data	
  from	
  HD	
  cameras	
  across	
  the	
  city.	
  This	
  requires	
  
processing	
  raw	
  video	
  data	
  in	
  order	
  to	
  run	
  face	
  recognition	
  algorithms	
  on	
  this	
  data,	
  but	
  we	
  cannot	
  
 
	
  
afford	
  to	
  pass	
  ALL	
  data	
  back	
  to	
  the	
  data	
  center	
  as	
  the	
  bandwidth	
  is	
  limited.	
  Figure	
  1	
  shows	
  how	
  
GearPump	
  approaches	
  this	
  problem:	
  
	
  
Figure	
  1:	
  Video	
  Stream	
  Processing,	
  and	
  Dynamic	
  Graph	
  
1. Cameras	
  pass	
  coarse-­‐grained	
  feature	
  data	
  to	
  the	
  backend	
  data	
  center.	
  Raw	
  video	
  data	
  cannot	
  be	
  
transferred	
  because	
  bandwidth	
  usage	
  is	
  limited.	
  	
  
2. The	
  backend	
  correlates	
  some	
  of	
  the	
  data	
  with	
  nearby	
  cameras	
  and	
  identifies	
  a	
  potential	
  suspect.	
  
This	
  requires	
  additional	
  examination	
  of	
  all	
  related	
  video	
  frames	
  for	
  this	
  target.	
  
3. A	
  task	
  is	
  dynamically	
  delegated	
  to	
  one	
  or	
  more	
  edge	
  devices	
  to	
  gather	
  the	
  raw	
  video	
  data	
  and	
  
send	
  it	
  back.	
  The	
  backend	
  then	
  runs	
  face	
  recognition	
  algorithms	
  on	
  this	
  data	
  and	
  passes	
  results	
  
downstream.	
  	
  
	
  	
  
The	
  interesting	
  part	
  of	
  the	
  use	
  case	
  is	
  step	
  3,	
  where	
  new	
  processing	
  directives	
  are	
  dynamically	
  
deployed	
  to	
  specific	
  edge	
  devices	
  in	
  order	
  to	
  allow	
  subsequent	
  ingestion	
  and	
  analysis.	
  If	
  we	
  
generalize	
  this	
  capability,	
  we	
  can	
  transform	
  a	
  DAG	
  at	
  runtime	
  where	
  relevant	
  computation	
  can	
  
be	
  deployed	
  beyond	
  the	
  boundary	
  of	
  the	
  data	
  center.	
  The	
  location	
  transparency	
  of	
  the	
  Actor	
  
Model	
  makes	
  this	
  possible.	
  
Overview	
  
In	
  this	
  section	
  we	
  describe	
  how	
  we	
  model	
  streaming	
  within	
  the	
  Actor	
  Model	
  (Figure	
  2).	
  Note	
  there	
  
is	
  an	
  obvious	
  parallelism	
  to	
  YARN;	
  however,	
  our	
  model	
  is	
  concentric	
  to	
  the	
  application—something	
  
YARN	
  architects	
  explicitly	
  delegate	
  to	
  “a	
  host	
  of	
  framework	
  implementations7.”	
  Integration	
  with	
  
YARN	
  is	
  on	
  our	
  roadmap	
  and	
  will	
  pair	
  a	
  compelling	
  application	
  streaming	
  architecture	
  with	
  YARN’s	
  
broadly	
  recognized	
  de-­‐facto	
  resource	
  management	
  architecture.
	
  
 
	
  
	
  
Figure	
  2:	
  GearPump	
  Actor	
  Hierarchy	
  
Everything	
  in	
  the	
  diagram	
  is	
  an	
  actor.	
  The	
  actors	
  fall	
  into	
  two	
  categories,	
  Cluster	
  and	
  Application	
  
Actors.	
  	
  
Cluster	
  Actors	
  
l Worker:	
  Maps	
  to	
  a	
  physical	
  worker	
  machine.	
  It	
  is	
  responsible	
  for	
  managing	
  resources	
  and	
  
reporting	
  metrics	
  on	
  that	
  machine.	
  
l Master:	
  Heart	
  of	
  the	
  cluster,	
  which	
  manages	
  workers,	
  resources,	
  and	
  applications.	
  The	
  main	
  
function	
  is	
  delegated	
  to	
  three	
  child	
  actors:	
  App	
  Manager,	
  Worker	
  Manager,	
  and	
  Resource	
  
Scheduler.	
  	
  
Application	
  Actors	
  
l AppMaster:	
  Responsible	
  for	
  scheduling	
  the	
  tasks	
  to	
  workers	
  and	
  managing	
  the	
  state	
  of	
  the	
  
application.	
  Different	
  applications	
  have	
  different	
  AppMaster	
  instances	
  and	
  are	
  isolated.	
  	
  
l Executor:	
  Child	
  of	
  AppMaster,	
  represents	
  a	
  JVM	
  process.	
  Its	
  job	
  is	
  to	
  manage	
  the	
  lifecycle	
  of	
  
tasks	
  and	
  recover	
  them	
  in	
  case	
  of	
  failure.	
  	
  
l Task:	
  Child	
  of	
  Executor,	
  does	
  the	
  real	
  job.	
  Every	
  task	
  actor	
  has	
  a	
  global	
  unique	
  address.	
  One	
  
task	
  actor	
  can	
  send	
  data	
  to	
  any	
  other	
  task	
  actors.	
  This	
  gives	
  us	
  great	
  flexibility	
  of	
  how	
  the	
  
computation	
  DAG	
  is	
  distributed.	
  
All	
  actors	
  in	
  the	
  graph	
  are	
  woven	
  together	
  with	
  actor	
  supervision;	
  actor	
  watching	
  and	
  all	
  errors	
  are	
  
handled	
  properly	
  via	
  supervisors.	
  In	
  a	
  master,	
  a	
  risky	
  job	
  is	
  isolated	
  and	
  delegated	
  to	
  child	
  actors,	
  
 
	
  
so	
  it’s	
  more	
  robust.	
  In	
  the	
  application,	
  an	
  extra	
  intermediate	
  layer,	
  “Executor,”	
  is	
  created	
  so	
  that	
  we	
  
can	
  do	
  fine-­‐grained	
  and	
  fast	
  recovery	
  in	
  case	
  of	
  task	
  failure.	
  A	
  Master	
  watches	
  the	
  lifecycle	
  of	
  
AppMaster	
  and	
  Worker	
  to	
  handle	
  the	
  failures,	
  but	
  the	
  lifecycle	
  of	
  Worker	
  and	
  AppMaster	
  are	
  not	
  
bound	
  to	
  a	
  Master	
  Actor	
  by	
  supervision,	
  so	
  that	
  Master	
  node	
  can	
  fail	
  independently.	
  	
  Several	
  Master	
  
Actors	
  form	
  an	
  Akka	
  cluster,	
  the	
  Master	
  state	
  is	
  exchanged	
  using	
  the	
  Gossip	
  protocol	
  in	
  a	
  conflict-­‐
free	
  consistent	
  way	
  so	
  that	
  there	
  is	
  no	
  single	
  point	
  of	
  failure.	
  With	
  this	
  hierarchy	
  design,	
  we	
  are	
  able	
  
to	
  achieve	
  high	
  availability.	
  	
  
Implementation	
  
DAG	
  API	
  
As	
  Figure	
  3	
  shows,	
  an	
  application	
  is	
  a	
  DAG	
  of	
  processors.	
  Each	
  processor	
  handles	
  messages.	
  	
  
	
  
Figure	
  3:	
  Processor	
  DAG	
  
At	
  runtime,	
  each	
  processor	
  can	
  be	
  parallelized	
  to	
  a	
  list	
  of	
  tasks;	
  each	
  task	
  is	
  an	
  actor	
  within	
  the	
  data	
  
pipeline.	
  Data	
  is	
  passed	
  between	
  tasks.	
  The	
  Partitioner	
  (Figure	
  4)	
  defines	
  how	
  data	
  is	
  transferred.	
  
	
  
Figure	
  4:	
  Task	
  Data	
  Shuffling	
  
We	
  have	
  an	
  easy	
  syntax	
  to	
  express	
  the	
  computation.	
  To	
  represent	
  the	
  DAG	
  above,	
  we	
  define	
  the	
  
computation	
  as:	
  
Graph(A~>B~>C~>D,	
  A~>	
  C,	
  B~>E~>D)	
  
A~>B~>C~>D	
  is	
  a	
  Path	
  of	
  Processors,	
  and	
  Graph	
  is	
  composed	
  of	
  this	
  Path	
  list.	
  This	
  representation	
  
should	
  be	
  cleaner	
  than	
  that	
  of	
  vertex	
  and	
  edge	
  set.	
  A	
  high-­‐level	
  domain	
  specific	
  language	
  (DSL)	
  
 
	
  
using	
  combinators	
  like	
  flatmap	
  will	
  be	
  defined	
  on	
  top	
  of	
  this.	
  Our	
  aim	
  is	
  to	
  extend	
  the	
  existing	
  Scala	
  
collections	
  framework…	
  likely	
  by	
  pimping8.	
  
Application	
  Submission	
  
In	
  GearPump,	
  each	
  application	
  consists	
  of	
  an	
  AppMaster	
  and	
  a	
  set	
  of	
  Executors,	
  and	
  each	
  one	
  is	
  a	
  
standalone	
  JVM.	
  Thus,	
  an	
  application	
  is	
  isolated	
  from	
  other	
  applications	
  by	
  JVM	
  isolation.	
  
	
  
Figure	
  5:	
  User	
  Submit	
  Application	
  
To	
  submit	
  an	
  application	
  (Figure	
  5),	
  a	
  GearPump	
  client specifies a computation defined within a
DAG and submits this to an active master. The SubmitApplication message is sent to the Master,
which then forwards it to an AppManager.
	
  
Figure	
  6:	
  Launch	
  Executors	
  and	
  Tasks
The	
  AppManager	
  locates	
  an	
  available	
  worker	
  and	
  launches	
  an	
  AppMaster	
  in	
  a	
  sub-­‐process	
  JVM	
  of	
  
the	
  worker.	
  As	
  shown	
  in	
  Figure	
  6,	
  the	
  AppMaster	
  then	
  negotiates	
  with	
  the	
  Master	
  for	
  resource	
  
allocation	
  in	
  order	
  to	
  distribute	
  the	
  DAG	
  as	
  defined	
  within	
  the	
  application.	
  The	
  allocated	
  workers	
  
then	
  launch	
  Executors	
  (new	
  JVMs)	
  and	
  subsequently	
  start	
  Tasks.	
  
Remote	
  Actor	
  Code	
  Provisioning	
  
Akka	
  currently	
  does	
  not	
  support	
  remote	
  code	
  provisioning.	
  That	
  is,	
  instantiating	
  an	
  actor	
  on	
  a	
  
remote	
  node	
  assumes	
  this	
  actor	
  class	
  and	
  related	
  dependencies	
  are	
  already	
  available	
  and	
  accessible	
  
by	
  the	
  JVM’s	
  system	
  class	
  loader.	
  GearPump	
  provides	
  several	
  mechanisms	
  that	
  allow	
  new	
  resources	
  
to	
  be	
  loaded	
  at	
  a	
  remote	
  node	
  site.	
  This	
  is	
  a	
  prerequisite	
  to	
  enabling	
  run-­‐time	
  DAG	
  modification	
  
 
	
  
since	
  you	
  cannot	
  assume	
  new	
  DAG	
  sub-­‐graphs	
  have	
  the	
  requisite	
  resources	
  on	
  the	
  remote	
  node.	
  As	
  
noted	
  above,	
  when	
  a	
  worker	
  launches	
  an	
  executor,	
  the	
  worker	
  may	
  modify	
  the	
  executor’s	
  classpath	
  
in	
  several	
  specific	
  ways.	
  First,	
  it	
  looks	
  for	
  any	
  serialized	
  jar	
  sent	
  as	
  part	
  of	
  the	
  application	
  definition.	
  
If	
  one	
  exists,	
  the	
  worker	
  saves	
  this	
  locally	
  and	
  appends	
  the	
  jar	
  name	
  to	
  the	
  executor’s	
  classpath.	
  
Second,	
  the	
  worker	
  looks	
  at	
  the	
  configuration	
  settings	
  also	
  included	
  as	
  part	
  of	
  an	
  application	
  
definition	
  that	
  may	
  define	
  an	
  extra	
  classpath	
  for	
  the	
  executor.	
  In	
  this	
  latter	
  scenario	
  resources	
  are	
  
resident	
  on	
  the	
  remote	
  node	
  but	
  need	
  to	
  be	
  appended	
  to	
  the	
  executor’s	
  classpath.	
  For	
  example,	
  an	
  
AppMaster	
  and	
  its	
  task	
  actors	
  may	
  need	
  to	
  access	
  various	
  Hadoop	
  components	
  during	
  runtime	
  that	
  
have	
  already	
  been	
  preinstalled	
  on	
  the	
  worker’s	
  machine.
High	
  performance	
  Message	
  passing	
  
For	
  streaming	
  applications,	
  message-­‐passing	
  performance	
  is	
  extremely	
  important.	
  For	
  example,	
  
one	
  streaming	
  platform	
  may	
  need	
  to	
  process	
  millions	
  of	
  messages	
  per	
  second	
  with	
  millisecond	
  level	
  
latency.	
  High	
  throughput	
  and	
  low	
  latency	
  are	
  not	
  that	
  easy	
  to	
  achieve.	
  There	
  are	
  a	
  number	
  of	
  
challenges:	
  
1. First	
  Challenge:	
  Network	
  is	
  not	
  efficient	
  for	
  small	
  messages	
  
In	
  streaming,	
  typical	
  message	
  size	
  is	
  very	
  small,	
  usually	
  less	
  than	
  100	
  bytes	
  per	
  message,	
  like	
  the	
  
floating	
  car	
  GPS	
  data.	
  But	
  network	
  efficiency	
  is	
  very	
  bad	
  when	
  transferring	
  small	
  messages.	
  As	
  you	
  
can	
  see	
  in	
  Figure	
  7,	
  when	
  message	
  size	
  is	
  50	
  bytes,	
  it	
  can	
  only	
  use	
  20%	
  bandwidth.	
  How	
  to	
  improve	
  
the	
  throughput?	
  
	
  
Figure	
  7:	
  Messaging	
  Throughput	
  vs	
  Message	
  Size	
  
2. Second	
  Challenge:	
  Message	
  overhead	
  is	
  too	
  big	
  
Each	
  message	
  sent	
  between	
  two	
  actors	
  contains	
  sender	
  and	
  receiver	
  actor	
  paths.	
  When	
  sending	
  
over	
  the	
  wire,	
  the	
  overhead	
  of	
  this	
  ActorPath	
  is	
  not	
  trivial.	
  For	
  example,	
  the	
  actor	
  path	
  below	
  takes	
  
more	
  than	
  200	
  bytes.	
  	
  
akka.tcp://system1@192.168.1.53:51582/remote/akka.tcp/2120193a-e10b-474e-bccb-
8ebc4b3a0247@192.168.1.53:48948/remote/akka.tcp/system2@192.168.1.54:43676/user/master
/Worker1/app_0_executor_0/group_1_task_0#-768886794
 
	
  
How	
  do	
  we	
  solve	
  these	
  challenges?	
  
We’ve	
  implemented	
  a	
  custom	
  Netty	
  transportation	
  layer	
  with	
  Akka	
  extension.	
  In	
  Figure	
  8,	
  Netty	
  
Client	
  translates	
  ActorPath	
  to	
  TaskId,	
  and	
  Netty	
  Server	
  translates	
  it	
  back.	
  Only	
  TaskId	
  is	
  passed	
  on	
  
the	
  wire.	
  It	
  is	
  only	
  about	
  10	
  bytes,	
  so	
  the	
  overhead	
  is	
  minimized.	
  Different	
  Netty	
  Client	
  Actors	
  are	
  
isolated;	
  they	
  do	
  not	
  block	
  each	
  other.	
  
	
  
Figure	
  8:	
  Netty	
  Transport	
  and	
  Task	
  Addressing	
  
For	
  performance,	
  effective	
  batching	
  is	
  really	
  the	
  key!	
  We	
  group	
  multiple	
  messages	
  into	
  a	
  single	
  
batch	
  and	
  send	
  it	
  on	
  the	
  wire.	
  The	
  batch	
  size	
  is	
  not	
  fixed;	
  it	
  is	
  adjusted	
  dynamically	
  based	
  on	
  
network	
  status.	
  If	
  the	
  network	
  is	
  available,	
  we	
  flush	
  pending	
  messages	
  immediately	
  without	
  waiting;	
  
otherwise,	
  we	
  put	
  the	
  message	
  in	
  a	
  batch	
  and	
  trigger	
  a	
  timer	
  to	
  flush	
  the	
  batch	
  later.	
  
Flow	
  Control	
  
Without	
  flow	
  control,	
  one	
  task	
  can	
  easily	
  flood	
  another	
  task	
  with	
  too	
  many	
  messages,	
  causing	
  out	
  of	
  
memory	
  errors.	
  Typical	
  flow	
  control	
  uses	
  a	
  TCP-­‐like	
  sliding	
  window,	
  so	
  that	
  source	
  and	
  target	
  can	
  
run	
  concurrently	
  without	
  blocking	
  each	
  other.	
  	
  
	
  
Figure	
  9:	
  Flow	
  control,	
  each	
  task	
  is	
  “star”	
  connected	
  to	
  input	
  and	
  output	
  tasks	
  
 
	
  
The	
  difficult	
  part	
  for	
  our	
  problem	
  is	
  that	
  each	
  task	
  can	
  have	
  multiple	
  input	
  and	
  output	
  tasks.	
  The	
  
input	
  and	
  output	
  must	
  be	
  entangled	
  so	
  that	
  the	
  backpressure	
  can	
  be	
  properly	
  propagated	
  from	
  
downstream	
  to	
  upstream,	
  as	
  shown	
  in	
  Figure	
  9.	
  The	
  flow	
  control	
  also	
  needs	
  to	
  consider	
  failures,	
  
and	
  it	
  needs	
  to	
  be	
  able	
  to	
  recover	
  when	
  there	
  is	
  message	
  loss.	
  
Another	
  challenge	
  is	
  that	
  the	
  overhead	
  of	
  flow	
  control	
  messages	
  may	
  be	
  big.	
  If	
  we	
  ack	
  every	
  
message,	
  a	
  huge	
  amount	
  of	
  ack’d	
  messages	
  will	
  be	
  in	
  the	
  system,	
  degrading	
  streaming	
  performance.	
  
The	
  approach	
  we	
  adopted	
  is	
  to	
  use	
  explicit	
  AckRequest	
  messages.	
  The	
  target	
  tasks	
  are	
  only	
  ack’d	
  
when	
  they	
  receive	
  the	
  AckRequest	
  message,	
  and	
  the	
  source	
  only	
  sends	
  an	
  AckRequest	
  when	
  
necessary.	
  With	
  this	
  approach,	
  we	
  largely	
  reduced	
  the	
  overhead.	
  
Message	
  Loss	
  Detection	
  
The	
  streaming	
  platform	
  needs	
  to	
  effectively	
  track	
  what	
  messages	
  have	
  been	
  lost	
  and	
  recover	
  as	
  fast	
  
as	
  possible.	
  For	
  example,	
  for	
  web	
  ads,	
  the	
  advertiser	
  is	
  charged	
  for	
  every	
  ad	
  click,	
  so	
  miscounts	
  are	
  
not	
  acceptable.	
  	
  	
  
	
  
Figure	
  10:	
  Message	
  Loss	
  Detection	
  
We	
  use	
  the	
  flow	
  control	
  message	
  AckRequest	
  and	
  Ack	
  to	
  detect	
  message	
  loss	
  (Figure	
  10).	
  The	
  target	
  
task	
  counts	
  how	
  many	
  messages	
  have	
  been	
  received	
  since	
  the	
  last	
  AckRequest,	
  and	
  acks	
  the	
  count	
  
back	
  to	
  the	
  source	
  task.	
  The	
  source	
  task	
  checks	
  the	
  count	
  and	
  finds	
  the	
  message	
  loss.	
  
Stream	
  Replay	
  
In	
  some	
  applications,	
  a	
  message	
  cannot	
  be	
  lost	
  and	
  must	
  be	
  replayed.	
  For	
  example,	
  during	
  a	
  money	
  
transfer,	
  the	
  bank	
  sends	
  an	
  SMS	
  to	
  us	
  with	
  a	
  verification	
  code.	
  If	
  that	
  message	
  is	
  lost,	
  the	
  system	
  
must	
  send	
  another	
  one	
  so	
  that	
  money	
  transfer	
  can	
  continue.	
  We	
  made	
  the	
  decision	
  to	
  use	
  source	
  
end	
  message	
  storage	
  and	
  timestamp-­‐based	
  replay.	
  
 
	
  
	
  
Figure	
  11:	
  Replay	
  with	
  Source	
  End	
  Message	
  Store	
  
Every	
  message	
  is	
  immutable	
  and	
  tagged	
  with	
  a	
  timestamp.	
  We	
  made	
  an	
  assumption	
  that	
  the	
  
timestamp	
  is	
  approximately	
  incremental	
  (allow	
  small	
  ratio	
  message	
  disorder).	
  	
  
We	
  assume	
  the	
  message	
  is	
  coming	
  from	
  a	
  replayable	
  source,	
  like	
  an	
  Apache	
  Kafka	
  queue;	
  otherwise,	
  
the	
  message	
  is	
  stored	
  at	
  a	
  customizable	
  source	
  end	
  "message	
  store”.	
  In	
  Figure	
  11,	
  when	
  the	
  source	
  
task	
  sends	
  the	
  message	
  downstream,	
  the	
  timestamp	
  and	
  offset	
  of	
  the	
  message	
  are	
  also	
  check-­‐
pointed	
  to	
  offset-­‐timestamp	
  storage	
  periodically.	
  During	
  recovery,	
  the	
  system	
  first	
  retrieves	
  the	
  
right	
  timestamp	
  and	
  offset	
  from	
  the	
  offset-­‐timestamp	
  storage.	
  Then	
  it	
  replays	
  the	
  message	
  store	
  
from	
  that	
  timestamp	
  and	
  offset.	
  A	
  Timestamp	
  Filter	
  filters	
  out	
  old	
  messages	
  in	
  case	
  the	
  message	
  in	
  
storage	
  is	
  not	
  strictly	
  time-­‐ordered.	
  	
  
Master	
  High	
  Availability	
  
In	
  a	
  distributed	
  streaming	
  system,	
  any	
  part	
  can	
  fail.	
  The	
  system	
  must	
  stay	
  responsive	
  and	
  do	
  
recovery	
  in	
  case	
  of	
  errors.	
  
	
  
Figure	
  12:	
  Master	
  High	
  Availability	
  
We	
  use	
  Akka	
  clustering,	
  as	
  shown	
  in	
  Figure	
  12,	
  to	
  implement	
  the	
  Master	
  high	
  availability.	
  The	
  
cluster	
  consists	
  of	
  several	
  master	
  nodes,	
  but	
  no	
  worker	
  nodes.	
  With	
  clustering	
  facilities,	
  we	
  can	
  
easily	
  detect	
  and	
  handle	
  a	
  master	
  node	
  crash.	
  The	
  master	
  state	
  is	
  replicated	
  on	
  all	
  master	
  nodes	
  
with	
  the	
  Typesafe	
  akka-­‐data-­‐replication9	
  library.	
  When	
  one	
  master	
  node	
  crashes,	
  another	
  standby	
  
master	
  reads	
  the	
  master	
  state	
  and	
  takes	
  over.	
  The	
  master	
  state	
  contains	
  the	
  submission	
  data	
  of	
  all	
  
applications.	
  If	
  one	
  application	
  dies,	
  a	
  master	
  can	
  use	
  that	
  state	
  to	
  recover	
  that	
  application.	
  CRDT	
  
LwwMap10	
  is	
  used	
  to	
  represent	
  the	
  state;	
  it	
  is	
  a	
  hash	
  map	
  that	
  can	
  converge	
  on	
  distributed	
  nodes	
  
 
	
  
without	
  conflict.	
  To	
  have	
  strong	
  data	
  consistency,	
  the	
  state	
  read	
  and	
  write	
  must	
  happen	
  on	
  a	
  
quorum	
  of	
  master	
  nodes.	
  	
  
Global	
  Clock	
  Service	
  
Global	
  clock	
  service	
  tracks	
  the	
  minimum	
  timestamp	
  of	
  all	
  pending	
  messages	
  in	
  the	
  system.	
  Every	
  
task	
  updates	
  its	
  own	
  minimum-­‐clock	
  to	
  global	
  clock	
  service	
  (Figure	
  13);	
  the	
  minimum-­‐clock	
  of	
  a	
  
task	
  is	
  decided	
  by	
  the	
  minimum	
  of:	
  
l Minimum	
  timestamp	
  of	
  all	
  pending	
  messages	
  in	
  the	
  inbox.	
  	
  
l Minimum	
  timestamp	
  of	
  all	
  unacked	
  outgoing	
  messages.	
  When	
  there	
  is	
  message	
  loss,	
  the	
  
minimum	
  clock	
  does	
  not	
  advance.	
  	
  
l Minimum	
  clock	
  of	
  all	
  task	
  states.	
  If	
  the	
  state	
  is	
  accumulated	
  by	
  a	
  lot	
  of	
  input	
  messages,	
  then	
  the	
  
clock	
  value	
  is	
  decided	
  by	
  the	
  oldest	
  message’s	
  timestamp.	
  The	
  state	
  clock	
  advances	
  by	
  doing	
  
snapshots	
  to	
  persistent	
  storage	
  or	
  by	
  fading	
  out	
  the	
  effect	
  of	
  old	
  messages.	
  
	
  
Figure	
  13:	
  Global	
  Clock	
  Service	
  
The	
  global	
  clock	
  service	
  keeps	
  track	
  of	
  all	
  task	
  minimum	
  clocks	
  and	
  maintains	
  a	
  global	
  view	
  of	
  
minimum	
  clock.	
  The	
  global	
  minimum	
  clock	
  value	
  is	
  monotonically	
  increasing,	
  meaning	
  that	
  all	
  
source	
  messages	
  before	
  this	
  clock	
  value	
  have	
  been	
  processed.	
  If	
  there	
  is	
  message	
  loss	
  or	
  task	
  crash,	
  
the	
  global	
  minimum	
  clock	
  stops.	
  
Fault	
  Tolerant	
  and	
  At-­‐Least-­‐Once	
  Message	
  Delivery	
  
With	
  Akka’s	
  powerful	
  actor	
  supervision,	
  we	
  can	
  implement	
  a	
  resilient	
  system	
  relatively	
  easily.	
  In	
  
GearPump,	
  different	
  applications	
  have	
  a	
  different	
  AppMaster	
  instance	
  and	
  are	
  totally	
  isolated	
  from	
  
each	
  other.	
  For	
  each	
  application,	
  there	
  is	
  a	
  supervision	
  tree,	
  AppMaster-­‐>Executor-­‐>Task.	
  With	
  this	
  
supervision	
  hierarchy,	
  we	
  can	
  free	
  ourselves	
  from	
  the	
  headache	
  of	
  zombie	
  processes.	
  For	
  example	
  if	
  
AppMaster	
  is	
  down	
  its	
  Akka	
  supervisor	
  ensures	
  the	
  whole	
  tree	
  shuts	
  down.	
  	
  
 
	
  
	
  
Figure	
  14:	
  Possible	
  Failure	
  Scenarios	
  and	
  Error	
  Supervision	
  Hierarchy	
  
It	
  is	
  also	
  easier	
  to	
  handle	
  message	
  loss	
  and	
  other	
  failures.	
  Multiple	
  failure	
  scenarios	
  are	
  possible,	
  as	
  
shown	
  in	
  Figure	
  14.	
  If	
  an	
  AppMaster	
  crashes,	
  Master	
  schedules	
  a	
  new	
  resource	
  to	
  restart	
  the	
  
AppMaster,	
  and	
  then	
  the	
  AppMaster	
  requests	
  resources	
  to	
  start	
  all	
  executors	
  and	
  tasks	
  in	
  the	
  tree.	
  
If	
  an	
  Executor	
  crashes,	
  its	
  supervisor	
  AppMaster	
  is	
  notified	
  and	
  requests	
  a	
  new	
  resource	
  from	
  the	
  
active	
  master	
  to	
  start	
  the	
  executor’s	
  child	
  tasks.	
  If	
  a	
  task	
  throws	
  an	
  exception,	
  its	
  supervisor	
  
executor	
  restarts	
  that	
  Task.	
  	
  
When	
  “at	
  least	
  once”	
  message	
  delivery	
  is	
  a	
  requirement,	
  we	
  replay	
  the	
  messages	
  in	
  the	
  case	
  of	
  
message	
  loss.	
  First,	
  AppMaster	
  reads	
  the	
  latest	
  minimum	
  clock	
  from	
  the	
  global	
  clock	
  service	
  or	
  
clock	
  storage	
  if	
  the	
  clock	
  service	
  crashes.	
  Then	
  AppMaster	
  restarts	
  all	
  the	
  task	
  actors	
  to	
  get	
  a	
  fresh	
  
task	
  state,	
  and	
  the	
  message	
  source	
  replays	
  messages	
  from	
  that	
  minimum	
  clock.	
  This	
  can	
  be	
  further	
  
improved	
  to	
  restart	
  partial	
  tasks	
  only.	
  
Exactly	
  Once	
  Message	
  Delivery	
  (ongoing)	
  
For	
  some	
  applications,	
  it	
  is	
  extremely	
  important	
  to	
  do	
  “exactly	
  once”	
  message	
  delivery.	
  For	
  example,	
  
for	
  a	
  real-­‐time	
  billing	
  system,	
  we	
  do	
  not	
  want	
  to	
  bill	
  the	
  customer	
  twice.	
  The	
  goal	
  of	
  exactly	
  once	
  
message	
  delivery	
  is	
  to	
  make	
  sure:	
  
• Errors	
  don’t	
  accumulate—today’s	
  error	
  will	
  not	
  be	
  accumulated	
  to	
  tomorrow	
  
• State	
  management	
  is	
  transparent	
  to	
  application	
  developer	
  
We	
  use	
  global	
  clock	
  to	
  synchronize	
  the	
  distributed	
  transactions.	
  We	
  assume	
  every	
  message	
  from	
  
the	
  data	
  source	
  has	
  a	
  unique	
  timestamp.	
  The	
  timestamp	
  can	
  be	
  a	
  part	
  of	
  the	
  message	
  body	
  or	
  can	
  be	
  
attached	
  later	
  with	
  system	
  clock	
  when	
  the	
  message	
  is	
  injected	
  into	
  the	
  streaming	
  system.	
  With	
  this	
  
global	
  synchronized	
  clock,	
  we	
  can	
  coordinate	
  all	
  tasks	
  to	
  checkpoint	
  at	
  the	
  same	
  timestamp.	
  	
  
 
	
  
	
  
Figure	
  15:	
  Checkpointing	
  and	
  Exactly	
  Once	
  Message	
  delivery	
  
Workflow	
  to	
  do	
  state	
  checkpointing	
  (Figure	
  15):	
  
1. The	
  coordinator	
  asks	
  the	
  streaming	
  system	
  to	
  do	
  a	
  checkpoint	
  at	
  timestamp	
  Tc.	
  
2. Each	
  application	
  task	
  maintains	
  two	
  states:	
  checkpoint	
  state	
  and	
  current	
  state.	
  Checkpoint	
  state	
  
only	
  contains	
  information	
  before	
  timestamp	
  Tc.	
  Current	
  state	
  contains	
  all	
  information.	
  
3. When	
  the	
  global	
  minimum	
  clock	
  is	
  larger	
  than	
  Tc,	
  all	
  messages	
  older	
  than	
  Tc	
  have	
  been	
  
processed.	
  The	
  checkpoint	
  state	
  will	
  no	
  longer	
  change,	
  so	
  we	
  can	
  then	
  safely	
  persist	
  the	
  
checkpoint	
  state	
  in	
  storage.	
  
4. When	
  there	
  is	
  message	
  loss,	
  we	
  start	
  the	
  recovery	
  process.	
  	
  
5. To	
  recover,	
  load	
  the	
  latest	
  checkpoint	
  state	
  from	
  storage	
  and	
  use	
  it	
  to	
  restore	
  the	
  application	
  
status.	
  
6. Data	
  source	
  replays	
  messages	
  from	
  the	
  checkpoint	
  timestamp.	
  	
  
The	
  checkpoint	
  interval	
  is	
  dynamically	
  determined	
  by	
  the	
  global	
  clock	
  service	
  (Figure	
  16).	
  Each	
  
data	
  source	
  tracks	
  the	
  max	
  timestamp	
  of	
  input	
  messages.	
  Upon	
  receiving	
  min	
  clock	
  updates,	
  the	
  
data	
  source	
  reports	
  the	
  time	
  delta	
  back	
  to	
  global	
  clock	
  service.	
  The	
  max	
  time	
  delta	
  is	
  the	
  upper	
  
bound	
  of	
  the	
  application	
  state	
  timespan.	
  The	
  checkpoint	
  interval	
  is	
  bigger	
  than	
  max	
  delta	
  time	
  as	
  
determined	
  by:	
  	
  
checkpointInterval =   2!! !"#! !"#   _!"#$%_!"#$
	
  
 
	
  
	
  
Figure	
  16:	
  How	
  to	
  determine	
  Checkpoint	
  Interval	
  
After	
  the	
  checkpoint	
  interval	
  is	
  notified	
  to	
  tasks	
  by	
  the	
  global	
  clock	
  service,	
  each	
  task	
  calculates	
  its	
  
next	
  checkpoint	
  timestamp	
  autonomously	
  without	
  global	
  synchronization.	
  
nextCheckpointTimeStamp = checkpointInterval ∙ (1 +
𝑚𝑎𝑥𝑀𝑒𝑠𝑠𝑎𝑔𝑒𝑇𝑖𝑚𝑒𝑠𝑡𝑎𝑚𝑝𝑂𝑓𝑇ℎ𝑖𝑠𝑇𝑎𝑠𝑘
𝑐ℎ𝑒𝑐𝑘𝑝𝑜𝑖𝑛𝑡𝐼𝑛𝑡𝑒𝑟𝑣𝑎𝑙
)	
  
Each	
  task	
  contains	
  two	
  states:	
  checkpoint	
  state	
  and	
  current	
  state.	
  The	
  code	
  to	
  update	
  the	
  state	
  is	
  
shown	
  in	
  the	
  listing	
  below	
  (List	
  1).	
  	
  
TaskState(stateStore, initialTimeStamp):
currentState = stateStore.load(initialTimeStamp)
checkpointState = currentState.clone
checkpointTimestamp = nextCheckpointTimeStamp(initialTimeStamp)
onMessage(msg):
if (msg.timestamp < checkpointTimestamp):
checkpointState.updateMessage(msg)
currentState.updateMessage(msg)
maxClock = max(maxClock, msg.timeStamp)
onMinClock(minClock):
if (minClock > checkpointTimestamp):
stateStore.persist(checkpointState)
checkpointTimeStamp = nextCheckpointTimeStamp(maxClock)
checkpointState = currentState.clone
onNewCheckpointInterval(newStep):
step = newStep
nextCheckpointTimeStamp(timestamp):
checkpointTimestamp = (1 + timestamp/step) * step
	
  
List	
  1:	
  Task	
  Transactional	
  State	
  Implementation	
  
 
	
  
The	
  in-­‐memory	
  current	
  state	
  can	
  be	
  queried	
  directly	
  by	
  the	
  client,	
  it	
  represents	
  the	
  real	
  time	
  view	
  
of	
  the	
  data.	
  	
  
Dynamic	
  Graph	
  (ongoing)	
  
We	
  want	
  to	
  be	
  able	
  to	
  modify	
  the	
  DAG	
  dynamically	
  so	
  we	
  can	
  add,	
  remove,	
  and	
  replace	
  sub-­‐graphs	
  
(Figure	
  17).	
  	
  
	
  
Figure	
  17:	
  Dynamic	
  Graph,	
  Attach,	
  Replace,	
  and	
  Remove	
  
Observations	
  on	
  Akka	
  
Akka	
  is	
  a	
  great	
  tool	
  for	
  streaming.	
  The	
  message-­‐driven	
  architecture	
  and	
  intuitive	
  Actor	
  Model	
  
largely	
  influence	
  how	
  a	
  distributed	
  service	
  should	
  be	
  designed.	
  Akka	
  and	
  its	
  libraries	
  give	
  us	
  
enough	
  flexibility	
  and	
  power	
  to	
  build	
  a	
  real-­‐time	
  and	
  scalable	
  distributed	
  streaming	
  platform.	
  	
  
l With	
  Akka	
  remoting,	
  we	
  can	
  easily	
  provision	
  a	
  computation	
  DAG	
  of	
  remote	
  nodes,	
  including	
  
code	
  provisioning.	
  	
  
l With	
  Akka	
  clustering,	
  we	
  immediately	
  have	
  a	
  distributed	
  consistent	
  state	
  to	
  build	
  a	
  high	
  
available	
  service.	
  
l With	
  location	
  transparency,	
  we	
  can	
  handle	
  scale-­‐up	
  and	
  scale-­‐out	
  in	
  the	
  same	
  way;	
  it	
  is	
  also	
  
easier	
  for	
  us	
  to	
  test	
  our	
  code	
  using	
  a	
  single	
  node.	
  	
  
l With	
  an	
  error	
  supervision	
  tree,	
  we	
  are	
  better	
  situated	
  to	
  handle	
  the	
  errors	
  and	
  recover	
  with	
  
the	
  best	
  approach.	
  	
  
l Akka	
  has	
  very	
  good	
  extensibility;	
  we	
  have	
  customized	
  Akka	
  on	
  serialization,	
  message	
  passing,	
  
and	
  metrics	
  to	
  meet	
  particular	
  needs.	
  
Because	
  streaming	
  applications	
  has	
  extreme	
  demands	
  on	
  throughput	
  and	
  latency	
  when	
  processing	
  
large	
  volumes	
  of	
  data,	
  we	
  customized	
  Akka	
  to	
  better	
  meet	
  our	
  performance	
  requirements.	
  	
  
l For	
  the	
  message	
  passing	
  between	
  tasks,	
  we	
  implemented	
  a	
  customized	
  message	
  passing	
  
extension	
  that	
  batches	
  the	
  messages	
  before	
  sending	
  across	
  the	
  network.	
  	
  
l To	
  reduce	
  the	
  actor	
  path	
  overhead,	
  we	
  developed	
  a	
  lightweight	
  method	
  to	
  address	
  the	
  task	
  
uniquely	
  in	
  the	
  application.	
  	
  
l To	
  reduce	
  the	
  CPU	
  time	
  of	
  serialization,	
  we	
  avoid	
  using	
  a	
  pooled	
  serializer	
  and	
  the	
  heavy	
  
serializer	
  lookup	
  process.	
  We	
  also	
  avoid	
  serializing	
  the	
  same	
  message	
  multiple	
  times.	
  	
  
l To	
  reduce	
  the	
  Akka	
  clustering	
  messaging	
  overhead,	
  the	
  worker	
  is	
  designed	
  to	
  NOT	
  be	
  part	
  of	
  
Akka	
  cluster.	
  	
  
 
	
  
l For	
  flow	
  control,	
  our	
  implementation	
  is	
  slightly	
  different	
  with	
  Akka	
  streaming,	
  the	
  rate	
  of	
  Ack	
  
messages	
  is	
  smaller.	
  
One	
  case	
  we	
  have	
  not	
  solved	
  is	
  timeout	
  detection.	
  We	
  want	
  to	
  avoid	
  the	
  following	
  two	
  scenarios:	
  	
  
A) When	
  one	
  node	
  crashes,	
  the	
  watching	
  node	
  takes	
  too	
  long	
  to	
  note	
  its	
  death.	
  
B) When	
  the	
  CPU	
  load	
  is	
  high,	
  actors	
  may	
  start	
  to	
  disassociate	
  with	
  other	
  nodes.	
  	
  
The	
  reality	
  is	
  that	
  either	
  or	
  both	
  of	
  these	
  may	
  occur.	
  We	
  want	
  a	
  faster	
  and	
  more	
  robust	
  way	
  to	
  
differentiate	
  real	
  failures	
  from	
  temporary	
  unavailability,	
  so	
  we	
  can	
  recover	
  faster	
  in	
  case	
  of	
  real	
  
failures	
  and	
  be	
  more	
  resilient	
  in	
  case	
  of	
  temporary	
  load	
  increases.	
  	
  
Experiment	
  Results	
  
To	
  illustrate	
  the	
  performance	
  of	
  GearPump,	
  we	
  mainly	
  focused	
  on	
  two	
  aspects:	
  throughput	
  and	
  
latency,	
  using	
  a	
  micro	
  benchmark	
  called	
  SOL	
  (an	
  example	
  in	
  the	
  GearPump	
  distro)	
  whose	
  topology	
  
is	
  quite	
  simple.	
  SOLStreamProducer	
  delivers	
  messages	
  to	
  SOLStreamProcessor	
  constantly	
  and	
  
SOLStreamProcessor	
  does	
  nothing.	
  We	
  set	
  up	
  a	
  4-­‐node	
  cluster	
  (each	
  node	
  was	
  an	
  Intel®	
  Xeon®	
  32-­‐
core	
  processor	
  E5-­‐2680	
  2.70GHz	
  with	
  128GB	
  memory)	
  and	
  a	
  10GbE	
  network.	
  	
  
Throughput	
  
Figure	
  18	
  shows	
  that	
  the	
  whole	
  throughput	
  of	
  the	
  cluster	
  can	
  reach	
  about	
  11	
  million	
  
messages/second	
  (100	
  bytes	
  per	
  message).	
  
Figure	
  18:	
  Performance	
  Evaluation,	
  Throughput,	
  and	
  Latency	
  
Latency	
  
When	
  we	
  transfer	
  messages	
  at	
  the	
  max	
  throughput	
  above,	
  the	
  average	
  latency	
  (Figure	
  19)	
  between	
  
two	
  tasks	
  is	
  17ms	
  with	
  a	
  standard	
  deviation	
  of	
  13ms.	
  
 
	
  
	
  
Figure	
  19:	
  Latency	
  between	
  Two	
  tasks(ms)	
  
Fault	
  Recovery	
  time	
  
When	
  corruption	
  is	
  detected—for	
  example,	
  the	
  Executor	
  is	
  down—GearPump	
  reallocates	
  the	
  
resource	
  and	
  restarts	
  the	
  application.	
  It	
  takes	
  about	
  10	
  seconds	
  to	
  recover	
  the	
  application.	
  
Future	
  Plan(s)	
  
We	
  are	
  still	
  working	
  on	
  transactional	
  support	
  and	
  dynamic	
  graph	
  support	
  for	
  our	
  next	
  release.	
  
Besides	
  these	
  two,	
  we	
  also	
  want	
  to	
  incorporate	
  these	
  features:	
  
l StreamSQL	
  	
  
Per	
  O'Reilly	
  Media	
  Strata’s	
  report,	
  Data	
  Science	
  Salary	
  Survey	
  in	
  2013,SQL	
  is	
  the	
  most	
  used	
  
data	
  tool	
  for	
  data	
  scientists.	
  StreamSQL	
  is	
  a	
  must-­‐have	
  feature.	
  We	
  want	
  to	
  support	
  translating	
  
a	
  SQL	
  statement	
  to	
  a	
  running	
  DAG,	
  and	
  supporting	
  stream	
  special	
  functions	
  like	
  windows	
  
operations.	
  
l Visualization	
  
Everything	
  is	
  moving	
  in	
  streaming	
  applications,	
  and	
  it	
  is	
  hard	
  to	
  know	
  when	
  unexpected	
  things	
  
happen,	
  so	
  visualization	
  is	
  extremely	
  important.	
  Visualization	
  will	
  give	
  us	
  insights	
  about	
  how	
  
the	
  computation	
  DAG	
  is	
  composed,	
  latency	
  and	
  throughput,	
  system	
  and	
  network	
  load	
  status,	
  
and	
  error	
  information.	
  We	
  have	
  preliminary	
  REST	
  support	
  that	
  emits	
  a	
  given	
  AppMasters	
  DAG	
  
in	
  JSON.	
  We’ll	
  likely	
  have	
  visualization	
  using	
  viz.js	
  in	
  the	
  next	
  release.	
  
l Data	
  skew	
  handling	
  with	
  Auto-­‐Split	
  
Data	
  skew	
  is	
  common	
  in	
  big	
  data,	
  and	
  it	
  highly	
  impacts	
  application	
  performance.	
  In	
  case	
  of	
  data	
  
skew,	
  some	
  tasks	
  may	
  be	
  too	
  busy,	
  while	
  the	
  others	
  are	
  free.	
  We	
  want	
  the	
  busy	
  task	
  to	
  be	
  able	
  
to	
  split	
  into	
  small	
  tasks	
  automatically	
  in	
  response	
  to	
  load	
  change.	
  	
  
Summary	
  
Akka	
  is	
  characterized	
  by	
  its	
  simplicity	
  and	
  elegance.	
  The	
  concepts	
  of	
  being	
  message	
  driven	
  and	
  
providing	
  computation	
  isolation	
  makes	
  Akka	
  a	
  natural	
  fit	
  for	
  streaming	
  frameworks.	
  Akka	
  provides	
  
 
	
  
a	
  solid	
  foundation	
  that	
  allows	
  developers	
  to	
  focus	
  on	
  the	
  data	
  logic	
  and	
  the	
  specific	
  requirements	
  of	
  
streaming.	
  GearPump	
  exploits	
  the	
  current	
  Akka	
  feature	
  set	
  and	
  is	
  small	
  and	
  nimble,	
  only	
  5000	
  lines	
  
of	
  code	
  in	
  total	
  yet	
  provides	
  compelling	
  streaming	
  features	
  including	
  scalability,	
  low	
  latency,	
  
resilience,	
  error	
  isolation,	
  and	
  high	
  availability.	
  Performance	
  is	
  not	
  traded	
  for	
  features:	
  11	
  million	
  
messages	
  per	
  second	
  is	
  a	
  strong	
  performance	
  metric.	
  Finally,	
  we	
  provide	
  a	
  growing	
  number	
  of	
  
innovations	
  including	
  code	
  provisioning	
  and	
  in-­‐flight	
  DAG	
  modification.	
  	
  The	
  platform	
  is	
  rapidly	
  
evolving	
  and	
  will	
  be	
  directed	
  towards	
  solving	
  modern	
  day	
  challenges	
  at	
  scale.	
  We	
  invite	
  those	
  
interested	
  to	
  explore	
  the	
  tutorial	
  at	
  https://github.com/intel-­‐hadoop/gearpump.	
  
Reference	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
1	
  Millwheel	
  http://research.google.com/pubs/pub41378.html	
  
2	
  Apache	
  Storm	
  http://storm.apache.org/	
  	
  
3	
  Spark	
  Streaming	
  https://spark.apache.org/streaming/	
  	
  
4	
  Apache	
  Samza	
  http://samza.incubator.apache.org/	
  
5	
  Apache	
  TEZ	
  http://zh.hortonworks.com/hadoop/tez/	
  
6	
  Hadoop	
  YARN	
  http://hadoop.apache.org/docs/current/hadoop-­‐yarn/hadoop-­‐yarn-­‐
site/YARN.html	
  
7	
  YARN	
  Architecture	
  Paper	
  Section	
  3	
  http://dl.acm.org/citation.cfm?id=2523633
8	
  Scala	
  class	
  implicits	
  https://www.google.com/search?q=scala+pimp+my+library	
  
9	
  Akka	
  Data	
  replication	
  library	
  https://github.com/patriknw/akka-­‐data-­‐replication	
  
10	
  A	
  comprehensive	
  study	
  of	
  Convergent	
  and	
  Commutative	
  Replicated	
  Data	
  Types	
  	
  
https://hal.archives-­‐ouvertes.fr/file/index/docid/555588/filename/techreport.pdf	
  
	
  
Notices	
  
	
  
INFORMATION	
  IN	
  THIS	
  DOCUMENT	
  IS	
  PROVIDED	
  IN	
  CONNECTION	
  WITH	
  INTEL	
  PRODUCTS.	
  NO	
  LICENSE,	
  
EXPRESS	
  OR	
  IMPLIED,	
  BY	
  ESTOPPEL	
  OR	
  OTHERWISE,	
  TO	
  ANY	
  INTELLECTUAL	
  PROPERTY	
  RIGHTS	
  IS	
  
GRANTED	
  BY	
  THIS	
  DOCUMENT.	
  EXCEPT	
  AS	
  PROVIDED	
  IN	
  INTEL'S	
  TERMS	
  AND	
  CONDITIONS	
  OF	
  SALE	
  FOR	
  
SUCH	
  PRODUCTS,	
  INTEL	
  ASSUMES	
  NO	
  LIABILITY	
  WHATSOEVER	
  AND	
  INTEL	
  DISCLAIMS	
  ANY	
  EXPRESS	
  OR	
  
IMPLIED	
  WARRANTY,	
  RELATING	
  TO	
  SALE	
  AND/OR	
  USE	
  OF	
  INTEL	
  PRODUCTS	
  INCLUDING	
  LIABILITY	
  OR	
  
WARRANTIES	
  RELATING	
  TO	
  FITNESS	
  FOR	
  A	
  PARTICULAR	
  PURPOSE,	
  MERCHANTABILITY,	
  OR	
  
INFRINGEMENT	
  OF	
  ANY	
  PATENT,	
  COPYRIGHT	
  OR	
  OTHER	
  INTELLECTUAL	
  PROPERTY	
  RIGHT.	
  
	
  
UNLESS	
  OTHERWISE	
  AGREED	
  IN	
  WRITING	
  BY	
  INTEL,	
  THE	
  INTEL	
  PRODUCTS	
  ARE	
  NOT	
  DESIGNED	
  NOR	
  
INTENDED	
  FOR	
  ANY	
  APPLICATION	
  IN	
  WHICH	
  THE	
  FAILURE	
  OF	
  THE	
  INTEL	
  PRODUCT	
  COULD	
  CREATE	
  A	
  
SITUATION	
  WHERE	
  PERSONAL	
  INJURY	
  OR	
  DEATH	
  MAY	
  OCCUR.	
  
	
  
Intel	
  may	
  make	
  changes	
  to	
  specifications	
  and	
  product	
  descriptions	
  at	
  any	
  time,	
  without	
  notice.	
  Designers	
  
must	
  not	
  rely	
  on	
  the	
  absence	
  or	
  characteristics	
  of	
  any	
  features	
  or	
  instructions	
  marked	
  "reserved"	
  or	
  
"undefined."	
  Intel	
  reserves	
  these	
  for	
  future	
  definition	
  and	
  shall	
  have	
  no	
  responsibility	
  whatsoever	
  for	
  
conflicts	
  or	
  incompatibilities	
  arising	
  from	
  future	
  changes	
  to	
  them.	
  The	
  information	
  here	
  is	
  subject	
  to	
  change	
  
without	
  notice.	
  Do	
  not	
  finalize	
  a	
  design	
  with	
  this	
  information.	
  	
  
	
  
The	
  products	
  described	
  in	
  this	
  document	
  may	
  contain	
  design	
  defects	
  or	
  errors	
  known	
  as	
  errata	
  which	
  may	
  
	
  
 
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
cause	
  the	
  product	
  to	
  deviate	
  from	
  published	
  specifications.	
  Current	
  characterized	
  errata	
  are	
  available	
  on	
  
request.	
  	
  
	
  
Contact	
  your	
  local	
  Intel	
  sales	
  office	
  or	
  your	
  distributor	
  to	
  obtain	
  the	
  latest	
  specifications	
  and	
  before	
  placing	
  
your	
  product	
  order.	
  	
  
	
  
Copies	
  of	
  documents	
  which	
  have	
  an	
  order	
  number	
  and	
  are	
  referenced	
  in	
  this	
  document,	
  or	
  other	
  Intel	
  
literature,	
  may	
  be	
  obtained	
  by	
  calling	
  1-­‐800-­‐548-­‐4725,	
  or	
  go	
  to:	
  http://www.intel.com/design/literature.htm	
  
	
  
Software	
  and	
  workloads	
  used	
  in	
  performance	
  tests	
  may	
  have	
  been	
  optimized	
  for	
  performance	
  only	
  on	
  Intel	
  
microprocessors.	
  Performance	
  tests,	
  such	
  as	
  SYSmark*	
  and	
  MobileMark*,	
  are	
  measured	
  using	
  specific	
  
computer	
  systems,	
  components,	
  software,	
  operations,	
  and	
  functions.	
  Any	
  change	
  to	
  any	
  of	
  those	
  factors	
  may	
  
cause	
  the	
  results	
  to	
  vary.	
  You	
  should	
  consult	
  other	
  information	
  and	
  performance	
  tests	
  to	
  assist	
  you	
  in	
  fully	
  
evaluating	
  your	
  contemplated	
  purchases,	
  including	
  the	
  performance	
  of	
  that	
  product	
  when	
  combined	
  with	
  
other	
  products.	
  
	
  
Any	
  software	
  source	
  code	
  reprinted	
  in	
  this	
  document	
  is	
  furnished	
  under	
  a	
  software	
  license	
  and	
  may	
  only	
  be	
  
used	
  or	
  copied	
  in	
  accordance	
  with	
  the	
  terms	
  of	
  that	
  license.	
  
	
  
Intel,	
  the	
  Intel	
  logo,	
  and	
  Intel	
  Xeon	
  are	
  trademarks	
  of	
  Intel	
  Corporation	
  in	
  the	
  U.S.	
  and/or	
  other	
  countries.	
  
	
  
Copyright	
  ©	
  2014	
  Intel	
  Corporation.	
  All	
  rights	
  reserved.	
  
	
  
*Other	
  names	
  and	
  brands	
  may	
  be	
  claimed	
  as	
  the	
  property	
  of	
  others.	
  
	
  

More Related Content

What's hot

AWS for HPC in Drug Discovery
AWS for HPC in Drug DiscoveryAWS for HPC in Drug Discovery
AWS for HPC in Drug Discovery
Amazon Web Services
 
HPC in the Cloud
HPC in the CloudHPC in the Cloud
HPC in the Cloud
Amazon Web Services
 
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
Amazon Web Services
 
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
confluent
 
Machine learning in the physical world by Kip Larson from AWS IoT
Machine learning in the physical world by  Kip Larson from AWS IoTMachine learning in the physical world by  Kip Larson from AWS IoT
Machine learning in the physical world by Kip Larson from AWS IoT
Bill Liu
 
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
StreamNative
 
Intro to High Performance Computing in the AWS Cloud
Intro to High Performance Computing in the AWS CloudIntro to High Performance Computing in the AWS Cloud
Intro to High Performance Computing in the AWS Cloud
Amazon Web Services
 
(CMP202) Engineering Simulation and Analysis in the Cloud
(CMP202) Engineering Simulation and Analysis in the Cloud(CMP202) Engineering Simulation and Analysis in the Cloud
(CMP202) Engineering Simulation and Analysis in the Cloud
Amazon Web Services
 
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
confluent
 
Apache Kafka® and Analytics in a Connected IoT World
Apache Kafka® and Analytics in a Connected IoT WorldApache Kafka® and Analytics in a Connected IoT World
Apache Kafka® and Analytics in a Connected IoT World
confluent
 
Serverless Streaming Architectures and Algorithms for the Enterprise
Serverless Streaming Architectures and Algorithms for the EnterpriseServerless Streaming Architectures and Algorithms for the Enterprise
Serverless Streaming Architectures and Algorithms for the Enterprise
Arun Kejariwal
 
Machine learning at scale by Amy Unruh from Google
Machine learning at scale by  Amy Unruh from GoogleMachine learning at scale by  Amy Unruh from Google
Machine learning at scale by Amy Unruh from Google
Bill Liu
 
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
Databricks
 
HPC in AWS - Technical Workshop
HPC in AWS - Technical WorkshopHPC in AWS - Technical Workshop
HPC in AWS - Technical Workshop
Alex Barbosa Coqueiro
 
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
HostedbyConfluent
 
Architecting Microservices Applications with Instant Analytics
Architecting Microservices Applications with Instant AnalyticsArchitecting Microservices Applications with Instant Analytics
Architecting Microservices Applications with Instant Analytics
confluent
 
AWS Cloud for HPC and Big Data
AWS Cloud for HPC and Big DataAWS Cloud for HPC and Big Data
AWS Cloud for HPC and Big Data
inside-BigData.com
 
HPC on AWS
HPC on AWSHPC on AWS
Auto-Train a Time-Series Forecast Model With AML + ADB
Auto-Train a Time-Series Forecast Model With AML + ADBAuto-Train a Time-Series Forecast Model With AML + ADB
Auto-Train a Time-Series Forecast Model With AML + ADB
Databricks
 
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
Kai Wähner
 

What's hot (20)

AWS for HPC in Drug Discovery
AWS for HPC in Drug DiscoveryAWS for HPC in Drug Discovery
AWS for HPC in Drug Discovery
 
HPC in the Cloud
HPC in the CloudHPC in the Cloud
HPC in the Cloud
 
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
(BDT201) Big Data and HPC State of the Union | AWS re:Invent 2014
 
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
The Art of The Event Streaming Application: Streams, Stream Processors and Sc...
 
Machine learning in the physical world by Kip Larson from AWS IoT
Machine learning in the physical world by  Kip Larson from AWS IoTMachine learning in the physical world by  Kip Larson from AWS IoT
Machine learning in the physical world by Kip Larson from AWS IoT
 
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
Ten reasons to choose Apache Pulsar over Apache Kafka for Event Sourcing_Robe...
 
Intro to High Performance Computing in the AWS Cloud
Intro to High Performance Computing in the AWS CloudIntro to High Performance Computing in the AWS Cloud
Intro to High Performance Computing in the AWS Cloud
 
(CMP202) Engineering Simulation and Analysis in the Cloud
(CMP202) Engineering Simulation and Analysis in the Cloud(CMP202) Engineering Simulation and Analysis in the Cloud
(CMP202) Engineering Simulation and Analysis in the Cloud
 
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
Neha Narkhede | Kafka Summit London 2019 Keynote | Event Streaming: Our Cloud...
 
Apache Kafka® and Analytics in a Connected IoT World
Apache Kafka® and Analytics in a Connected IoT WorldApache Kafka® and Analytics in a Connected IoT World
Apache Kafka® and Analytics in a Connected IoT World
 
Serverless Streaming Architectures and Algorithms for the Enterprise
Serverless Streaming Architectures and Algorithms for the EnterpriseServerless Streaming Architectures and Algorithms for the Enterprise
Serverless Streaming Architectures and Algorithms for the Enterprise
 
Machine learning at scale by Amy Unruh from Google
Machine learning at scale by  Amy Unruh from GoogleMachine learning at scale by  Amy Unruh from Google
Machine learning at scale by Amy Unruh from Google
 
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
Lessons Learned Replatforming A Large Machine Learning Application To Apache ...
 
HPC in AWS - Technical Workshop
HPC in AWS - Technical WorkshopHPC in AWS - Technical Workshop
HPC in AWS - Technical Workshop
 
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
Intelligent Auto-scaling of Kafka Consumers with Workload Prediction | Ming S...
 
Architecting Microservices Applications with Instant Analytics
Architecting Microservices Applications with Instant AnalyticsArchitecting Microservices Applications with Instant Analytics
Architecting Microservices Applications with Instant Analytics
 
AWS Cloud for HPC and Big Data
AWS Cloud for HPC and Big DataAWS Cloud for HPC and Big Data
AWS Cloud for HPC and Big Data
 
HPC on AWS
HPC on AWSHPC on AWS
HPC on AWS
 
Auto-Train a Time-Series Forecast Model With AML + ADB
Auto-Train a Time-Series Forecast Model With AML + ADBAuto-Train a Time-Series Forecast Model With AML + ADB
Auto-Train a Time-Series Forecast Model With AML + ADB
 
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
IoT Sensor Analytics with Python, Jupyter, TensorFlow, Keras, Apache Kafka, K...
 

Viewers also liked

CV-Latest_c_det
CV-Latest_c_detCV-Latest_c_det
CV-Latest_c_det
Bruce Roshanravan
 
Sulle mura di verona 2
Sulle mura di verona 2Sulle mura di verona 2
Sulle mura di verona 2
Erina Signorini
 
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
SVN International Corp.
 
The World Bank LEM Spring 2015
The World Bank LEM Spring 2015The World Bank LEM Spring 2015
The World Bank LEM Spring 2015
Samer Matta
 
Díptico Zafra. Telegrafía en España
Díptico Zafra. Telegrafía en EspañaDíptico Zafra. Telegrafía en España
Díptico Zafra. Telegrafía en España
victoriacrespog
 
Examensarbete
ExamensarbeteExamensarbete
Examensarbete
Philip Engstr
 
AreastudioArsenalePC
AreastudioArsenalePCAreastudioArsenalePC
AreastudioArsenalePCfelicitaforte
 
J4932 Resilient livelihoods framework AW-web
J4932 Resilient livelihoods framework AW-webJ4932 Resilient livelihoods framework AW-web
J4932 Resilient livelihoods framework AW-web
simone di vicenz
 
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
Julián Marquina
 
Lap supervisi bsc sman 2 smg
Lap supervisi bsc sman 2 smg Lap supervisi bsc sman 2 smg
Lap supervisi bsc sman 2 smg
Muhammad Rozi
 
TEORIA LITERARIA
TEORIA LITERARIATEORIA LITERARIA
TEORIA LITERARIA
Rosiris Dilson
 

Viewers also liked (12)

CV-Latest_c_det
CV-Latest_c_detCV-Latest_c_det
CV-Latest_c_det
 
Sulle mura di verona 2
Sulle mura di verona 2Sulle mura di verona 2
Sulle mura di verona 2
 
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
Sperry Van Ness #CRE National Sales Meeting MMC 11/09/2015
 
The World Bank LEM Spring 2015
The World Bank LEM Spring 2015The World Bank LEM Spring 2015
The World Bank LEM Spring 2015
 
Díptico Zafra. Telegrafía en España
Díptico Zafra. Telegrafía en EspañaDíptico Zafra. Telegrafía en España
Díptico Zafra. Telegrafía en España
 
Examensarbete
ExamensarbeteExamensarbete
Examensarbete
 
AreastudioArsenalePC
AreastudioArsenalePCAreastudioArsenalePC
AreastudioArsenalePC
 
J4932 Resilient livelihoods framework AW-web
J4932 Resilient livelihoods framework AW-webJ4932 Resilient livelihoods framework AW-web
J4932 Resilient livelihoods framework AW-web
 
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
Las redes sociales y el mundo de los archivos: girando alrededor de la 2.0
 
Lap supervisi bsc sman 2 smg
Lap supervisi bsc sman 2 smg Lap supervisi bsc sman 2 smg
Lap supervisi bsc sman 2 smg
 
111011 jlpt n2_presen
111011 jlpt n2_presen111011 jlpt n2_presen
111011 jlpt n2_presen
 
TEORIA LITERARIA
TEORIA LITERARIATEORIA LITERARIA
TEORIA LITERARIA
 

Similar to Gearpump design doc

Apache Kafka® + Machine Learning for Supply Chain 
Apache Kafka® + Machine Learning for Supply Chain Apache Kafka® + Machine Learning for Supply Chain 
Apache Kafka® + Machine Learning for Supply Chain 
confluent
 
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
Kai Wähner
 
Cisco project ideas
Cisco   project ideasCisco   project ideas
Cisco project ideas
VIT University
 
Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge Continuum
Jonas Bonér
 
ALT-F1.BE : The Accelerator (Google Cloud Platform)
ALT-F1.BE : The Accelerator (Google Cloud Platform)ALT-F1.BE : The Accelerator (Google Cloud Platform)
ALT-F1.BE : The Accelerator (Google Cloud Platform)
Abdelkrim Boujraf
 
Introduction to Amazon EC2 F1 Instances
Introduction to Amazon EC2 F1 Instances Introduction to Amazon EC2 F1 Instances
Introduction to Amazon EC2 F1 Instances
Amazon Web Services
 
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
Markus Klems
 
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
kreuzwerker GmbH
 
Cloud Computing Technology
Cloud Computing TechnologyCloud Computing Technology
Cloud Computing Technology
Ahmed Al Salih
 
Building Modern Applications on AWS.pptx
Building Modern Applications on AWS.pptxBuilding Modern Applications on AWS.pptx
Building Modern Applications on AWS.pptx
Nelson Kimathi
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
confluent
 
Cloud Computing ...changes everything
Cloud Computing ...changes everythingCloud Computing ...changes everything
Cloud Computing ...changes everything
Lew Tucker
 
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
homeworkping3
 
All you need to know about yelowsofts new version update
All you need to know about yelowsofts new version updateAll you need to know about yelowsofts new version update
All you need to know about yelowsofts new version update
Yelowsoft
 
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
Amazon Web Services
 
Scalable AutoML for Time Series Forecasting using Ray
Scalable AutoML for Time Series Forecasting using RayScalable AutoML for Time Series Forecasting using Ray
Scalable AutoML for Time Series Forecasting using Ray
Databricks
 
Splunk App for Stream
Splunk App for StreamSplunk App for Stream
Splunk App for Stream
Splunk
 
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache QuarkusData Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
Data Con LA
 
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 SRV205 Architectures and Strategies for Building Modern Applications on AWS SRV205 Architectures and Strategies for Building Modern Applications on AWS
SRV205 Architectures and Strategies for Building Modern Applications on AWS
Amazon Web Services
 
Monitoring IAAS & PAAS Solutions
Monitoring IAAS & PAAS SolutionsMonitoring IAAS & PAAS Solutions
Monitoring IAAS & PAAS Solutions
Colloquium
 

Similar to Gearpump design doc (20)

Apache Kafka® + Machine Learning for Supply Chain 
Apache Kafka® + Machine Learning for Supply Chain Apache Kafka® + Machine Learning for Supply Chain 
Apache Kafka® + Machine Learning for Supply Chain 
 
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
IIoT with Kafka and Machine Learning for Supply Chain Optimization In Real Ti...
 
Cisco project ideas
Cisco   project ideasCisco   project ideas
Cisco project ideas
 
Kalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge ContinuumKalix: Tackling the The Cloud to Edge Continuum
Kalix: Tackling the The Cloud to Edge Continuum
 
ALT-F1.BE : The Accelerator (Google Cloud Platform)
ALT-F1.BE : The Accelerator (Google Cloud Platform)ALT-F1.BE : The Accelerator (Google Cloud Platform)
ALT-F1.BE : The Accelerator (Google Cloud Platform)
 
Introduction to Amazon EC2 F1 Instances
Introduction to Amazon EC2 F1 Instances Introduction to Amazon EC2 F1 Instances
Introduction to Amazon EC2 F1 Instances
 
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
Do Clouds Compute? A Framework for Estimating the Value of Cloud Computing.
 
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
kreuzwerker AWS Modernizing Legacy Operations with Containerized Solutions 20...
 
Cloud Computing Technology
Cloud Computing TechnologyCloud Computing Technology
Cloud Computing Technology
 
Building Modern Applications on AWS.pptx
Building Modern Applications on AWS.pptxBuilding Modern Applications on AWS.pptx
Building Modern Applications on AWS.pptx
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
 
Cloud Computing ...changes everything
Cloud Computing ...changes everythingCloud Computing ...changes everything
Cloud Computing ...changes everything
 
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
58961174 case-study-on-sql-server-high-availability-and-disaster-recovery
 
All you need to know about yelowsofts new version update
All you need to know about yelowsofts new version updateAll you need to know about yelowsofts new version update
All you need to know about yelowsofts new version update
 
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
Architecting for Real-Time Insights with Amazon Kinesis (ANT310) - AWS re:Inv...
 
Scalable AutoML for Time Series Forecasting using Ray
Scalable AutoML for Time Series Forecasting using RayScalable AutoML for Time Series Forecasting using Ray
Scalable AutoML for Time Series Forecasting using Ray
 
Splunk App for Stream
Splunk App for StreamSplunk App for Stream
Splunk App for Stream
 
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache QuarkusData Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
Data Con LA 2022 - Event Sourcing with Apache Pulsar and Apache Quarkus
 
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 SRV205 Architectures and Strategies for Building Modern Applications on AWS SRV205 Architectures and Strategies for Building Modern Applications on AWS
SRV205 Architectures and Strategies for Building Modern Applications on AWS
 
Monitoring IAAS & PAAS Solutions
Monitoring IAAS & PAAS SolutionsMonitoring IAAS & PAAS Solutions
Monitoring IAAS & PAAS Solutions
 

Recently uploaded

Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Brad Spiegel Macon GA
 
[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024
hackersuli
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
fovkoyb
 
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
zyfovom
 
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdfMeet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
Florence Consulting
 
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
CIOWomenMagazine
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
ysasp1
 
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
cuobya
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
uehowe
 
Search Result Showing My Post is Now Buried
Search Result Showing My Post is Now BuriedSearch Result Showing My Post is Now Buried
Search Result Showing My Post is Now Buried
Trish Parr
 
Gen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needsGen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needs
Laura Szabó
 
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
eutxy
 
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
cuobya
 
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
ukwwuq
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
keoku
 
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
vmemo1
 
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
zoowe
 
Explore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories SecretlyExplore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories Secretly
Trending Blogers
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
Toptal Tech
 
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmanuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
wolfsoftcompanyco
 

Recently uploaded (20)

Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptxBridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
Bridging the Digital Gap Brad Spiegel Macon, GA Initiative.pptx
 
[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024[HUN][hackersuli] Red Teaming alapok 2024
[HUN][hackersuli] Red Teaming alapok 2024
 
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
存档可查的(USC毕业证)南加利福尼亚大学毕业证成绩单制做办理
 
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
学位认证网(DU毕业证)迪肯大学毕业证成绩单一比一原版制作
 
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdfMeet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
Meet up Milano 14 _ Axpo Italia_ Migration from Mule3 (On-prem) to.pdf
 
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
Internet of Things in Manufacturing: Revolutionizing Efficiency & Quality | C...
 
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
成绩单ps(UST毕业证)圣托马斯大学毕业证成绩单快速办理
 
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
制作毕业证书(ANU毕业证)莫纳什大学毕业证成绩单官方原版办理
 
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
留学挂科(UofM毕业证)明尼苏达大学毕业证成绩单复刻办理
 
Search Result Showing My Post is Now Buried
Search Result Showing My Post is Now BuriedSearch Result Showing My Post is Now Buried
Search Result Showing My Post is Now Buried
 
Gen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needsGen Z and the marketplaces - let's translate their needs
Gen Z and the marketplaces - let's translate their needs
 
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
一比一原版(LBS毕业证)伦敦商学院毕业证成绩单专业办理
 
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
可查真实(Monash毕业证)西澳大学毕业证成绩单退学买
 
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
制作原版1:1(Monash毕业证)莫纳什大学毕业证成绩单办理假
 
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
一比一原版(SLU毕业证)圣路易斯大学毕业证成绩单专业办理
 
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
重新申请毕业证书(RMIT毕业证)皇家墨尔本理工大学毕业证成绩单精仿办理
 
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
国外证书(Lincoln毕业证)新西兰林肯大学毕业证成绩单不能毕业办理
 
Explore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories SecretlyExplore-Insanony: Watch Instagram Stories Secretly
Explore-Insanony: Watch Instagram Stories Secretly
 
Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!Ready to Unlock the Power of Blockchain!
Ready to Unlock the Power of Blockchain!
 
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalmanuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
manuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal
 

Gearpump design doc

  • 1.     GearPump  –  Real-­‐time  Streaming  Engine   Using  Akka*       Sean  Zhong,  Kam  Kasravi,  Huafeng  Wang,  Manu  Zhang,  Weihua  Jiang   {xiang.zhong,  kam.d.kasravi,  huafeng.wang,  tianlun.zhang,  weihua.jiang}@intel.com   Intel  Big  Data  Technology  Team   Dec.  2014                                      
  • 2.         About  GearPump…………………………………………………………………………………………………………………….3   Motive  .........................................................................................................................................................................................  3   Example  .....................................................................................................................................................................................  4   Overview  ...................................................................................................................................................................................  5   Implementation  .....................................................................................................................................................................  7   DAG  API  ................................................................................................................................................................................  7   Application  Submission  .................................................................................................................................................  8   Remote  Actor  Code  Provisioning  ...............................................................................................................................  8   High  performance  Message  passing  .........................................................................................................................  9   Flow  Control  ....................................................................................................................................................................  10   Message  Loss  Detection  ..............................................................................................................................................  11   Stream  Replay  .................................................................................................................................................................  11   Master  High  Availability  .............................................................................................................................................  12   Global  Clock  Service  .....................................................................................................................................................  13   Fault  Tolerant  and  At-­‐Least-­‐Once  Message  Delivery  .....................................................................................  13   Exactly  Once  Message  Delivery  (ongoing)  .........................................................................................................  14   Dynamic  Graph  (ongoing)  .........................................................................................................................................  17   Observations  on  Akka  ......................................................................................................................................................  17   Experiment  Results  ...........................................................................................................................................................  18   Throughput  ......................................................................................................................................................................  18   Latency  ...............................................................................................................................................................................  18   Fault  Recovery  time  .....................................................................................................................................................  19   Future  Plan(s)  ......................................................................................................................................................................  19   Summary  ................................................................................................................................................................................  19  
  • 4.     About  GearPump   GearPump  (https://github.com/intel-­‐hadoop/gearpump)  is  a  lightweight,  real-­‐time,  big  data   streaming  engine.  It  is  inspired  by  recent  advances  with  Akka  and  a  desire  to  improve  on  existing   streaming  frameworks.  GearPump  draws  from  a  number  of  existing  frameworks  including   MillWheel1,  Apache  Storm2,  Spark  Streaming3,  Apache  Samza4,  Apache  Tez5,  and  Hadoop  YARN6   while  leveraging  Actors  throughout  its  architecture.       The  name  GearPump  is  a  reference  to  the  engineering  term  “gear  pump,”  which  is  a  super  simple   pump  that  consists  of  only  two  gears,  but  is  very  powerful  at  streaming  water.     In  this  article,  we  will  present  how  we’ve  leveraged  Akka  to  build  this  engine.   Motive   Today’s  big  data  streaming  frameworks  are  in  high  demand  to  process  immense  amounts  of  data   from  a  rapidly  growing  set  of  disparate  data  sources.  Beyond  the  requirements  of  fault  tolerance,   persistence  and  scalability,  streaming  engines  need  to  provide  a  programming  model  where   computations  can  be  easily  expressed  and  deployed  in  a  distributed  manner.  GearPump  meets  this   objective  while  differentiating  itself  from  other  streaming  engines  by  elevating  and  promoting  the   Actor  Model  as  the  primary  entity  permeating  the  framework.  What  we  set  out  to  build  is  a  simple   and  powerful  streaming  framework.  The  Scala  language  and  Akka  offer  a  higher  level  of  abstraction   allowing  frameworks  to  focus  more  on  the  application  and  make  the  engine  more  lightweight.   We’ve  adhered  to  several  basic  principles:   l Message-­‐driven   architecture   is   the   right   choice   for   real-­‐time   streaming.   Real-­‐time   applications   need   to   respond   to   messages   immediately.   Akka   gives   us   all   the   facilities   and   building  blocks  for  message-­‐driven  architecture;  it  simplifies  the  design  and  coding  and  allows   code  to  evolve  more  quickly.     l Actor   is   the   right   level   of   concurrency.  It  can  give  us  better  performance  to  scale  up  and   scale  out.  We  have  seen  other  big  data  engines  using  process,  thread,  or  self-­‐managed  thread   pools   to   parallelize.   Actors   are   much   more   lightweight.   Moreover,   they   have   many   optimizations  related  to  concurrency;  Actor  execution  can  be  swapped  in  and  out  efficiently   with  respect  to  fairness  and  performance.     l The  flexibility  of  the  Actor  Model  imbues  streaming  with  some  unique  abilities.  To  see  an   example  of  this,  let’s  take  a  look  at  a  video  streaming  problem  in  the  next  section.   Example   Suppose  we  are  using  streaming  to  solve  a  public  security  problem:  we  want  to  find  and  track  a   crime  suspect’s  location  by  correlating  all  video  data  from  HD  cameras  across  the  city.  This  requires   processing  raw  video  data  in  order  to  run  face  recognition  algorithms  on  this  data,  but  we  cannot  
  • 5.     afford  to  pass  ALL  data  back  to  the  data  center  as  the  bandwidth  is  limited.  Figure  1  shows  how   GearPump  approaches  this  problem:     Figure  1:  Video  Stream  Processing,  and  Dynamic  Graph   1. Cameras  pass  coarse-­‐grained  feature  data  to  the  backend  data  center.  Raw  video  data  cannot  be   transferred  because  bandwidth  usage  is  limited.     2. The  backend  correlates  some  of  the  data  with  nearby  cameras  and  identifies  a  potential  suspect.   This  requires  additional  examination  of  all  related  video  frames  for  this  target.   3. A  task  is  dynamically  delegated  to  one  or  more  edge  devices  to  gather  the  raw  video  data  and   send  it  back.  The  backend  then  runs  face  recognition  algorithms  on  this  data  and  passes  results   downstream.         The  interesting  part  of  the  use  case  is  step  3,  where  new  processing  directives  are  dynamically   deployed  to  specific  edge  devices  in  order  to  allow  subsequent  ingestion  and  analysis.  If  we   generalize  this  capability,  we  can  transform  a  DAG  at  runtime  where  relevant  computation  can   be  deployed  beyond  the  boundary  of  the  data  center.  The  location  transparency  of  the  Actor   Model  makes  this  possible.   Overview   In  this  section  we  describe  how  we  model  streaming  within  the  Actor  Model  (Figure  2).  Note  there   is  an  obvious  parallelism  to  YARN;  however,  our  model  is  concentric  to  the  application—something   YARN  architects  explicitly  delegate  to  “a  host  of  framework  implementations7.”  Integration  with   YARN  is  on  our  roadmap  and  will  pair  a  compelling  application  streaming  architecture  with  YARN’s   broadly  recognized  de-­‐facto  resource  management  architecture.  
  • 6.       Figure  2:  GearPump  Actor  Hierarchy   Everything  in  the  diagram  is  an  actor.  The  actors  fall  into  two  categories,  Cluster  and  Application   Actors.     Cluster  Actors   l Worker:  Maps  to  a  physical  worker  machine.  It  is  responsible  for  managing  resources  and   reporting  metrics  on  that  machine.   l Master:  Heart  of  the  cluster,  which  manages  workers,  resources,  and  applications.  The  main   function  is  delegated  to  three  child  actors:  App  Manager,  Worker  Manager,  and  Resource   Scheduler.     Application  Actors   l AppMaster:  Responsible  for  scheduling  the  tasks  to  workers  and  managing  the  state  of  the   application.  Different  applications  have  different  AppMaster  instances  and  are  isolated.     l Executor:  Child  of  AppMaster,  represents  a  JVM  process.  Its  job  is  to  manage  the  lifecycle  of   tasks  and  recover  them  in  case  of  failure.     l Task:  Child  of  Executor,  does  the  real  job.  Every  task  actor  has  a  global  unique  address.  One   task  actor  can  send  data  to  any  other  task  actors.  This  gives  us  great  flexibility  of  how  the   computation  DAG  is  distributed.   All  actors  in  the  graph  are  woven  together  with  actor  supervision;  actor  watching  and  all  errors  are   handled  properly  via  supervisors.  In  a  master,  a  risky  job  is  isolated  and  delegated  to  child  actors,  
  • 7.     so  it’s  more  robust.  In  the  application,  an  extra  intermediate  layer,  “Executor,”  is  created  so  that  we   can  do  fine-­‐grained  and  fast  recovery  in  case  of  task  failure.  A  Master  watches  the  lifecycle  of   AppMaster  and  Worker  to  handle  the  failures,  but  the  lifecycle  of  Worker  and  AppMaster  are  not   bound  to  a  Master  Actor  by  supervision,  so  that  Master  node  can  fail  independently.    Several  Master   Actors  form  an  Akka  cluster,  the  Master  state  is  exchanged  using  the  Gossip  protocol  in  a  conflict-­‐ free  consistent  way  so  that  there  is  no  single  point  of  failure.  With  this  hierarchy  design,  we  are  able   to  achieve  high  availability.     Implementation   DAG  API   As  Figure  3  shows,  an  application  is  a  DAG  of  processors.  Each  processor  handles  messages.       Figure  3:  Processor  DAG   At  runtime,  each  processor  can  be  parallelized  to  a  list  of  tasks;  each  task  is  an  actor  within  the  data   pipeline.  Data  is  passed  between  tasks.  The  Partitioner  (Figure  4)  defines  how  data  is  transferred.     Figure  4:  Task  Data  Shuffling   We  have  an  easy  syntax  to  express  the  computation.  To  represent  the  DAG  above,  we  define  the   computation  as:   Graph(A~>B~>C~>D,  A~>  C,  B~>E~>D)   A~>B~>C~>D  is  a  Path  of  Processors,  and  Graph  is  composed  of  this  Path  list.  This  representation   should  be  cleaner  than  that  of  vertex  and  edge  set.  A  high-­‐level  domain  specific  language  (DSL)  
  • 8.     using  combinators  like  flatmap  will  be  defined  on  top  of  this.  Our  aim  is  to  extend  the  existing  Scala   collections  framework…  likely  by  pimping8.   Application  Submission   In  GearPump,  each  application  consists  of  an  AppMaster  and  a  set  of  Executors,  and  each  one  is  a   standalone  JVM.  Thus,  an  application  is  isolated  from  other  applications  by  JVM  isolation.     Figure  5:  User  Submit  Application   To  submit  an  application  (Figure  5),  a  GearPump  client specifies a computation defined within a DAG and submits this to an active master. The SubmitApplication message is sent to the Master, which then forwards it to an AppManager.   Figure  6:  Launch  Executors  and  Tasks The  AppManager  locates  an  available  worker  and  launches  an  AppMaster  in  a  sub-­‐process  JVM  of   the  worker.  As  shown  in  Figure  6,  the  AppMaster  then  negotiates  with  the  Master  for  resource   allocation  in  order  to  distribute  the  DAG  as  defined  within  the  application.  The  allocated  workers   then  launch  Executors  (new  JVMs)  and  subsequently  start  Tasks.   Remote  Actor  Code  Provisioning   Akka  currently  does  not  support  remote  code  provisioning.  That  is,  instantiating  an  actor  on  a   remote  node  assumes  this  actor  class  and  related  dependencies  are  already  available  and  accessible   by  the  JVM’s  system  class  loader.  GearPump  provides  several  mechanisms  that  allow  new  resources   to  be  loaded  at  a  remote  node  site.  This  is  a  prerequisite  to  enabling  run-­‐time  DAG  modification  
  • 9.     since  you  cannot  assume  new  DAG  sub-­‐graphs  have  the  requisite  resources  on  the  remote  node.  As   noted  above,  when  a  worker  launches  an  executor,  the  worker  may  modify  the  executor’s  classpath   in  several  specific  ways.  First,  it  looks  for  any  serialized  jar  sent  as  part  of  the  application  definition.   If  one  exists,  the  worker  saves  this  locally  and  appends  the  jar  name  to  the  executor’s  classpath.   Second,  the  worker  looks  at  the  configuration  settings  also  included  as  part  of  an  application   definition  that  may  define  an  extra  classpath  for  the  executor.  In  this  latter  scenario  resources  are   resident  on  the  remote  node  but  need  to  be  appended  to  the  executor’s  classpath.  For  example,  an   AppMaster  and  its  task  actors  may  need  to  access  various  Hadoop  components  during  runtime  that   have  already  been  preinstalled  on  the  worker’s  machine. High  performance  Message  passing   For  streaming  applications,  message-­‐passing  performance  is  extremely  important.  For  example,   one  streaming  platform  may  need  to  process  millions  of  messages  per  second  with  millisecond  level   latency.  High  throughput  and  low  latency  are  not  that  easy  to  achieve.  There  are  a  number  of   challenges:   1. First  Challenge:  Network  is  not  efficient  for  small  messages   In  streaming,  typical  message  size  is  very  small,  usually  less  than  100  bytes  per  message,  like  the   floating  car  GPS  data.  But  network  efficiency  is  very  bad  when  transferring  small  messages.  As  you   can  see  in  Figure  7,  when  message  size  is  50  bytes,  it  can  only  use  20%  bandwidth.  How  to  improve   the  throughput?     Figure  7:  Messaging  Throughput  vs  Message  Size   2. Second  Challenge:  Message  overhead  is  too  big   Each  message  sent  between  two  actors  contains  sender  and  receiver  actor  paths.  When  sending   over  the  wire,  the  overhead  of  this  ActorPath  is  not  trivial.  For  example,  the  actor  path  below  takes   more  than  200  bytes.     akka.tcp://system1@192.168.1.53:51582/remote/akka.tcp/2120193a-e10b-474e-bccb- 8ebc4b3a0247@192.168.1.53:48948/remote/akka.tcp/system2@192.168.1.54:43676/user/master /Worker1/app_0_executor_0/group_1_task_0#-768886794
  • 10.     How  do  we  solve  these  challenges?   We’ve  implemented  a  custom  Netty  transportation  layer  with  Akka  extension.  In  Figure  8,  Netty   Client  translates  ActorPath  to  TaskId,  and  Netty  Server  translates  it  back.  Only  TaskId  is  passed  on   the  wire.  It  is  only  about  10  bytes,  so  the  overhead  is  minimized.  Different  Netty  Client  Actors  are   isolated;  they  do  not  block  each  other.     Figure  8:  Netty  Transport  and  Task  Addressing   For  performance,  effective  batching  is  really  the  key!  We  group  multiple  messages  into  a  single   batch  and  send  it  on  the  wire.  The  batch  size  is  not  fixed;  it  is  adjusted  dynamically  based  on   network  status.  If  the  network  is  available,  we  flush  pending  messages  immediately  without  waiting;   otherwise,  we  put  the  message  in  a  batch  and  trigger  a  timer  to  flush  the  batch  later.   Flow  Control   Without  flow  control,  one  task  can  easily  flood  another  task  with  too  many  messages,  causing  out  of   memory  errors.  Typical  flow  control  uses  a  TCP-­‐like  sliding  window,  so  that  source  and  target  can   run  concurrently  without  blocking  each  other.       Figure  9:  Flow  control,  each  task  is  “star”  connected  to  input  and  output  tasks  
  • 11.     The  difficult  part  for  our  problem  is  that  each  task  can  have  multiple  input  and  output  tasks.  The   input  and  output  must  be  entangled  so  that  the  backpressure  can  be  properly  propagated  from   downstream  to  upstream,  as  shown  in  Figure  9.  The  flow  control  also  needs  to  consider  failures,   and  it  needs  to  be  able  to  recover  when  there  is  message  loss.   Another  challenge  is  that  the  overhead  of  flow  control  messages  may  be  big.  If  we  ack  every   message,  a  huge  amount  of  ack’d  messages  will  be  in  the  system,  degrading  streaming  performance.   The  approach  we  adopted  is  to  use  explicit  AckRequest  messages.  The  target  tasks  are  only  ack’d   when  they  receive  the  AckRequest  message,  and  the  source  only  sends  an  AckRequest  when   necessary.  With  this  approach,  we  largely  reduced  the  overhead.   Message  Loss  Detection   The  streaming  platform  needs  to  effectively  track  what  messages  have  been  lost  and  recover  as  fast   as  possible.  For  example,  for  web  ads,  the  advertiser  is  charged  for  every  ad  click,  so  miscounts  are   not  acceptable.         Figure  10:  Message  Loss  Detection   We  use  the  flow  control  message  AckRequest  and  Ack  to  detect  message  loss  (Figure  10).  The  target   task  counts  how  many  messages  have  been  received  since  the  last  AckRequest,  and  acks  the  count   back  to  the  source  task.  The  source  task  checks  the  count  and  finds  the  message  loss.   Stream  Replay   In  some  applications,  a  message  cannot  be  lost  and  must  be  replayed.  For  example,  during  a  money   transfer,  the  bank  sends  an  SMS  to  us  with  a  verification  code.  If  that  message  is  lost,  the  system   must  send  another  one  so  that  money  transfer  can  continue.  We  made  the  decision  to  use  source   end  message  storage  and  timestamp-­‐based  replay.  
  • 12.       Figure  11:  Replay  with  Source  End  Message  Store   Every  message  is  immutable  and  tagged  with  a  timestamp.  We  made  an  assumption  that  the   timestamp  is  approximately  incremental  (allow  small  ratio  message  disorder).     We  assume  the  message  is  coming  from  a  replayable  source,  like  an  Apache  Kafka  queue;  otherwise,   the  message  is  stored  at  a  customizable  source  end  "message  store”.  In  Figure  11,  when  the  source   task  sends  the  message  downstream,  the  timestamp  and  offset  of  the  message  are  also  check-­‐ pointed  to  offset-­‐timestamp  storage  periodically.  During  recovery,  the  system  first  retrieves  the   right  timestamp  and  offset  from  the  offset-­‐timestamp  storage.  Then  it  replays  the  message  store   from  that  timestamp  and  offset.  A  Timestamp  Filter  filters  out  old  messages  in  case  the  message  in   storage  is  not  strictly  time-­‐ordered.     Master  High  Availability   In  a  distributed  streaming  system,  any  part  can  fail.  The  system  must  stay  responsive  and  do   recovery  in  case  of  errors.     Figure  12:  Master  High  Availability   We  use  Akka  clustering,  as  shown  in  Figure  12,  to  implement  the  Master  high  availability.  The   cluster  consists  of  several  master  nodes,  but  no  worker  nodes.  With  clustering  facilities,  we  can   easily  detect  and  handle  a  master  node  crash.  The  master  state  is  replicated  on  all  master  nodes   with  the  Typesafe  akka-­‐data-­‐replication9  library.  When  one  master  node  crashes,  another  standby   master  reads  the  master  state  and  takes  over.  The  master  state  contains  the  submission  data  of  all   applications.  If  one  application  dies,  a  master  can  use  that  state  to  recover  that  application.  CRDT   LwwMap10  is  used  to  represent  the  state;  it  is  a  hash  map  that  can  converge  on  distributed  nodes  
  • 13.     without  conflict.  To  have  strong  data  consistency,  the  state  read  and  write  must  happen  on  a   quorum  of  master  nodes.     Global  Clock  Service   Global  clock  service  tracks  the  minimum  timestamp  of  all  pending  messages  in  the  system.  Every   task  updates  its  own  minimum-­‐clock  to  global  clock  service  (Figure  13);  the  minimum-­‐clock  of  a   task  is  decided  by  the  minimum  of:   l Minimum  timestamp  of  all  pending  messages  in  the  inbox.     l Minimum  timestamp  of  all  unacked  outgoing  messages.  When  there  is  message  loss,  the   minimum  clock  does  not  advance.     l Minimum  clock  of  all  task  states.  If  the  state  is  accumulated  by  a  lot  of  input  messages,  then  the   clock  value  is  decided  by  the  oldest  message’s  timestamp.  The  state  clock  advances  by  doing   snapshots  to  persistent  storage  or  by  fading  out  the  effect  of  old  messages.     Figure  13:  Global  Clock  Service   The  global  clock  service  keeps  track  of  all  task  minimum  clocks  and  maintains  a  global  view  of   minimum  clock.  The  global  minimum  clock  value  is  monotonically  increasing,  meaning  that  all   source  messages  before  this  clock  value  have  been  processed.  If  there  is  message  loss  or  task  crash,   the  global  minimum  clock  stops.   Fault  Tolerant  and  At-­‐Least-­‐Once  Message  Delivery   With  Akka’s  powerful  actor  supervision,  we  can  implement  a  resilient  system  relatively  easily.  In   GearPump,  different  applications  have  a  different  AppMaster  instance  and  are  totally  isolated  from   each  other.  For  each  application,  there  is  a  supervision  tree,  AppMaster-­‐>Executor-­‐>Task.  With  this   supervision  hierarchy,  we  can  free  ourselves  from  the  headache  of  zombie  processes.  For  example  if   AppMaster  is  down  its  Akka  supervisor  ensures  the  whole  tree  shuts  down.    
  • 14.       Figure  14:  Possible  Failure  Scenarios  and  Error  Supervision  Hierarchy   It  is  also  easier  to  handle  message  loss  and  other  failures.  Multiple  failure  scenarios  are  possible,  as   shown  in  Figure  14.  If  an  AppMaster  crashes,  Master  schedules  a  new  resource  to  restart  the   AppMaster,  and  then  the  AppMaster  requests  resources  to  start  all  executors  and  tasks  in  the  tree.   If  an  Executor  crashes,  its  supervisor  AppMaster  is  notified  and  requests  a  new  resource  from  the   active  master  to  start  the  executor’s  child  tasks.  If  a  task  throws  an  exception,  its  supervisor   executor  restarts  that  Task.     When  “at  least  once”  message  delivery  is  a  requirement,  we  replay  the  messages  in  the  case  of   message  loss.  First,  AppMaster  reads  the  latest  minimum  clock  from  the  global  clock  service  or   clock  storage  if  the  clock  service  crashes.  Then  AppMaster  restarts  all  the  task  actors  to  get  a  fresh   task  state,  and  the  message  source  replays  messages  from  that  minimum  clock.  This  can  be  further   improved  to  restart  partial  tasks  only.   Exactly  Once  Message  Delivery  (ongoing)   For  some  applications,  it  is  extremely  important  to  do  “exactly  once”  message  delivery.  For  example,   for  a  real-­‐time  billing  system,  we  do  not  want  to  bill  the  customer  twice.  The  goal  of  exactly  once   message  delivery  is  to  make  sure:   • Errors  don’t  accumulate—today’s  error  will  not  be  accumulated  to  tomorrow   • State  management  is  transparent  to  application  developer   We  use  global  clock  to  synchronize  the  distributed  transactions.  We  assume  every  message  from   the  data  source  has  a  unique  timestamp.  The  timestamp  can  be  a  part  of  the  message  body  or  can  be   attached  later  with  system  clock  when  the  message  is  injected  into  the  streaming  system.  With  this   global  synchronized  clock,  we  can  coordinate  all  tasks  to  checkpoint  at  the  same  timestamp.    
  • 15.       Figure  15:  Checkpointing  and  Exactly  Once  Message  delivery   Workflow  to  do  state  checkpointing  (Figure  15):   1. The  coordinator  asks  the  streaming  system  to  do  a  checkpoint  at  timestamp  Tc.   2. Each  application  task  maintains  two  states:  checkpoint  state  and  current  state.  Checkpoint  state   only  contains  information  before  timestamp  Tc.  Current  state  contains  all  information.   3. When  the  global  minimum  clock  is  larger  than  Tc,  all  messages  older  than  Tc  have  been   processed.  The  checkpoint  state  will  no  longer  change,  so  we  can  then  safely  persist  the   checkpoint  state  in  storage.   4. When  there  is  message  loss,  we  start  the  recovery  process.     5. To  recover,  load  the  latest  checkpoint  state  from  storage  and  use  it  to  restore  the  application   status.   6. Data  source  replays  messages  from  the  checkpoint  timestamp.     The  checkpoint  interval  is  dynamically  determined  by  the  global  clock  service  (Figure  16).  Each   data  source  tracks  the  max  timestamp  of  input  messages.  Upon  receiving  min  clock  updates,  the   data  source  reports  the  time  delta  back  to  global  clock  service.  The  max  time  delta  is  the  upper   bound  of  the  application  state  timespan.  The  checkpoint  interval  is  bigger  than  max  delta  time  as   determined  by:     checkpointInterval =  2!! !"#! !"#   _!"#$%_!"#$  
  • 16.       Figure  16:  How  to  determine  Checkpoint  Interval   After  the  checkpoint  interval  is  notified  to  tasks  by  the  global  clock  service,  each  task  calculates  its   next  checkpoint  timestamp  autonomously  without  global  synchronization.   nextCheckpointTimeStamp = checkpointInterval ∙ (1 + 𝑚𝑎𝑥𝑀𝑒𝑠𝑠𝑎𝑔𝑒𝑇𝑖𝑚𝑒𝑠𝑡𝑎𝑚𝑝𝑂𝑓𝑇ℎ𝑖𝑠𝑇𝑎𝑠𝑘 𝑐ℎ𝑒𝑐𝑘𝑝𝑜𝑖𝑛𝑡𝐼𝑛𝑡𝑒𝑟𝑣𝑎𝑙 )   Each  task  contains  two  states:  checkpoint  state  and  current  state.  The  code  to  update  the  state  is   shown  in  the  listing  below  (List  1).     TaskState(stateStore, initialTimeStamp): currentState = stateStore.load(initialTimeStamp) checkpointState = currentState.clone checkpointTimestamp = nextCheckpointTimeStamp(initialTimeStamp) onMessage(msg): if (msg.timestamp < checkpointTimestamp): checkpointState.updateMessage(msg) currentState.updateMessage(msg) maxClock = max(maxClock, msg.timeStamp) onMinClock(minClock): if (minClock > checkpointTimestamp): stateStore.persist(checkpointState) checkpointTimeStamp = nextCheckpointTimeStamp(maxClock) checkpointState = currentState.clone onNewCheckpointInterval(newStep): step = newStep nextCheckpointTimeStamp(timestamp): checkpointTimestamp = (1 + timestamp/step) * step   List  1:  Task  Transactional  State  Implementation  
  • 17.     The  in-­‐memory  current  state  can  be  queried  directly  by  the  client,  it  represents  the  real  time  view   of  the  data.     Dynamic  Graph  (ongoing)   We  want  to  be  able  to  modify  the  DAG  dynamically  so  we  can  add,  remove,  and  replace  sub-­‐graphs   (Figure  17).       Figure  17:  Dynamic  Graph,  Attach,  Replace,  and  Remove   Observations  on  Akka   Akka  is  a  great  tool  for  streaming.  The  message-­‐driven  architecture  and  intuitive  Actor  Model   largely  influence  how  a  distributed  service  should  be  designed.  Akka  and  its  libraries  give  us   enough  flexibility  and  power  to  build  a  real-­‐time  and  scalable  distributed  streaming  platform.     l With  Akka  remoting,  we  can  easily  provision  a  computation  DAG  of  remote  nodes,  including   code  provisioning.     l With  Akka  clustering,  we  immediately  have  a  distributed  consistent  state  to  build  a  high   available  service.   l With  location  transparency,  we  can  handle  scale-­‐up  and  scale-­‐out  in  the  same  way;  it  is  also   easier  for  us  to  test  our  code  using  a  single  node.     l With  an  error  supervision  tree,  we  are  better  situated  to  handle  the  errors  and  recover  with   the  best  approach.     l Akka  has  very  good  extensibility;  we  have  customized  Akka  on  serialization,  message  passing,   and  metrics  to  meet  particular  needs.   Because  streaming  applications  has  extreme  demands  on  throughput  and  latency  when  processing   large  volumes  of  data,  we  customized  Akka  to  better  meet  our  performance  requirements.     l For  the  message  passing  between  tasks,  we  implemented  a  customized  message  passing   extension  that  batches  the  messages  before  sending  across  the  network.     l To  reduce  the  actor  path  overhead,  we  developed  a  lightweight  method  to  address  the  task   uniquely  in  the  application.     l To  reduce  the  CPU  time  of  serialization,  we  avoid  using  a  pooled  serializer  and  the  heavy   serializer  lookup  process.  We  also  avoid  serializing  the  same  message  multiple  times.     l To  reduce  the  Akka  clustering  messaging  overhead,  the  worker  is  designed  to  NOT  be  part  of   Akka  cluster.    
  • 18.     l For  flow  control,  our  implementation  is  slightly  different  with  Akka  streaming,  the  rate  of  Ack   messages  is  smaller.   One  case  we  have  not  solved  is  timeout  detection.  We  want  to  avoid  the  following  two  scenarios:     A) When  one  node  crashes,  the  watching  node  takes  too  long  to  note  its  death.   B) When  the  CPU  load  is  high,  actors  may  start  to  disassociate  with  other  nodes.     The  reality  is  that  either  or  both  of  these  may  occur.  We  want  a  faster  and  more  robust  way  to   differentiate  real  failures  from  temporary  unavailability,  so  we  can  recover  faster  in  case  of  real   failures  and  be  more  resilient  in  case  of  temporary  load  increases.     Experiment  Results   To  illustrate  the  performance  of  GearPump,  we  mainly  focused  on  two  aspects:  throughput  and   latency,  using  a  micro  benchmark  called  SOL  (an  example  in  the  GearPump  distro)  whose  topology   is  quite  simple.  SOLStreamProducer  delivers  messages  to  SOLStreamProcessor  constantly  and   SOLStreamProcessor  does  nothing.  We  set  up  a  4-­‐node  cluster  (each  node  was  an  Intel®  Xeon®  32-­‐ core  processor  E5-­‐2680  2.70GHz  with  128GB  memory)  and  a  10GbE  network.     Throughput   Figure  18  shows  that  the  whole  throughput  of  the  cluster  can  reach  about  11  million   messages/second  (100  bytes  per  message).   Figure  18:  Performance  Evaluation,  Throughput,  and  Latency   Latency   When  we  transfer  messages  at  the  max  throughput  above,  the  average  latency  (Figure  19)  between   two  tasks  is  17ms  with  a  standard  deviation  of  13ms.  
  • 19.       Figure  19:  Latency  between  Two  tasks(ms)   Fault  Recovery  time   When  corruption  is  detected—for  example,  the  Executor  is  down—GearPump  reallocates  the   resource  and  restarts  the  application.  It  takes  about  10  seconds  to  recover  the  application.   Future  Plan(s)   We  are  still  working  on  transactional  support  and  dynamic  graph  support  for  our  next  release.   Besides  these  two,  we  also  want  to  incorporate  these  features:   l StreamSQL     Per  O'Reilly  Media  Strata’s  report,  Data  Science  Salary  Survey  in  2013,SQL  is  the  most  used   data  tool  for  data  scientists.  StreamSQL  is  a  must-­‐have  feature.  We  want  to  support  translating   a  SQL  statement  to  a  running  DAG,  and  supporting  stream  special  functions  like  windows   operations.   l Visualization   Everything  is  moving  in  streaming  applications,  and  it  is  hard  to  know  when  unexpected  things   happen,  so  visualization  is  extremely  important.  Visualization  will  give  us  insights  about  how   the  computation  DAG  is  composed,  latency  and  throughput,  system  and  network  load  status,   and  error  information.  We  have  preliminary  REST  support  that  emits  a  given  AppMasters  DAG   in  JSON.  We’ll  likely  have  visualization  using  viz.js  in  the  next  release.   l Data  skew  handling  with  Auto-­‐Split   Data  skew  is  common  in  big  data,  and  it  highly  impacts  application  performance.  In  case  of  data   skew,  some  tasks  may  be  too  busy,  while  the  others  are  free.  We  want  the  busy  task  to  be  able   to  split  into  small  tasks  automatically  in  response  to  load  change.     Summary   Akka  is  characterized  by  its  simplicity  and  elegance.  The  concepts  of  being  message  driven  and   providing  computation  isolation  makes  Akka  a  natural  fit  for  streaming  frameworks.  Akka  provides  
  • 20.     a  solid  foundation  that  allows  developers  to  focus  on  the  data  logic  and  the  specific  requirements  of   streaming.  GearPump  exploits  the  current  Akka  feature  set  and  is  small  and  nimble,  only  5000  lines   of  code  in  total  yet  provides  compelling  streaming  features  including  scalability,  low  latency,   resilience,  error  isolation,  and  high  availability.  Performance  is  not  traded  for  features:  11  million   messages  per  second  is  a  strong  performance  metric.  Finally,  we  provide  a  growing  number  of   innovations  including  code  provisioning  and  in-­‐flight  DAG  modification.    The  platform  is  rapidly   evolving  and  will  be  directed  towards  solving  modern  day  challenges  at  scale.  We  invite  those   interested  to  explore  the  tutorial  at  https://github.com/intel-­‐hadoop/gearpump.   Reference                                                                                                                             1  Millwheel  http://research.google.com/pubs/pub41378.html   2  Apache  Storm  http://storm.apache.org/     3  Spark  Streaming  https://spark.apache.org/streaming/     4  Apache  Samza  http://samza.incubator.apache.org/   5  Apache  TEZ  http://zh.hortonworks.com/hadoop/tez/   6  Hadoop  YARN  http://hadoop.apache.org/docs/current/hadoop-­‐yarn/hadoop-­‐yarn-­‐ site/YARN.html   7  YARN  Architecture  Paper  Section  3  http://dl.acm.org/citation.cfm?id=2523633 8  Scala  class  implicits  https://www.google.com/search?q=scala+pimp+my+library   9  Akka  Data  replication  library  https://github.com/patriknw/akka-­‐data-­‐replication   10  A  comprehensive  study  of  Convergent  and  Commutative  Replicated  Data  Types     https://hal.archives-­‐ouvertes.fr/file/index/docid/555588/filename/techreport.pdf     Notices     INFORMATION  IN  THIS  DOCUMENT  IS  PROVIDED  IN  CONNECTION  WITH  INTEL  PRODUCTS.  NO  LICENSE,   EXPRESS  OR  IMPLIED,  BY  ESTOPPEL  OR  OTHERWISE,  TO  ANY  INTELLECTUAL  PROPERTY  RIGHTS  IS   GRANTED  BY  THIS  DOCUMENT.  EXCEPT  AS  PROVIDED  IN  INTEL'S  TERMS  AND  CONDITIONS  OF  SALE  FOR   SUCH  PRODUCTS,  INTEL  ASSUMES  NO  LIABILITY  WHATSOEVER  AND  INTEL  DISCLAIMS  ANY  EXPRESS  OR   IMPLIED  WARRANTY,  RELATING  TO  SALE  AND/OR  USE  OF  INTEL  PRODUCTS  INCLUDING  LIABILITY  OR   WARRANTIES  RELATING  TO  FITNESS  FOR  A  PARTICULAR  PURPOSE,  MERCHANTABILITY,  OR   INFRINGEMENT  OF  ANY  PATENT,  COPYRIGHT  OR  OTHER  INTELLECTUAL  PROPERTY  RIGHT.     UNLESS  OTHERWISE  AGREED  IN  WRITING  BY  INTEL,  THE  INTEL  PRODUCTS  ARE  NOT  DESIGNED  NOR   INTENDED  FOR  ANY  APPLICATION  IN  WHICH  THE  FAILURE  OF  THE  INTEL  PRODUCT  COULD  CREATE  A   SITUATION  WHERE  PERSONAL  INJURY  OR  DEATH  MAY  OCCUR.     Intel  may  make  changes  to  specifications  and  product  descriptions  at  any  time,  without  notice.  Designers   must  not  rely  on  the  absence  or  characteristics  of  any  features  or  instructions  marked  "reserved"  or   "undefined."  Intel  reserves  these  for  future  definition  and  shall  have  no  responsibility  whatsoever  for   conflicts  or  incompatibilities  arising  from  future  changes  to  them.  The  information  here  is  subject  to  change   without  notice.  Do  not  finalize  a  design  with  this  information.       The  products  described  in  this  document  may  contain  design  defects  or  errors  known  as  errata  which  may    
  • 21.                                                                                                                                                                                                                                                                                                                                                                                                             cause  the  product  to  deviate  from  published  specifications.  Current  characterized  errata  are  available  on   request.       Contact  your  local  Intel  sales  office  or  your  distributor  to  obtain  the  latest  specifications  and  before  placing   your  product  order.       Copies  of  documents  which  have  an  order  number  and  are  referenced  in  this  document,  or  other  Intel   literature,  may  be  obtained  by  calling  1-­‐800-­‐548-­‐4725,  or  go  to:  http://www.intel.com/design/literature.htm     Software  and  workloads  used  in  performance  tests  may  have  been  optimized  for  performance  only  on  Intel   microprocessors.  Performance  tests,  such  as  SYSmark*  and  MobileMark*,  are  measured  using  specific   computer  systems,  components,  software,  operations,  and  functions.  Any  change  to  any  of  those  factors  may   cause  the  results  to  vary.  You  should  consult  other  information  and  performance  tests  to  assist  you  in  fully   evaluating  your  contemplated  purchases,  including  the  performance  of  that  product  when  combined  with   other  products.     Any  software  source  code  reprinted  in  this  document  is  furnished  under  a  software  license  and  may  only  be   used  or  copied  in  accordance  with  the  terms  of  that  license.     Intel,  the  Intel  logo,  and  Intel  Xeon  are  trademarks  of  Intel  Corporation  in  the  U.S.  and/or  other  countries.     Copyright  ©  2014  Intel  Corporation.  All  rights  reserved.     *Other  names  and  brands  may  be  claimed  as  the  property  of  others.