diff --git a/doc/data_flow_realtime.dot b/doc/data_flow_realtime.dot
new file mode 100644
index 00000000000..e29cd47a743
--- /dev/null
+++ b/doc/data_flow_realtime.dot
@@ -0,0 +1,39 @@
+digraph DruidDataFlow {
+ graph [bgcolor="#fffef5", clusterrank=global, rankdir=TB];
+ node [color="#0a0701", fillcolor="#fdf4c6", fontname=Helvetica, shape=box, style=filled, label="\N"];
+ edge [color="#377d18"];
+
+ 1 [label = "REST query"];
+ 2 [label = "realtime_data_src"];
+ 4 [label = "indexed segments\nblob_store (S3, HDFS)"];
+ 5 [label = "Realtime.working_set"];
+ 6 [label = "Realtime.spill_disk"];
+ 7 [label = "HDFS_data_src"];
+ 8 [label = "external_data_src"];
+ 9 [label = "Realtime.local_disk"];
+ 10 [label = "metadata_store (mysql)"];
+ 11 [label = "HadoopDruidIndexer.working_set"];
+ 12 [label = "IndexerService.working_set"];
+
+2 -> 5 [label = "Realtime.Firehose"];
+5 -> 6 [label = "Realtime.Firehose"];
+
+5 -> 9 [label = "Realtime.Indexer"];
+6 -> 9 [label = "Realtime.Indexer"];
+5 -> 10 [label = "Realtime.MetadataUpdater"];
+
+7 -> 11 [label = "HadoopDruidIndexer"];
+11 -> 4 [label = "HadoopDruidIndexer"];
+11 -> 10 [label = "HadoopDruidIndexer"];
+
+8 -> 12 [label = "IndexerService"];
+12 -> 4 [label = "IndexerService"];
+12 -> 10 [label = "IndexerService"];
+
+
+9 -> 4 [label = "Realtime.segmentPusher"];
+
+5 -> 1 [label = " results "];
+
+1 -> 5 [label = " query "];
+}
diff --git a/doc/data_flow_realtime.png b/doc/data_flow_realtime.png
new file mode 100644
index 00000000000..f05bd0f5ea2
Binary files /dev/null and b/doc/data_flow_realtime.png differ
diff --git a/doc/data_flow_realtime.svg b/doc/data_flow_realtime.svg
new file mode 100644
index 00000000000..873010aff3f
--- /dev/null
+++ b/doc/data_flow_realtime.svg
@@ -0,0 +1,128 @@
+
+
+
+
diff --git a/doc/data_flow_simple.dot b/doc/data_flow_simple.dot
new file mode 100644
index 00000000000..a30f8ad73de
--- /dev/null
+++ b/doc/data_flow_simple.dot
@@ -0,0 +1,27 @@
+digraph DruidDataFlow {
+ graph [bgcolor="#fffef5", clusterrank=global, rankdir=TB];
+ node [color="#0a0701", fillcolor="#fdf4c6", fontname=Helvetica, shape=box, style=filled, label="\N"];
+ edge [color="#377d18"];
+
+ 1 [label = "REST query"];
+ 10 [label = "Broker.query_cache"];
+ 2 [label = "realtime_data_src"];
+ 3 [label = "Compute.disk_cache"];
+ 4 [label = "indexed segments\nblob_store (S3, HDFS)"];
+ 5 [label = "Realtime.working_set"];
+ 6 [label = "Compute.working_set"];
+
+2 -> 5 [label = "Realtime.Firehose"];
+5 -> 4 [label = "Realtime.segmentPusher"];
+
+4 -> 3 [label = "Compute.load"];
+3 -> 6 [label = "Compute.map"];
+
+5 -> 10 [label = " results "];
+6 -> 10 [label = " results "];
+10 -> 1 [label = " results "];
+
+10 -> 5 [label = " query "];
+10 -> 6 [label = " query "];
+1 -> 10 [label = " query "];
+}
diff --git a/doc/data_flow_simple.png b/doc/data_flow_simple.png
new file mode 100644
index 00000000000..f397953b651
Binary files /dev/null and b/doc/data_flow_simple.png differ
diff --git a/doc/data_flow_simple.svg b/doc/data_flow_simple.svg
new file mode 100644
index 00000000000..012a06c2977
--- /dev/null
+++ b/doc/data_flow_simple.svg
@@ -0,0 +1,92 @@
+
+
+
+