digraph g {
  graph [compound = true];
  //presentation
  splines = true;
  overlap = false;
  rankdir = TB;
  generators [label="generators", shape="circle"];
  providers [label="providers", shape="circle"];
  processors [label="processors", shape="circle"];
  subgraph cluster_persisters {
    label="persisters";
    persisters_filebuffer_reader [label="FileBufferPersistReader"]
    persisters_filebuffer_writer [label="FileBufferPersistWriter"]
  }
  subgraph cluster_queues {
    label="queues";
    filebuffer [label="filebuffer"]
  }
  generators -> providers
  providers -> processors
  processors -> persisters_filebuffer_writer [label="StreamsDatum"]
  persisters_filebuffer_reader -> processors [label="StreamsDatum[String]"]
  persisters_filebuffer_writer -> filebuffer
  filebuffer -> persisters_filebuffer_reader
}