Added: incubator/nifi/site/trunk/docs/nifi-docs/html/user-guide.html
URL: 
http://svn.apache.org/viewvc/incubator/nifi/site/trunk/docs/nifi-docs/html/user-guide.html?rev=1682431&view=auto
==============================================================================
--- incubator/nifi/site/trunk/docs/nifi-docs/html/user-guide.html (added)
+++ incubator/nifi/site/trunk/docs/nifi-docs/html/user-guide.html Fri May 29 
11:51:20 2015
@@ -0,0 +1,2307 @@
+<!--
+                        Licensed to the Apache Software Foundation (ASF) under 
one or more
+                        contributor license agreements.  See the NOTICE file 
distributed with
+                        this work for additional information regarding 
copyright ownership.
+                        The ASF licenses this file to You under the Apache 
License, Version 2.0
+                        (the "License"); you may not use this file except in 
compliance with
+                        the License.  You may obtain a copy of the License at
+
+                        http://www.apache.org/licenses/LICENSE-2.0
+
+                        Unless required by applicable law or agreed to in 
writing, software
+                        distributed under the License is distributed on an "AS 
IS" BASIS,
+                        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.
+                        See the License for the specific language governing 
permissions and
+                        limitations under the License.
+                        -->
+                        <!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge"><![endif]-->
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<meta name="generator" content="Asciidoctor 1.5.2">
+<meta name="author" content="Apache NiFi Team">
+<title>Apache NiFi User Guide</title>
+<style>
+/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
+/* Copyright (C) 2012-2015 Dan Allen, Ryan Waldron and the Asciidoctor Project
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. */
+/* Remove the comments around the @import statement below when using this as a 
custom stylesheet */
+@import 
"https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400";;
+article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
+audio,canvas,video{display:inline-block}
+audio:not([controls]){display:none;height:0}
+[hidden],template{display:none}
+script{display:none!important}
+html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
+body{margin:0}
+a{background:transparent}
+a:focus{outline:thin dotted}
+a:active,a:hover{outline:0}
+h1{font-size:2em;margin:.67em 0}
+abbr[title]{border-bottom:1px dotted}
+b,strong{font-weight:bold}
+dfn{font-style:italic}
+hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
+mark{background:#ff0;color:#000}
+code,kbd,pre,samp{font-family:monospace;font-size:1em}
+pre{white-space:pre-wrap}
+q{quotes:"\201C" "\201D" "\2018" "\2019"}
+small{font-size:80%}
+sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sup{top:-.5em}
+sub{bottom:-.25em}
+img{border:0}
+svg:not(:root){overflow:hidden}
+figure{margin:0}
+fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
+legend{border:0;padding:0}
+button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
+button,input{line-height:normal}
+button,select{text-transform:none}
+button,html 
input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
+button[disabled],html input[disabled]{cursor:default}
+input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
+input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
+input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
+button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
+textarea{overflow:auto;vertical-align:top}
+table{border-collapse:collapse;border-spacing:0}
+*,*:before,*:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
+html,body{font-size:100%}
+body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto 
Serif","DejaVu 
Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto}
+a:hover{cursor:pointer}
+img,object,embed{max-width:100%;height:auto}
+object,embed{height:100%}
+img{-ms-interpolation-mode:bicubic}
+#map_canvas img,#map_canvas embed,#map_canvas object,.map_canvas 
img,.map_canvas embed,.map_canvas object{max-width:none!important}
+.left{float:left!important}
+.right{float:right!important}
+.text-left{text-align:left!important}
+.text-right{text-align:right!important}
+.text-center{text-align:center!important}
+.text-justify{text-align:justify!important}
+.hide{display:none}
+.antialiased,body{-webkit-font-smoothing:antialiased}
+img{display:inline-block;vertical-align:middle}
+textarea{height:auto;min-height:50px}
+select{width:100%}
+p.lead,.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type 
p{font-size:1.21875em;line-height:1.6}
+.subheader,.admonitionblock 
td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
+div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
+a{color:#2156a5;text-decoration:underline;line-height:inherit}
+a:hover,a:focus{color:#1d4b8f}
+a img{border:none}
+p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
+p aside{font-size:.875em;line-height:1.35;font-style:italic}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open 
Sans","DejaVu 
Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
+h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title 
small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
+h1{font-size:2.125em}
+h2{font-size:1.6875em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
+h4,h5{font-size:1.125em}
+h6{font-size:1em}
+hr{border:solid #ddddd8;border-width:1px 0 0;clear:both;margin:1.25em 0 
1.1875em;height:0}
+em,i{font-style:italic;line-height:inherit}
+strong,b{font-weight:bold;line-height:inherit}
+small{font-size:60%;line-height:inherit}
+code{font-family:"Droid Sans Mono","DejaVu Sans 
Mono",monospace;font-weight:400;color:rgba(0,0,0,.9);padding-right: 1px;}
+ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
+ul,ol,ul.no-bullet,ol.no-bullet{margin-left:1.5em}
+ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
+ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
+ul.square{list-style-type:square}
+ul.circle{list-style-type:circle}
+ul.disc{list-style-type:disc}
+ul.no-bullet{list-style:none}
+ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
+dl dt{margin-bottom:.3125em;font-weight:bold}
+dl dd{margin-bottom:1.25em}
+abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px
 dotted #ddd;cursor:help}
+abbr{text-transform:none}
+blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px 
solid #ddd}
+blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
+blockquote cite:before{content:"\2014 \0020"}
+blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
+blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
+@media only screen and 
(min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
+h1{font-size:2.75em}
+h2{font-size:2.3125em}
+h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
+h4{font-size:1.4375em}}table{background:#fff;margin-bottom:1.25em;border:solid 
1px #dedede}
+table thead,table tfoot{background:#f7f8f7;font-weight:bold}
+table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr 
td{padding:.5em .625em 
.625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
+table tr th,table tr td{padding:.5625em 
.625em;font-size:inherit;color:rgba(0,0,0,.8)}
+table tr.even,table tr.alt,table tr:nth-of-type(even){background:#f8f8f7}
+table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot 
tr td{display:table-cell;line-height:1.6}
+h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
+h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title 
strong,h4 strong,h5 strong,h6 strong{font-weight:400}
+.clearfix:before,.clearfix:after,.float-group:before,.float-group:after{content:"
 ";display:table}
+.clearfix:after,.float-group:after{clear:both}
+*:not(pre)>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;word-spacing:-.15em;background-color:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
+pre,pre>code{line-height:1.45;color:rgba(0,0,0,.9);font-family:"Droid Sans 
Mono","DejaVu Sans Mono",monospace;font-weight:400;text-rendering:optimizeSpeed}
+.keyseq{color:rgba(51,51,51,.8)}
+kbd{display:inline-block;color:rgba(0,0,0,.8);font-size:.75em;line-height:1.4;background-color:#f7f7f7;border:1px
 solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 
1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 
0 0 .1em #fff inset;margin:-.15em .15em 0 .15em;padding:.2em .6em .2em 
.5em;vertical-align:middle;white-space:nowrap}
+.keyseq kbd:first-child{margin-left:0}
+.keyseq kbd:last-child{margin-right:0}
+.menuseq,.menu{color:rgba(0,0,0,.8)}
+b.button:before,b.button:after{position:relative;top:-1px;font-weight:400}
+b.button:before{content:"[";padding:0 3px 0 2px}
+b.button:after{content:"]";padding:0 2px 0 3px}
+p a>code:hover{color:rgba(0,0,0,.9)}
+#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
+#header:before,#header:after,#content:before,#content:after,#footnotes:before,#footnotes:after,#footer:before,#footer:after{content:"
 ";display:table}
+#header:after,#content:after,#footnotes:after,#footer:after{clear:both}
+#content{margin-top:1.25em}
+#content:before{content:none}
+#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
+#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #ddddd8}
+#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px 
solid #ddddd8;padding-bottom:8px}
+#header .details{border-bottom:1px solid 
#ddddd8;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row
 wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
+#header .details span:first-child{margin-left:-.125em}
+#header .details span.email a{color:rgba(0,0,0,.85)}
+#header .details br{display:none}
+#header .details br+span:before{content:"\00a0\2013\00a0"}
+#header .details 
br+span.author:before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
+#header .details br+span#revremark:before{content:"\00a0|\00a0"}
+#header #revnumber{text-transform:capitalize}
+#header #revnumber:after{content:"\00a0"}
+#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px 
solid 
#ddddd8;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
+#toc{border-bottom:1px solid #efefed;padding-bottom:.5em}
+#toc>ul{margin-left:.125em}
+#toc ul.sectlevel0>li>a{font-style:italic}
+#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
+#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
+#toc a{text-decoration:none}
+#toc a:active{text-decoration:underline}
+#toctitle{color:#7a2518;font-size:1.2em}
+@media only screen and (min-width:768px){#toctitle{font-size:1.375em}
+body.toc2{padding-left:15em;padding-right:0}
+#toc.toc2{margin-top:0!important;background-color:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px
 solid 
#efefed;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em
 1em;height:100%;overflow:auto}
+#toc.toc2 #toctitle{margin-top:0;font-size:1.2em}
+#toc.toc2>ul{font-size:.9em;margin-bottom:0}
+#toc.toc2 ul ul{margin-left:0;padding-left:1em}
+#toc.toc2 ul.sectlevel0 
ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
+body.toc2.toc-right{padding-left:0;padding-right:15em}
+body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid 
#efefed;left:auto;right:0}}@media only screen and 
(min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
+#toc.toc2{width:20em}
+#toc.toc2 #toctitle{font-size:1.375em}
+#toc.toc2>ul{font-size:.95em}
+#toc.toc2 ul ul{padding-left:1.25em}
+body.toc2.toc-right{padding-left:0;padding-right:20em}}#content 
#toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+#content #toc>:first-child{margin-top:0}
+#content #toc>:last-child{margin-bottom:0}
+#footer{max-width:100%;background-color:rgba(0,0,0,.8);padding:1.25em}
+#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
+.sect1{padding-bottom:.625em}
+@media only screen and 
(min-width:768px){.sect1{padding-bottom:1.25em}}.sect1+.sect1{border-top:1px 
solid #efefed}
+#content 
h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
+#content 
h1>a.anchor:before,h2>a.anchor:before,h3>a.anchor:before,#toctitle>a.anchor:before,.sidebarblock>.content>.title>a.anchor:before,h4>a.anchor:before,h5>a.anchor:before,h6>a.anchor:before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
+#content h1:hover>a.anchor,#content 
h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
+#content 
h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
+#content 
h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
+.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
+.admonitionblock 
td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto
 Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
+table.tableblock>caption.title{white-space:nowrap;overflow:visible;max-width:0}
+.paragraph.lead>p,#preamble>.sectionbody>.paragraph:first-of-type 
p{color:rgba(0,0,0,.85)}
+table.tableblock #preamble>.sectionbody>.paragraph:first-of-type 
p{font-size:inherit}
+.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
+.admonitionblock>table td.icon{text-align:center;width:80px}
+.admonitionblock>table td.icon img{max-width:none}
+.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open 
Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
+.admonitionblock>table 
td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid 
#ddddd8;color:rgba(0,0,0,.6)}
+.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
+.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
+.exampleblock>.content>:first-child{margin-top:0}
+.exampleblock>.content>:last-child{margin-bottom:0}
+.sidebarblock{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
+.sidebarblock>:first-child{margin-top:0}
+.sidebarblock>:last-child{margin-bottom:0}
+.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
+.exampleblock>.content>:last-child>:last-child,.exampleblock>.content 
.olist>ol>li:last-child>:last-child,.exampleblock>.content 
.ulist>ul>li:last-child>:last-child,.exampleblock>.content 
.qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content
 .olist>ol>li:last-child>:last-child,.sidebarblock>.content 
.ulist>ul>li:last-child>:last-child,.sidebarblock>.content 
.qlist>ol>li:last-child>:last-child{margin-bottom:0}
+.literalblock pre,.listingblock pre:not(.highlight),.listingblock 
pre[class="highlight"],.listingblock pre[class^="highlight "],.listingblock 
pre.CodeRay,.listingblock pre.prettyprint{background:#f7f7f8}
+.sidebarblock .literalblock pre,.sidebarblock .listingblock 
pre:not(.highlight),.sidebarblock .listingblock 
pre[class="highlight"],.sidebarblock .listingblock pre[class^="highlight 
"],.sidebarblock .listingblock pre.CodeRay,.sidebarblock .listingblock 
pre.prettyprint{background:#f2f1f1}
+.literalblock pre,.literalblock pre[class],.listingblock pre,.listingblock 
pre[class]{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;padding:1em;font-size:.8125em}
+.literalblock pre.nowrap,.literalblock pre[class].nowrap,.listingblock 
pre.nowrap,.listingblock 
pre[class].nowrap{overflow-x:auto;white-space:pre;word-wrap:normal}
+@media only screen and (min-width:768px){.literalblock pre,.literalblock 
pre[class],.listingblock pre,.listingblock 
pre[class]{font-size:.90625em}}@media only screen and 
(min-width:1280px){.literalblock pre,.literalblock pre[class],.listingblock 
pre,.listingblock pre[class]{font-size:1em}}.literalblock.output 
pre{color:#f7f7f8;background-color:rgba(0,0,0,.9)}
+.listingblock pre.highlightjs{padding:0}
+.listingblock 
pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
+.listingblock pre.prettyprint{border-width:0}
+.listingblock>.content{position:relative}
+.listingblock 
code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:#999}
+.listingblock:hover code[data-lang]:before{display:block}
+.listingblock.terminal pre 
.command:before{content:attr(data-prompt);padding-right:.5em;color:#999}
+.listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}
+table.pyhltable{border-collapse:separate;border:0;margin-bottom:0;background:none}
+table.pyhltable td{vertical-align:top;padding-top:0;padding-bottom:0}
+table.pyhltable td.code{padding-left:.75em;padding-right:0}
+pre.pygments .lineno,table.pyhltable 
td:not(.code){color:#999;padding-left:0;padding-right:.5em;border-right:1px 
solid #ddddd8}
+pre.pygments .lineno{display:inline-block;margin-right:.25em}
+table.pyhltable .linenodiv{background:none!important;padding-right:0!important}
+.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
+.quoteblock>.title{margin-left:-1.5em;margin-bottom:.75em}
+.quoteblock blockquote,.quoteblock blockquote 
p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
+.quoteblock blockquote{margin:0;padding:0;border:0}
+.quoteblock 
blockquote:before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0
 1px 2px rgba(0,0,0,.1)}
+.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
+.quoteblock .attribution{margin-top:.5em;margin-right:.5ex;text-align:right}
+.quoteblock .quoteblock{margin-left:0;margin-right:0;padding:.5em 
0;border-left:3px solid rgba(0,0,0,.6)}
+.quoteblock .quoteblock blockquote{padding:0 0 0 .75em}
+.quoteblock .quoteblock blockquote:before{display:none}
+.verseblock{margin:0 1em 1.25em 1em}
+.verseblock pre{font-family:"Open Sans","DejaVu 
Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
+.verseblock pre strong{font-weight:400}
+.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
+.quoteblock .attribution,.verseblock 
.attribution{font-size:.9375em;line-height:1.45;font-style:italic}
+.quoteblock .attribution br,.verseblock .attribution br{display:none}
+.quoteblock .attribution cite,.verseblock .attribution 
cite{display:block;letter-spacing:-.05em;color:rgba(0,0,0,.6)}
+.quoteblock.abstract{margin:0 0 1.25em 0;display:block}
+.quoteblock.abstract blockquote,.quoteblock.abstract blockquote 
p{text-align:left;word-spacing:0}
+.quoteblock.abstract blockquote:before,.quoteblock.abstract blockquote 
p:first-of-type:before{display:none}
+table.tableblock{max-width:100%;border-collapse:separate}
+table.tableblock td>.paragraph:last-child p>p:last-child,table.tableblock 
th>p:last-child,table.tableblock td>p:last-child{margin-bottom:0}
+table.spread{width:100%}
+table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
+table.grid-all th.tableblock,table.grid-all td.tableblock{border-width:0 1px 
1px 0}
+table.grid-all tfoot>tr>th.tableblock,table.grid-all 
tfoot>tr>td.tableblock{border-width:1px 1px 0 0}
+table.grid-cols th.tableblock,table.grid-cols td.tableblock{border-width:0 1px 
0 0}
+table.grid-all *>tr>.tableblock:last-child,table.grid-cols 
*>tr>.tableblock:last-child{border-right-width:0}
+table.grid-rows th.tableblock,table.grid-rows td.tableblock{border-width:0 0 
1px 0}
+table.grid-all tbody>tr:last-child>th.tableblock,table.grid-all 
tbody>tr:last-child>td.tableblock,table.grid-all 
thead:last-child>tr>th.tableblock,table.grid-rows 
tbody>tr:last-child>th.tableblock,table.grid-rows 
tbody>tr:last-child>td.tableblock,table.grid-rows 
thead:last-child>tr>th.tableblock{border-bottom-width:0}
+table.grid-rows tfoot>tr>th.tableblock,table.grid-rows 
tfoot>tr>td.tableblock{border-width:1px 0 0 0}
+table.frame-all{border-width:1px}
+table.frame-sides{border-width:0 1px}
+table.frame-topbot{border-width:1px 0}
+th.halign-left,td.halign-left{text-align:left}
+th.halign-right,td.halign-right{text-align:right}
+th.halign-center,td.halign-center{text-align:center}
+th.valign-top,td.valign-top{vertical-align:top}
+th.valign-bottom,td.valign-bottom{vertical-align:bottom}
+th.valign-middle,td.valign-middle{vertical-align:middle}
+table thead th,table tfoot th{font-weight:bold}
+tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
+tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th 
p{color:rgba(0,0,0,.8);font-weight:bold}
+p.tableblock>code:only-child{background:none;padding:0}
+p.tableblock{font-size:1em}
+td>div.verse{white-space:pre}
+ol{margin-left:1.75em}
+ul li ol{margin-left:1.5em}
+dl dd{margin-left:1.125em}
+dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
+ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist 
.ulist{margin-bottom:.625em}
+ul.unstyled,ol.unnumbered,ul.checklist,ul.none{list-style-type:none}
+ul.unstyled,ol.unnumbered,ul.checklist{margin-left:.625em}
+ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist 
li>p:first-child>.fa-check-square-o:first-child{width:1em;font-size:.85em}
+ul.checklist 
li>p:first-child>input[type="checkbox"]:first-child{width:1em;position:relative;top:1px}
+ul.inline{margin:0 auto .625em 
auto;margin-left:-1.375em;margin-right:0;padding:0;list-style:none;overflow:hidden}
+ul.inline>li{list-style:none;float:left;margin-left:1.375em;display:block}
+ul.inline>li>*{display:block}
+.unstyled dl dt{font-weight:400;font-style:normal}
+ol.arabic{list-style-type:decimal}
+ol.decimal{list-style-type:decimal-leading-zero}
+ol.loweralpha{list-style-type:lower-alpha}
+ol.upperalpha{list-style-type:upper-alpha}
+ol.lowerroman{list-style-type:lower-roman}
+ol.upperroman{list-style-type:upper-roman}
+ol.lowergreek{list-style-type:lower-greek}
+.hdlist>table,.colist>table{border:0;background:none}
+.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
+td.hdlist1{padding-right:.75em;font-weight:bold}
+td.hdlist1,td.hdlist2{vertical-align:top}
+.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
+.colist>table tr>td:first-of-type{padding:0 .75em;line-height:1}
+.colist>table tr>td:last-of-type{padding:.25em 0}
+.thumb,.th{line-height:0;display:inline-block;border:solid 4px 
#fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
+.imageblock.left,.imageblock[style*="float: left"]{margin:.25em .625em 1.25em 
0}
+.imageblock.right,.imageblock[style*="float: right"]{margin:.25em 0 1.25em 
.625em}
+.imageblock>.title{margin-bottom:0}
+.imageblock.thumb,.imageblock.th{border-width:6px}
+.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
+.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
+.image.left{margin-right:.625em}
+.image.right{margin-left:.625em}
+a.image{text-decoration:none}
+span.footnote,span.footnoteref{vertical-align:super;font-size:.875em}
+span.footnote a,span.footnoteref a{text-decoration:none}
+span.footnote a:active,span.footnoteref a:active{text-decoration:underline}
+#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
+#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em 
0;border-width:1px 0 0 0}
+#footnotes .footnote{padding:0 
.375em;line-height:1.3;font-size:.875em;margin-left:1.2em;text-indent:-1.2em;margin-bottom:.2em}
+#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none}
+#footnotes .footnote:last-of-type{margin-bottom:0}
+#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
+.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
+.gist .file-data>table td.line-data{width:99%}
+div.unbreakable{page-break-inside:avoid}
+.big{font-size:larger}
+.small{font-size:smaller}
+.underline{text-decoration:underline}
+.overline{text-decoration:overline}
+.line-through{text-decoration:line-through}
+.aqua{color:#00bfbf}
+.aqua-background{background-color:#00fafa}
+.black{color:#000}
+.black-background{background-color:#000}
+.blue{color:#0000bf}
+.blue-background{background-color:#0000fa}
+.fuchsia{color:#bf00bf}
+.fuchsia-background{background-color:#fa00fa}
+.gray{color:#606060}
+.gray-background{background-color:#7d7d7d}
+.green{color:#006000}
+.green-background{background-color:#007d00}
+.lime{color:#00bf00}
+.lime-background{background-color:#00fa00}
+.maroon{color:#600000}
+.maroon-background{background-color:#7d0000}
+.navy{color:#000060}
+.navy-background{background-color:#00007d}
+.olive{color:#606000}
+.olive-background{background-color:#7d7d00}
+.purple{color:#600060}
+.purple-background{background-color:#7d007d}
+.red{color:#bf0000}
+.red-background{background-color:#fa0000}
+.silver{color:#909090}
+.silver-background{background-color:#bcbcbc}
+.teal{color:#006060}
+.teal-background{background-color:#007d7d}
+.white{color:#bfbfbf}
+.white-background{background-color:#fafafa}
+.yellow{color:#bfbf00}
+.yellow-background{background-color:#fafa00}
+span.icon>.fa{cursor:default}
+.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 
1px 2px rgba(0,0,0,.5);cursor:default}
+.admonitionblock td.icon .icon-note:before{content:"\f05a";color:#19407c}
+.admonitionblock td.icon .icon-tip:before{content:"\f0eb";text-shadow:1px 1px 
2px rgba(155,155,0,.8);color:#111}
+.admonitionblock td.icon .icon-warning:before{content:"\f071";color:#bf6900}
+.admonitionblock td.icon .icon-caution:before{content:"\f06d";color:#bf3400}
+.admonitionblock td.icon .icon-important:before{content:"\f06a";color:#bf0000}
+.conum[data-value]{display:inline-block;color:#fff!important;background-color:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open
 Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
+.conum[data-value] *{color:#fff!important}
+.conum[data-value]+b{display:none}
+.conum[data-value]:after{content:attr(data-value)}
+pre .conum[data-value]{position:relative;top:-.125em}
+b.conum *{color:inherit!important}
+.conum:not([data-value]):empty{display:none}
+h1,h2{letter-spacing:-.01em}
+dt,th.tableblock,td.content{text-rendering:optimizeLegibility}
+p,td.content{letter-spacing:-.01em}
+p strong,td.content strong{letter-spacing:-.005em}
+p,blockquote,dt,td.content{font-size:1.0625rem}
+p{margin-bottom:1.25rem}
+.sidebarblock p,.sidebarblock dt,.sidebarblock 
td.content,p.tableblock{font-size:1em}
+.exampleblock>.content{background-color:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0
 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
+.print-only{display:none!important}
+@media print{@page{margin:1.25cm .75cm}
+*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
+a{color:inherit!important;text-decoration:underline!important}
+a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
+a[href^="http:"]:not(.bare):after,a[href^="https:"]:not(.bare):after{content:"("
 attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
+abbr[title]:after{content:" (" attr(title) ")"}
+pre,blockquote,tr,img{page-break-inside:avoid}
+thead{display:table-header-group}
+img{max-width:100%!important}
+p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
+h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
+#toc,.sidebarblock,.exampleblock>.content{background:none!important}
+#toc{border-bottom:1px solid #ddddd8!important;padding-bottom:0!important}
+.sect1{padding-bottom:0!important}
+.sect1+.sect1{border:0!important}
+#header>h1:first-child{margin-top:1.25rem}
+body.book #header{text-align:center}
+body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em 0}
+body.book #header 
.details{border:0!important;display:block;padding:0!important}
+body.book #header .details span:first-child{margin-left:0!important}
+body.book #header .details br{display:block}
+body.book #header .details br+span:before{content:none!important}
+body.book 
#toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
+body.book #toc,body.book #preamble,body.book h1.sect0,body.book 
.sect1>h2{page-break-before:always}
+.listingblock code[data-lang]:before{display:block}
+#footer{background:none!important;padding:0 .9375em}
+#footer-text{color:rgba(0,0,0,.6)!important;font-size:.9em}
+.hide-on-print{display:none!important}
+.print-only{display:block!important}
+.hide-for-print{display:none!important}
+.show-for-print{display:inherit!important}}
+</style>
+<link rel="stylesheet" 
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css";>
+</head>
+<body class="article">
+<div id="header">
+<h1>Apache NiFi User Guide</h1>
+<div class="details">
+<span id="author" class="author">Apache NiFi Team</span><br>
+<span id="email" class="email"><a 
href="mailto:d...@nifi.incubator.apache.org";>d...@nifi.incubator.apache.org</a></span><br>
+</div>
+<div id="toc" class="toc">
+<div id="toctitle">Table of Contents</div>
+<ul class="sectlevel1">
+<li><a href="user-guide.html#introduction">Introduction</a></li>
+<li><a href="user-guide.html#terminology">Terminology</a></li>
+<li><a href="user-guide.html#User_Interface">NiFi User Interface</a></li>
+<li><a href="user-guide.html#building-a-dataflow">Building a DataFlow</a>
+<ul class="sectlevel2">
+<li><a href="user-guide.html#adding-components-to-the-canvas">Adding 
Components to the Canvas</a></li>
+<li><a href="user-guide.html#configuring-a-processor">Configuring a 
Processor</a></li>
+<li><a href="user-guide.html#additional-help">Additional Help</a></li>
+<li><a 
href="user-guide.html#Controller_Services_and_Reporting_Tasks">Controller 
Services and Reporting Tasks</a></li>
+<li><a href="user-guide.html#connecting-components">Connecting 
Components</a></li>
+<li><a href="user-guide.html#processor-validation">Processor 
Validation</a></li>
+<li><a href="user-guide.html#example-dataflow">Example Dataflow</a></li>
+</ul>
+</li>
+<li><a href="user-guide.html#command-and-control-of-dataflow">Command and 
Control of DataFlow</a>
+<ul class="sectlevel2">
+<li><a href="user-guide.html#starting-a-component">Starting a 
Component</a></li>
+<li><a href="user-guide.html#stopping-a-component">Stopping a 
Component</a></li>
+<li><a 
href="user-guide.html#enabling-disabling-a-component">Enabling/Disabling a 
Component</a></li>
+<li><a href="user-guide.html#Remote_Group_Transmission">Remote Process Group 
Transmission</a></li>
+</ul>
+</li>
+<li><a href="user-guide.html#navigating">Navigating within a DataFlow</a></li>
+<li><a href="user-guide.html#monitoring">Monitoring of DataFlow</a>
+<ul class="sectlevel2">
+<li><a href="user-guide.html#processor_anatomy">Anatomy of a Processor</a></li>
+<li><a href="user-guide.html#process_group_anatomy">Anatomy of a Process 
Group</a></li>
+<li><a href="user-guide.html#remote_group_anatomy">Anatomy of a Remote Process 
Group</a></li>
+<li><a href="user-guide.html#Summary_Page">Summary Page</a></li>
+<li><a href="user-guide.html#Stats_History">Historical Statistics of a 
Component</a></li>
+</ul>
+</li>
+<li><a href="user-guide.html#templates">Templates</a>
+<ul class="sectlevel2">
+<li><a href="user-guide.html#Create_Template">Creating a Template</a></li>
+<li><a href="user-guide.html#instantiating-a-template">Instantiating a 
Template</a></li>
+<li><a href="user-guide.html#Manage_Templates">Managing Templates</a></li>
+</ul>
+</li>
+<li><a href="user-guide.html#data-provenance">Data Provenance</a>
+<ul class="sectlevel2">
+<li><a href="user-guide.html#searching-for-events">Searching for 
Events</a></li>
+<li><a href="user-guide.html#event_details">Details of an Event</a></li>
+<li><a href="user-guide.html#replaying-a-flowfile">Replaying a 
FlowFile</a></li>
+<li><a href="user-guide.html#viewing-flowfile-lineage">Viewing FlowFile 
Lineage</a></li>
+</ul>
+</li>
+<li><a href="user-guide.html#other_management_features">Other Management 
Features</a></li>
+</ul>
+</div>
+</div>
+<div id="content">
+<div class="sect1">
+<h2 id="introduction"><a class="anchor" 
href="user-guide.html#introduction"></a>Introduction</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Apache NiFi (Incubating) is a dataflow system based on the concepts of 
flow-based programming. It supports
+powerful and scalable directed graphs of data routing, transformation, and 
system mediation logic. NiFi has
+a web-based user interface for design, control, feedback, and monitoring of 
dataflows. It is highly configurable
+along several dimensions of quality of service, such as loss-tolerant versus 
guaranteed delivery, low latency versus
+high throughput, and priority-based queuing. NiFi provides fine-grained data 
provenance for all data received, forked, joined
+cloned, modified, sent, and ultimately dropped upon reaching its configured 
end-state.</p>
+</div>
+<div class="paragraph">
+<p>See the Admin Guide for information about system requirements, 
installation, and configuration. Once NiFi is installed,
+use a supported web browser to view the User Interface. Supported web browsers 
include:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Internet Explorer 9+ (see note below)</p>
+</li>
+<li>
+<p>Mozilla FireFox 24+</p>
+</li>
+<li>
+<p>Google Chrome 36+</p>
+</li>
+<li>
+<p>Safari 8</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Note that there is a known issue in Internet Explorer (IE) 10 and 11 that 
can cause problems when moving items on the NiFi graph. If you encounter this 
problem, we suggest using a browser other than IE. This known issue is 
described here: <a 
href="https://connect.microsoft.com/IE/Feedback/Details/1050422"; 
class="bare">https://connect.microsoft.com/IE/Feedback/Details/1050422</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="terminology"><a class="anchor" 
href="user-guide.html#terminology"></a>Terminology</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p><strong>DataFlow Manager</strong>: A DataFlow Manager (DFM) is a NiFi user 
who has permissions to add, remove, and modify components of a NiFi 
dataflow.</p>
+</div>
+<div class="paragraph">
+<p><strong>FlowFile</strong>: The FlowFile represents a single piece of data 
in NiFi. A FlowFile is made up of two components:
+       FlowFile Attributes and FlowFile Content.
+       Content is the data that is represented by the FlowFile. Attributes are 
characteristics that provide information or
+       context about the data; they are made up of key-value pairs.
+       All FlowFiles have the following Standard Attributes:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>uuid</strong>: A unique identifier for the FlowFile</p>
+</li>
+<li>
+<p><strong>filename</strong>: A human-readable filename that may be used when 
storing the data to disk or in an external service</p>
+</li>
+<li>
+<p><strong>path</strong>: A hierarchically structured value that can be used 
when storing data to disk or an external service so that the data is not stored 
in a single directory</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><strong>Processor</strong>: The Processor is the NiFi component that is 
used to listen for incoming data; pull data from external sources;
+       publish data to external sources; and route, transform, or extract 
information from FlowFiles.</p>
+</div>
+<div class="paragraph">
+<p><strong>Relationship</strong>: Each Processor has zero or more 
Relationships defined for it. These Relationships are named to indicate the 
result of processing a FlowFile.
+       After a Processor has finished processing a FlowFile, it will route (or 
“transfer”) the FlowFile to one of the Relationships.
+       A DFM is then able to connect each of these Relationships to other 
components in order to specify where the FlowFile should
+       go next under each potential processing result.</p>
+</div>
+<div class="paragraph">
+<p><strong>Connection</strong>: A DFM creates an automated dataflow by 
dragging components from the Components part of the NiFi toolbar to the canvas
+       and then connecting the components together via Connections. Each 
connection consists of one or more Relationships.
+       For each Connection that is drawn, a DFM can determine which 
Relationships should be used for the Connection.
+       This allows data to be routed in different ways based on its processing 
outcome. Each connection houses a FlowFile Queue.
+       When a FlowFile is transferred to a particular Relationship, it is 
added to the queue belonging to the associated Connection.</p>
+</div>
+<div class="paragraph">
+<p><strong>Controller Service</strong>: Controller Services are extension 
points that, after being added and configured by a DFM in the User Interface, 
will start up when NiFi starts up and provide information for use by other 
components (such as processors or other controller services). A common 
Controller Service used by several components is the StandardSSLContextService. 
It provides the ability to configure keystore and/or truststore properties once 
and reuse that configuration throughout the application. The idea is that, 
rather than configure this information in every processor that might need it, 
the controller service provides it for any processor to use as needed.</p>
+</div>
+<div class="paragraph">
+<p><strong>Reporting Task</strong>: Reporting Tasks run in the background to 
provide statistical reports about what is happening in the NiFi instance. The 
DFM adds and configures Reporting Tasks in the User Interface as desired. 
Common reporting tasks include the ControllerStatusReportingTask, 
MonitorDiskUsage reporting task, MonitorMemory reporting task, and the 
StandardGangliaReporter.</p>
+</div>
+<div class="paragraph">
+<p><strong>Funnel</strong>: A funnel is a NiFi component that is used to 
combine the data from several Connections into a single Connection.</p>
+</div>
+<div class="paragraph">
+<p><strong>Process Group</strong>: When a dataflow becomes complex, it often 
is beneficial to reason about the dataflow at a higher, more abstract level.
+       NiFi allows multiple components, such as Processors, to be grouped 
together into a Process Group.
+       The NiFi User Interface then makes it easy for a DFM to connect 
together multiple Process Groups into a logical dataflow,
+       as well as allowing the DFM to enter a Process Group in order to see 
and manipulate the components within the Process Group.</p>
+</div>
+<div class="paragraph">
+<p><strong>Port</strong>: Dataflows that are constructed using one or more 
Process Groups need a way to connect a Process Group to other dataflow 
components.
+       This is achieved by using Ports. A DFM can add any number of Input 
Ports and Output Ports to a Process Group and name these ports 
appropriately.</p>
+</div>
+<div class="paragraph">
+<p><strong>Remote Process Group</strong>: Just as data is transferred into and 
out of a Process Group, it is sometimes necessary to transfer data from one 
instance of NiFi to another.
+       While NiFi provides many different mechanisms for transferring data 
from one system to another, Remote Process Groups are often the easiest way to 
accomplish
+       this if transferring data to another instance of NiFi.</p>
+</div>
+<div class="paragraph">
+<p><strong>Bulletin</strong>: The NiFi User Interface provides a significant 
amount of monitoring and feedback about the current status of the application.
+       In addition to rolling statistics and the current status provided for 
each component, components are able to report Bulletins.
+       Whenever a component reports a Bulletin, a bulletin icon is displayed 
on that component. System-level bulletins are displayed on the Status bar near 
the top of the page.
+       Using the mouse to hover over that icon will provide a tool-tip that 
shows the time and severity (Debug, Info, Warning, Error) of the Bulletin,
+       as well as the message of the Bulletin.
+       Bulletins from all components can also be viewed and filtered in the 
Bulletin Board Page, available in the Management Toolbar.</p>
+</div>
+<div class="paragraph">
+<p><strong>Template</strong>: Often times, a dataflow is comprised of many 
sub-flows that could be reused. NiFi allows DFMs to select a part of the 
dataflow
+       (or the entire dataflow) and create a Template. This Template is given 
a name and can then be dragged onto the canvas just like the other components.
+       As a result, several components may be combined together to make a 
larger building block from which to create a dataflow.
+       These templates can also be exported as XML and imported into another 
NiFi instance, allowing these building blocks to be shared.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="User_Interface"><a class="anchor" 
href="user-guide.html#User_Interface"></a>NiFi User Interface</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The NiFi User Interface (UI) provides mechanisms for creating automated 
dataflows, as well as visualizing,
+editing, monitoring, and administering those dataflows. The UI can be broken 
down into several segments,
+each responsible for different functionality of the application. This section 
provides screenshots of the
+application and highlights the different segments of the UI. Each segment is 
discussed in further detail later
+in the document.</p>
+</div>
+<div class="paragraph">
+<p>When the application is started, the user is able to navigate to the User 
Interface by going to the default address of
+<code>http://&lt;hostname&gt;:8080/nifi</code> in a web browser. There are no 
permissions configured by default, so anyone is
+able to view and modify the dataflow. For information on securing the system, 
see the Systems Administrator guide.</p>
+</div>
+<div class="paragraph">
+<p>When a DFM navigates to the UI for the first time, a blank canvas is 
provided on which a dataflow can be built:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/new-flow.png" alt="Empty Flow">
+</div>
+</div>
+<div class="paragraph">
+<p>Along the top of the of the screen is a toolbar that contains several of 
these segments.
+To the left is the Components Toolbar. This toolbar consists of the different 
components that can be dragged onto the canvas.</p>
+</div>
+<div class="paragraph">
+<p>Next to the Components Toolbar is the Actions Toolbar. This toolbar 
consists of buttons to manipulate the existing
+components on the graph. To the right of the Actions Toolbar is the Search 
Toolbar. This toolbar consists of a single
+Search field that allows users to easily find components on the graph. Users 
are able to search by component name,
+type, identifier, configuration properties, and their values.</p>
+</div>
+<div class="paragraph">
+<p>The Management Toolbar sits to the right-hand side of the screen. This 
toolbar consists of buttons that are
+used by DFMs to manage the flow as well as by administrators who manage user 
access
+and configure system properties, such as how many system resources should be 
provided to the application.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/nifi-toolbar-components.png" alt="NiFi Components Toolbar">
+</div>
+</div>
+<div class="paragraph">
+<p>Next, we have segments that provide capabilities to easily navigate around 
the graph. On the left-hand side is a toolbar that
+provides the ability to pan around the graph and zoom in and out. On the 
right-hand side is a “Birds-Eye View” of the dataflow.
+This provides a high-level view of the dataflow and allows the user to quickly 
and easily pan across large portions of the dataflow.
+Along the top of the screen is a trail of breadcrumbs. As users navigate into 
and out of Process Groups, the breadcrumbs show
+the depth in the flow and each Process Group that was entered to reach this 
depth. Each of the Process Groups listed in the breadcrumbs
+is a link that will take you back up to that level in the flow.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/nifi-navigation.png" alt="NiFi Navigation">
+</div>
+</div>
+<div id="status_bar" class="paragraph">
+<p>Below the breadcrumbs lives the Status bar. The Status bar provides 
information about how many Processors exist in the graph in
+each state (Stopped, Running, Invalid, Disabled), how many Remote Process 
Groups exist on the graph in each state
+(Transmitting, Not Transmitting), the number of threads that are currently 
active in the flow, the amount of data that currently
+exists in the flow, and the timestamp at which all of this information was 
last refreshed. If there are any System-Level bulletins,
+these are shown in the Status bar as well. Additionally, if the instance of 
NiFi is clustered, the Status bar shows how many nodes
+are in the cluster and how many are currently connected.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/status-bar.png" alt="NiFi Status Bar">
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="building-a-dataflow"><a class="anchor" 
href="user-guide.html#building-a-dataflow"></a>Building a DataFlow</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>A DFM is able to build an automated dataflow using the NiFi User Interface 
(UI). Simply drag components from the toolbar to the canvas, configure the 
components to meet specific needs, and connect
+the components together.</p>
+</div>
+<div class="sect2">
+<h3 id="adding-components-to-the-canvas"><a class="anchor" 
href="user-guide.html#adding-components-to-the-canvas"></a>Adding Components to 
the Canvas</h3>
+<div class="paragraph">
+<p>In the User Interface section above outlined the different segments of the 
UI and pointed out a Components Toolbar.
+This section looks at each of the Components in that toolbar:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/components.png" alt="Components">
+</div>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconProcessor.png" alt="Processor" 
width="32"></span>
+<strong>Processor</strong>: The Processor is the most commonly used component, 
as it is responsible for data ingress, egress, routing, and
+       manipulating. There are many different types of Processors. In fact, 
this is a very common Extension Point in NiFi,
+       meaning that many vendors may implement their own Processors to perform 
whatever functions are necessary for their use case.
+       When a Processor is dragged onto the graph, the user is presented with 
a dialog to choose which type of Processor to use:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/add-processor.png" alt="Add Processor Dialog">
+</div>
+</div>
+<div class="paragraph">
+<p>In the top-right corner, the user is able to filter the list based on the 
Processor Type or the Tags associated with a Processor.
+Processor developers have the ability to add Tags to their Processors. These 
tags are used in this dialog for filtering and are
+displayed on the left-hand side in a Tag Cloud. The more Processors that exist 
with a particular Tag, the larger the Tag appears
+in the Tag Cloud. Clicking a Tag in the Cloud will filter the available 
Processors to only those that contain that Tag. If multiple
+Tags are selected, only those Processors that contain all of those Tags are 
shown. For example, if we want to show only those
+Processors that allow us to ingest data via HTTP, we can select both the 
<code>http</code> Tag and the <code>ingest</code> Tag:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/add-processor-with-tag-cloud.png" alt="Add Processor with Tag 
Cloud">
+</div>
+</div>
+<div class="paragraph">
+<p>Clicking the <code>Add</code> button or double-clicking on a Processor Type 
will add the selected Processor to the canvas at the
+location that it was dropped.</p>
+</div>
+<div class="paragraph">
+<p><strong>Note</strong>: For any component added to the graph, it is possible 
to select it with the mouse and move it anywhere on the graph. Also, it is 
possible to select multiple items at once by either holding down the Shift key 
and selecting each item or by holding down the Shift key and dragging a 
selection box around the desired components.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconInputPort.png" alt="Input Port" 
width="32"></span>
+<strong>Input Port</strong>: Input Ports provide a mechanism for transferring 
data into a Process Group. When an Input Port is dragged
+onto the canvas, the DFM is prompted to name the Port. All Ports within a 
Process Group must have unique names.</p>
+</div>
+<div class="paragraph">
+<p>All components exist only within a Process Group. When a user initially 
navigates to the NiFi page, the user is placed in the
+Root Process Group. If the Input Port is dragged onto the Root Process Group, 
the Input Port provides a mechanism
+to receive data from remote instances of NiFi. In this case, the Input Port 
can be configured to restrict access to
+appropriate users.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconOutputPort.png" alt="Output Port" 
width="32"></span>
+<strong>Output Port</strong>: Output Ports provide a mechanism for 
transferring data from a Process Group to destinations outside
+of the Process Group. When an Output Port is dragged onto the canvas, the DFM 
is prompted to name the Port. All Ports
+within a Process Group must have unique names.</p>
+</div>
+<div class="paragraph">
+<p>If the Output Port is dragged onto the Root Process Group, the Output Port 
provides a mechanism for sending data to
+remote instances of NiFi. In this case, the Port acts as a queue. As remote 
instances of NiFi pull data from the port,
+that data is removed from the queues of the incoming Connections.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconProcessGroup.png" alt="Process 
Group" width="32"></span>
+<strong>Process Group</strong>: Process Groups can be used to logically group 
a set of components so that the dataflow is easier to understand
+and maintain. When a Process Group is dragged onto the canvas, the DFM is 
prompted to name the Process Group. All Process
+Groups within the same parent group must have unique names. The Process Group 
will then be nested within that parent group.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconRemoteProcessGroup.png" 
alt="Remote Process Group" width="32"></span>
+<strong>Remote Process Group</strong>: Remote Process Groups appear and behave 
similar to Process Groups. However, the Remote Process Group (RPG)
+references a remote instance of NiFi. When an RPG is dragged onto the canvas, 
rather than being prompted for a name, the DFM
+is prompted for the URL of the remote NiFi instance. If the remote NiFi is a 
clustered instance, the URL that should be used
+is the URL of the remote instance&#8217;s NiFi Cluster Manager (NCM). When 
data is transferred to a clustered instance of NiFi
+via an RPG, the RPG it will first connect to the remote instance&#8217;s NCM 
to determine which nodes are in the cluster and
+how busy each node is. This information is then used to load balance the data 
that is pushed to each node. The remote NCM is
+then interrogated periodically to determine information about any nodes that 
are dropped from or added to the cluster and to recalculate the load balancing 
based on each node&#8217;s load.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconFunnel.png" alt="Funnel" 
width="32"></span>
+<strong>Funnel</strong>: Funnels are used to combine the data from many 
Connections into a single Connection. This has two advantages.
+First, if many Connections are created with the same destination, the canvas 
can become cluttered if those Connections
+have to span a large space. By funneling these Connections into a single 
Connection, that single Connection can then be
+drawn to span that large space instead. Secondly, Connections can be 
configured with FlowFile Prioritizers. Data from
+several Connections can be funneled into a single Connection, providing the 
ability to Prioritize all of the data on that
+one Connection, rather than prioritizing the data on each Connection 
independently.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconTemplate.png" alt="Template" 
width="32"></span>
+<strong>Template</strong>: Templates can be created by DFMs from sections of 
the flow, or they can be imported from other
+dataflows. These Templates provide larger building blocks for creating a  
complex flow quickly. When the Template is
+dragged onto the canvas, the DFM is provided a dialog to choose which Template 
to add to the canvas:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/instantiate-template.png" alt="Instantiate Template Dialog">
+</div>
+</div>
+<div class="paragraph">
+<p>Clicking the drop-down box shows all available Templates. Any Template that 
was created with a description will show a question mark
+icon, indicating that there is more information. Hovering over the icon with 
the mouse will show this description:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/instantiate-template-description.png" alt="Instantiate 
Template Dialog">
+</div>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/iconLabel.png" alt="Label"></span>
+<strong>Label</strong>: Labels are used to provide documentation to parts of a 
dataflow. When a Label is dropped onto the canvas,
+it is created with a default size. The Label can then be resized by dragging 
the handle in the bottom-right corner.
+The Label has no text when initially created. The text of the Label can be 
added by right-clicking on the Label and
+choosing <code>Configure...</code></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="configuring-a-processor"><a class="anchor" 
href="user-guide.html#configuring-a-processor"></a>Configuring a Processor</h3>
+<div class="paragraph">
+<p>Once a Processor has been dragged onto the Canvas, it is ready to 
configure. This is done by right-clicking on the
+Processor and clicking the <code>Configure...</code> option from the context 
menu. The configuration dialog is opened with four
+different tabs, each of which is discussed below. Once you have finished 
configuring the Processor, you can apply
+the changes by clicking the <code>Apply</code> button or cancel all changes by 
clicking the <code>Cancel</code> button.</p>
+</div>
+<div class="paragraph">
+<p>Note that after a Processor has been started, the context menu shown for 
the Processor no longer has a <code>Configure...</code>
+option but rather has a <code>View Configuration</code> option. Processor 
configuration cannot be changed while the Processor is
+running. You must first stop the Processor and wait for all of its active 
tasks to complete before configuring
+the Processor again.</p>
+</div>
+<div class="sect3">
+<h4 id="settings-tab"><a class="anchor" 
href="user-guide.html#settings-tab"></a>Settings Tab</h4>
+<div class="paragraph">
+<p>The first tab in the Processor Configuration dialog is the Settings tab:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/settings-tab.png" alt="Settings Tab">
+</div>
+</div>
+<div class="paragraph">
+<p>This tab contains several different configuration items. First, it allows 
the DFM to change the name of the Processor.
+The name of a Processor by default is the same as the Processor type. Next to 
the Processor Name is a checkbox, indicating
+ whether the Processor is Enabled. When a Processor is added to the graph, it 
is enabled. If the
+Processor is disabled, it cannot be started. The disabled state is used to 
indicate that when a group of Processors is started,
+such as when a DFM starts an entire Process Group, this (disabled) Processor 
should be excluded.</p>
+</div>
+<div class="paragraph">
+<p>Below the Name configuration, the Processor&#8217;s unique identifier is 
displayed along with the Processor&#8217;s type. These
+values cannot be modified.</p>
+</div>
+<div class="paragraph">
+<p>Next are two dialogues for configuring &#8216;Penalty duration&#8217; and 
&#8216;Yield duration&#8217;. During the normal course of processing a
+piece of data (a FlowFile), an event may occur that indicates that the data 
cannot be processed at this time but the
+data may be processable at a later time. When this occurs, the Processor may 
choose to Penalize the FlowFile. This will
+prevent the FlowFile from being Processed for some period of time. For 
example, if the Processor is to push the data
+to a remote service, but the remote service already has a file with the same 
name as the filename that the Processor
+is specifying, the Processor may penalize the FlowFile. The &#8216;Penalty 
duration&#8217; allows the DFM to specify how long the
+FlowFile should be penalized. The default value is 30 seconds.</p>
+</div>
+<div class="paragraph">
+<p>Similarly, the Processor may determine that some situation exists such that 
the Processor can no longer make any progress,
+regardless of the data that it is processing. For example, if a Processor is 
to push data to a remote service and that
+service is not responding, the Processor cannot make any progress. As a 
result, the Processor should &#8216;yield,&#8217; which will
+prevent the Processor from being scheduled to run for some period of time. 
That period of time is specified by setting
+the &#8216;Yield duration.&#8217; The default value is 1 second.</p>
+</div>
+<div class="paragraph">
+<p>The last configurable option on the left-hand side of the Settings tab is 
the Bulletin level. Whenever the Processor writes
+to its log, the Processor also will generate a Bulletin. This setting 
indicates the lowest level of Bulletin that should be
+shown in the User Interface. By default, the Bulletin level is set to WARN, 
which means it will display all warning and error-level
+bulletins.</p>
+</div>
+<div class="paragraph">
+<p>The right-hand side of the Settings tab contains an &#8216;Auto-terminate 
relationships&#8217; section. Each of the Relationships that is
+defined by the Processor is listed here, along with its description. In order 
for a Processor to be considered valid and
+able to run, each Relationship defined by the Processor must be either 
connected to a downstream component or auto-terminated.
+If a Relationship is auto-terminated, any FlowFile that is routed to that 
Relationship will be removed from the flow and
+its processing considered complete. Any Relationship that is already connected 
to a downstream component cannot be auto-terminated.
+The Relationship must first be removed from any Connection that uses it. 
Additionally, for any Relationship that is selected to be
+auto-terminated, the auto-termination status will be cleared (turned off) if 
the Relationship is added to a Connection.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="scheduling-tab"><a class="anchor" 
href="user-guide.html#scheduling-tab"></a>Scheduling Tab</h4>
+<div class="paragraph">
+<p>The second tab in the Processor Configuration dialog is the Scheduling 
Tab:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/scheduling-tab.png" alt="Scheduling Tab">
+</div>
+</div>
+<div class="paragraph">
+<p>The first configuration option is the Scheduling Strategy. There are three 
options for scheduling components:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Timer driven</strong>: This is the default mode. The Processor will 
be scheduled to run on a regular interval. The interval
+at which the Processor is run is defined by the &#8216;Run schedule&#8217; 
option (see below).</p>
+</li>
+<li>
+<p><strong>Event driven</strong>: When this mode is selected, the Processor 
will be triggered to run by an event, and that event occurs when FlowFiles 
enter Connections
+feeding this Processor. This mode is currently considered experimental and is 
not supported by all Processors. When this mode is
+selected, the &#8216;Run schedule&#8217; option is not configurable, as the 
Processor is not triggered to run periodically but
+    as the result of an event. Additionally, this is the only mode for which 
the &#8216;Concurrent tasks&#8217;
+option can be set to 0. In this case, the number of threads is limited only by 
the size of the Event-Driven Thread Pool that
+the administrator has configured.</p>
+</li>
+<li>
+<p><strong>CRON driven</strong>: When using the CRON driven scheduling mode, 
the Processor is scheduled to run periodically, similar to the
+Timer driven scheduling mode. However, the CRON driven mode provides 
significantly more flexibility at the expense of
+increasing the complexity of the configuration. This value is made up of six 
fields, each separated by a space. These
+fields include:</p>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Seconds</p>
+</li>
+<li>
+<p>Minutes</p>
+</li>
+<li>
+<p>Hours</p>
+</li>
+<li>
+<p>Day of Month</p>
+</li>
+<li>
+<p>Month</p>
+</li>
+<li>
+<p>Day of Week</p>
+</li>
+<li>
+<p>Year</p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>The value for each of these fields should be a number, range, or increment.
+Range here refers to a syntax of &lt;number&gt;-&lt;number&gt;.
+For example,the Seconds field could be set to 0-30, meaning that the Processor 
should only be scheduled if the time is 0 to 30 seconds
+after the minute. Additionally, a value of <code>*</code> indicates that all 
values are valid for this field. Multiple values can also
+be entered using a <code>,</code> as a separator: <code>0,5,10,15,30</code>.
+An increment is written as &lt;start value&gt;/&lt;increment&gt;. For example, 
settings a value of <code>0/10</code> for the seconds fields means that valid
+values are 0, 10, 20, 30, 40, and 50. However, if we change this to 
<code>5/10</code>, valid values become 5, 15, 25, 35, 45, and 55.</p>
+</div>
+<div class="paragraph">
+<p>For the Month field, valid values are 1 (January) through 12 (December).</p>
+</div>
+<div class="paragraph">
+<p>For the Day of Week field, valid values are 1 (Sunday) through 7 
(Saturday). Additionally, a value of <code>L</code> may be appended to one of 
these
+values to indicate the last occurrence of this day in the month. For example, 
<code>1L</code> can be used to indicate the last Monday of the month.</p>
+</div>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Next, the Scheduling Tab provides a configuration option named 
&#8216;Concurrent tasks.&#8217; This controls how many threads the Processor
+will use. Said a different way, this controls how many FlowFiles should be 
processed by this Processor at the same time. Increasing
+this value will typically allow the Processor to handle more data in the same 
amount of time. However, it does this by using system
+resources that then are not usable by other Processors. This essentially 
provides a relative weighting of Processors&#8201;&#8212;&#8201;it controls
+how much of the system&#8217;s resources should be allocated to this Processor 
instead of other Processors. This field is available for
+most Processors. There are, however, some types of Processors that can only be 
scheduled with a single Concurrent task.</p>
+</div>
+<div class="paragraph">
+<p>The &#8220;Run schedule&#8221; dictates how often the Processor should be 
scheduled to run. The valid values for this field depend on the selected
+Scheduling Strategy (see above). If using the Event driven Scheduling 
Strategy, this field is not available. When using the Timer driven
+Scheduling Strategy, this value is a time duration specified by a number 
followed by a time unit. For example, <code>1 second</code> or <code>5 
mins</code>.
+The default value of <code>0 sec</code> means that the Processor should run as 
often as possible as long as it has data to process. This is true
+for any time duration of 0, regardless of the time unit (i.e., <code>0 
sec</code>, <code>0 mins</code>, <code>0 days</code>). For an explanation of 
values that are
+applicable for the CRON driven Scheduling Strategy, see the description of the 
CRON driven Scheduling Strategy itself.</p>
+</div>
+<div class="paragraph">
+<p>The right-hand side of the tab contains a slider for choosing the 
&#8216;Run duration.&#8217; This controls how long the Processor should be 
scheduled
+to run each time that it is triggered. On the left-hand side of the slider, it 
is marked &#8216;Lower latency&#8217; while the right-hand side
+is marked &#8216;Higher throughput.&#8217; When a Processor finishes running, 
it must update the repository in order to transfer the FlowFiles to
+the next Connection. Updating the repository is expensive, so the more work 
that can be done at once before updating the repository,
+the more work the Processor can handle (Higher throughput). However, this 
means that the next Processor cannot start processing
+those FlowFiles until the previous Process updates this repository. As a 
result, the latency will be longer (the time required to process
+the FlowFile from beginning to end will be longer). As a result, the slider 
provides a spectrum from which the DFM can choose to favor
+Lower Latency or Higher Throughput.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="properties-tab"><a class="anchor" 
href="user-guide.html#properties-tab"></a>Properties Tab</h4>
+<div class="paragraph">
+<p>The Properties Tab provides a mechanism to configure Processor-specific 
behavior. There are no default properties. Each type of Processor
+must define which Properties make sense for its use case. Below, we see the 
Properties Tab for a RouteOnAttribute Processor:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/properties-tab.png" alt="Properties Tab">
+</div>
+</div>
+<div class="paragraph">
+<p>This Processor, by default, has only a single property: &#8216;Routing 
Strategy.&#8217; The default value is &#8216;Route on Property name.&#8217; 
Next to
+the name of this property is a small question-mark symbol (
+<span class="image"><img src="images/iconInfo.png" alt="Question Mark"></span>
+). This help symbol is seen in other places throughout the User Interface, and 
it indicates that more information is available.
+Hovering over this symbol with the mouse will provide additional details about 
the property and the default value, as well as
+historical values that have been set for the Property.</p>
+</div>
+<div class="paragraph">
+<p>Clicking on the value for the property will allow a DFM to change the 
value. Depending on the values that are allowed for the property,
+the user is either provided a drop-down from which to choose a value or is 
given a text area to type a value:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/edit-property-dropdown.png" alt="Edit Property with Dropdown">
+</div>
+</div>
+<div class="paragraph">
+<p>In the top-right corner of the tab is a button for adding a New Property. 
Clicking this button will provide the DFM with a dialog to
+enter the name and value of a new property. Not all Processors allow 
User-Defined properties. In processors that do not allow them,
+the Processor becomes invalid when User-Defined properties are applied. 
RouteOnAttribute, however, does allow User-Defined properties.
+In fact, this Processor will not be valid until the user has added a 
property.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/edit-property-textarea.png" alt="Edit 
Property with Text Area"></span></p>
+</div>
+<div class="paragraph">
+<p>Note that after a User-Defined property has been added, an icon will appear 
on the right-hand side of that row (
+<span class="image"><img src="images/iconDelete.png" alt="Delete Icon"></span>
+). Clicking this button will remove the User-Defined property from the 
Processor.</p>
+</div>
+<div class="paragraph">
+<p>Some processors also have an Advanced User Interface (UI) built into them. 
For example, the UpdateAttribute processor has an Advanced UI. To access the 
Advanced UI, click the <code>Advanced</code> button that appears at the bottom 
of the Configure Processor window. Only processors that have an Advanced UI 
will have this button.</p>
+</div>
+<div class="paragraph">
+<p>Some processors have properties that refer to other components, such as 
Controller Services, which also need to be configured. For example, the GetHTTP 
processor has an SSLContextService property, which refers to the 
StandardSSLContextService controller service. When DFMs want to configure this 
property but have not yet created and configured the controller service, they 
have the option to create the service on the spot, as depicted in the image 
below. For more information about configuring Controller Services, see the <a 
href="user-guide.html#Controller_Services_and_Reporting_Tasks">Controller 
Services and Reporting Tasks</a> section.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/create-service-ssl-context.png" 
alt="Create Service" width="700"></span></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="comments-tab"><a class="anchor" 
href="user-guide.html#comments-tab"></a>Comments Tab</h4>
+<div class="paragraph">
+<p>The last tab in the Processor configuration dialog is the Comments tab. 
This tab simply provides an area for users to include
+whatever comments are appropriate for this component. Use of the Comments tab 
is optional:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/comments-tab.png" alt="Comments Tab">
+</div>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="additional-help"><a class="anchor" 
href="user-guide.html#additional-help"></a>Additional Help</h3>
+<div class="paragraph">
+<p>The user may access additional documentation about each Processor&#8217;s 
usage by right-clicking
+on the Processor and then selecting &#8216;Usage&#8217; from the context menu. 
Alternatively, clicking the &#8216;Help&#8217; link in the top-right
+corner of the User Interface will provide a Help page with all of the 
documentation, including usage documentation
+for all the Processors that are available. Clicking on the desired Processor 
in the list will display its usage documentation.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="Controller_Services_and_Reporting_Tasks"><a class="anchor" 
href="user-guide.html#Controller_Services_and_Reporting_Tasks"></a>Controller 
Services and Reporting Tasks</h3>
+<div class="paragraph">
+<p>While DFMs have the ability to create Controller Services from the 
Configure Processor window, there is also a central place within the User 
Interface for adding and configuring both Controller Services and Reporting 
Tasks. To get there, click on the Controller Settings button in the Management 
section of the toolbar.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/controller-settings-button.png" 
alt="Controller Settings Button" width="200"></span></p>
+</div>
+<div class="paragraph">
+<p>The Controller Settings window has three tabs across the top: General, 
Controller Services, and Reporting Tasks. The General tab is for settings that 
pertain to general information about the NiFi instance. For example, here, the 
DFM can provide a unique name for the overall dataflow, as well as comments 
that describe the flow. Be aware that this information is visible to any other 
NiFi instance that connects remotely to this instance (using Remote Process 
Groups, a.k.a., Site-to-Site).</p>
+</div>
+<div class="paragraph">
+<p>The General tab also provides settings for the overall maximum thread 
counts of the instance, as well as the ability to click "Back-up flow" to 
create a backup copy of the current flow, which is saved by default in the 
/conf/archive directory.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/settings-general-tab.png" 
alt="Controller Settings General Tab" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>To the right of the General tab is the Controller Services tab. From this 
tab, the DFM may click the "+" button in the upper-right corner to create a new 
Controller Service.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/controller-services-tab.png" 
alt="Controller Services Tab" width="900"></span></p>
+</div>
+<div class="paragraph">
+<p>The Add Controller Service window opens. This window is similar to the Add 
Processor window. It provides a list of the available Controller Services on 
the right and a tag cloud, showing the most common catagory tags used for 
Controller Services, on the left. The DFM may click any tag in the tag cloud in 
order to narrow down the list of Controller Services to those that fit the 
categories desired. The DFM may also use the Filter field at the top of the 
window to search for the desired Contoller Service. Upon selecting a Controller 
Service from the list, the DFM can see a description of the the service below. 
Select the desired controller service and click Add, or simply double-click the 
name of the service to add it.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/add-controller-service-window.png" 
alt="Add Controller Service Window" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>Once a Controller Service has been added, the DFM may configure it by 
clicking the Edit button (pencil icon) in the far-right column. Other buttons 
in this column include the Enable button (to enable a configured service), the 
Remove button, and the Usage button, which links to the documentation for the 
particular Controller Service.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/controller-services-edit-buttons.png" 
alt="Controller Services Buttons"></span></p>
+</div>
+<div class="paragraph">
+<p>When the DFM clicks the Edit button, a Configure Controller Service window 
opens. It has three tabs: Settings, Properties, and Comments. This window is 
similar to the Configure Processor window. The Settings tab provides a place 
for the DFM to give the Controller Service a unique name (if desired). It also 
lists the UUID for the service and provides a list of other components 
(processors or other controller services) that reference the service.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img 
src="images/configure-controller-service-settings.png" alt="Configure 
Controller Service Settings" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>The Properties tab lists the various properties that apply to the 
particular controller service. As with configuring processors, the DFM may 
hover the mouse over the question mark icons to see more information about each 
property.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img 
src="images/configure-controller-service-properties.png" alt="Configure 
Controller Service Properties" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>The Comments tab is just an open-text field, where the DFM may include 
comments about the service. After configuring a Controller Service, click the 
Apply button to apply the configuration and close the window, or click the 
Cancel button to cancel the changes and close the window.</p>
+</div>
+<div class="paragraph">
+<p>Note that after a Controller Service has been configured, it must be 
enabled in order to run. Do this using the Enable button in the far-right 
column of the Controller Services tab of the Controller Settings window. Then, 
in order to modify an existing/running controller service, the DFM needs to 
stop/disable it (as well as all referencing processors, reporting tasks, and 
controller services). Rather than having to hunt down each component that is 
referenced by that controller service, the DFM has the ability to stop/disable 
them when disabling the controller service in question. Likewise, when enabling 
a controller service, the DFM has the option to start/enable all referencing 
processors, reporting tasks, and controller services.</p>
+</div>
+<div class="paragraph">
+<p>The Reporting Tasks tab behaves similarly to the Controller Services tab. 
The DFM has the option to add Reporting Tasks and configure them in the same 
way as Controller Services.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/reporting-tasks-tab.png" 
alt="Reporting Tasks Tab" width="900"></span></p>
+</div>
+<div class="paragraph">
+<p>Once a Reporting Task has been added, the DFM may configure it by clicking 
the Edit (pencil icon) in the far-right column. Other buttons in this column 
include the Start button, Remove button, and Usage button, which links to the 
documentation for the particular Reporting Task.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/reporting-tasks-edit-buttons2.png" 
alt="Reporting Tasks Buttons"></span></p>
+</div>
+<div class="paragraph">
+<p>When the DFM clicks the Edit button, a Configure Reporting Task window 
opens. It has three tabs: Settings, Properties, and Comments. This window is 
also similar to the Configure Processor window. The Settings tab provides a 
place for the DFM to give the Reporting Task a unique name (if desired). It 
also lists a UUID for the Reporting Task and provides settings for the 
task&#8217;s Scheduling Strategy and Run Schedule (similar to the same settings 
in a processor). The DFM may hover the mouse over the question mark icons to 
see more information about each setting.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/configure-reporting-task-settings.png" 
alt="Configure Reporting Task Settings" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>The Properties tab for a Reporting Task lists the properties that may be 
configured for the task. The DFM may hover the mouse over the question mark 
icons to see more information about each property.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img 
src="images/configure-reporting-task-properties.png" alt="Configure Reporting 
Task Properties" width="700"></span></p>
+</div>
+<div class="paragraph">
+<p>The Comments tab is just an open-text field, where the DFM may include 
comments about the task. After configuring the Reporting Task, click the Apply 
button to apply the configuration and close the window, or click Cancel to 
cancel the changes and close the window.</p>
+</div>
+<div class="paragraph">
+<p>When you want to run the Reporting Task, click the Start button in the 
far-right column of the Reporting Tasks tab.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="connecting-components"><a class="anchor" 
href="user-guide.html#connecting-components"></a>Connecting Components</h3>
+<div class="paragraph">
+<p>Once processors and other components have been added to the graph and 
configured, the next step is to connect them
+to one another so that NiFi knows what to do with each FlowFile after it has 
been processed. This is accomplished by creating a
+Connection between each component. When the user hovers the mouse over the 
center of a component, a new Connection icon (
+<span class="image"><img src="images/addConnect.png" alt="Connection 
Bubble"></span>
+) appears:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/processor-connection-bubble.png" 
alt="Processor with Connection Bubble"></span></p>
+</div>
+<div class="paragraph">
+<p>The user drags the Connection bubble from one component to another until 
the second component is highlighted. When the user
+releases the mouse, a &#8216;Create Connection&#8217; dialog appears. This 
dialog consists of two tabs: &#8216;Details&#8217; and &#8216;Settings&#8217;. 
They are
+discussed in detail below. Note that it is possible to draw a connection so 
that it loops back on the same processor. This can be
+useful if the DFM wants the processor to try to re-process FlowFiles if they 
go down a failure Relationship. To create this type of looping
+connection, simply drag the connection bubble away and then back to the same 
processor until it is highlighted. Then release the mouse and the same 
<em>Create Connection</em> dialog appears.</p>
+</div>
+<div class="sect3">
+<h4 id="details-tab"><a class="anchor" 
href="user-guide.html#details-tab"></a>Details Tab</h4>
+<div class="paragraph">
+<p>The Details Tab of the <em>Create Connection</em> dialog provides 
information about the source and destination components, including the 
component name, the
+component type, and the Process Group in which the component lives:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/create-connection.png" alt="Create Connection">
+</div>
+</div>
+<div class="paragraph">
+<p>Additionally, this tab provides the ability to choose which Relationships 
should be included in this Connection. At least one
+Relationship must be selected. If only one Relationship is available, it is 
automatically selected.</p>
+</div>
+<div class="paragraph">
+<p><strong>Note</strong>: If multiple Connections are added with the same 
Relationship, any FlowFile that is routed to that Relationship will
+automatically be &#8216;cloned&#8217;, and a copy will be sent to each of 
those Connections.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="settings"><a class="anchor" 
href="user-guide.html#settings"></a>Settings</h4>
+<div class="paragraph">
+<p>The Settings Tab provides the ability to configure the Connection&#8217;s 
name, FlowFile expiration, Back Pressure thresholds, and
+Prioritization:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/connection-settings.png" 
alt="Connection Settings"></span></p>
+</div>
+<div class="paragraph">
+<p>The Connection name is optional. If not specified, the name shown for the 
Connection will be names of the Relationships
+that are active for the Connection.</p>
+</div>
+<div class="paragraph">
+<p>File expiration is a concept by which data that cannot be processed in a 
timely fashion can be automatically removed from the flow.
+This is useful, for example, when the volume of data is expected to exceed the 
volume that can be sent to a remote site.
+In this case, the expiration can be used in conjunction with Prioritizers to 
ensure that the highest priority data is
+processed first and then anything that cannot be processed within a certain 
time period (one hour, for example) can be dropped. The expiration period is 
based on the time that the data entered the NiFi instance. In other words, if 
the file expiration on a given connection is set to <em>1 hour</em>, and a file 
that has been in the NiFi instance for one hour reaches that connection, it 
will expire. The default
+value of <code>0 sec</code> indicates that the data will never expire. When a 
file expiration other than <em>0 sec</em> is set, a small clock icon appears on 
the connection label, so the DFM can see it at-a-glance when looking at a flow 
on the graph.</p>
+</div>
+<div class="paragraph">
+<p>NiFi provides two configuration elements for Back Pressure. These 
thresholds indicate how much data should be
+allowed to exist in the queue before the component that is the source of the 
Connection is no longer scheduled to run.
+This allows the system to avoid being overrun with data. The first option 
provided is the &#8220;Back pressure object threshold.&#8221;
+This is the number of FlowFiles that can be in the queue before back pressure 
is applied. The second configuration option
+is the &#8220;Back pressure data size threshold.&#8221;
+This specifies the maximum amount of data (in size) that should be queued up 
before
+applying back pressure. This value is configured by entering a number followed 
by a data size (<code>B</code> for bytes, <code>KB</code> for
+kilobytes, <code>MB</code> for megabytes, <code>GB</code> for gigabytes, or 
<code>TB</code> for terabytes).</p>
+</div>
+<div class="paragraph">
+<p>The right-hand side of the tab provides the ability to prioritize the data 
in the queue so that higher priority data is
+processed first. Prioritizers can be dragged from the top (&#8216;Available 
prioritizers&#8217;) to the bottom (&#8216;Selected prioritizers&#8217;).
+Multiple prioritizers can be selected. The prioritizer that is at the top of 
the &#8216;Selected prioritizers&#8217; list is the highest
+priority. If two FlowFiles have the same value according to this prioritizer, 
the second prioritizer will determine which
+FlowFile to process first, and so on. If a prioritizer is no longer desired, 
it can then be dragged from the &#8216;Selected
+prioritizers&#8217; list to the &#8216;Available prioritizers&#8217; list.</p>
+</div>
+<div class="paragraph">
+<p>The following prioritizers are available:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>FirstInFirstOutPrioritizer</strong>: Given two FlowFiles, the on 
that reached the connection first will be processed first.</p>
+</li>
+<li>
+<p><strong>NewestFlowFileFirstPrioritizer</strong>: Given two FlowFiles, the 
one that is newest in the dataflow will be processed first.</p>
+</li>
+<li>

[... 1068 lines stripped ...]


Reply via email to