blob: 8fd4b684c294b7ef39124f50c50d96874379f1fe [file] [log] [blame]
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<title>Apache NiFi MiNiFi System Administrator&#39;s Guide</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="shortcut icon" href="/assets/images/nifi16.ico"/>
<link rel="stylesheet" href="/stylesheets/app.min.5c81cf462909783b5f788de8312885d5e08d20aa6dd5f6eb9507dd445444a6cb.css">
<link rel="stylesheet" href="/assets/stylesheets/font-awesome.min.css">
<script src="/assets/js/modernizr.js"></script>
<script src="/assets/js/webfontloader.js"></script>
<script>
var _paq = window._paq = window._paq || [];
_paq.push(['disableCookies']);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var baseUri = "//matomo.privacy.apache.org/";
_paq.push(['setTrackerUrl', baseUri + 'matomo.php']);
_paq.push(['setSiteId', '28']);
var trackerElement = document.createElement('script');
var firstScriptElement = document.getElementsByTagName('script')[0];
trackerElement.async = true;
trackerElement.src = baseUri + 'matomo.js';
var firstScriptElement = document.getElementsByTagName('script')[0];
if (window.location.host === 'nifi.apache.org') {
firstScriptElement.parentNode.insertBefore(trackerElement, firstScriptElement);
}
})();
</script>
</head>
<body><div class="sticky contain-to-grid">
<nav class="top-bar" data-topbar role="navigation">
<ul class="title-area">
<li class="name">
<h1>
<a href="index.html">
<img id="logo-top-bar" src="/assets/images/minifi-drop-white.svg" alt="MiNiFi"/>
</a>
</h1>
</li>
<li class="toggle-topbar menu-icon"><a href="#"><span></span></a></li>
</ul>
<section class="top-bar-section">
<ul class="right">
<li class="has-dropdown">
<a href="#">Project</a>
<ul class="dropdown">
<li><a href="/index.html">Home</a></li>
<li><a href="https://blogs.apache.org/nifi/"><i class="fa fa-external-link external-link"></i>Apache NiFi Blog</a></li>
<li><a href="https://www.apache.org/licenses/"><i class="fa fa-external-link external-link"></i>License</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Documentation</a>
<ul class="dropdown">
<li><a href="getting-started.html"><i class="fa"></i>Getting Started</a></li>
<li><a href="minifi-java-agent-quick-start.html"><i class="fa"></i>MiNiFi Java Quick Start Guide</a></li>
<li><a href="system-admin-guide.html"><i class="fa"></i>Administrator's Guide</a></li>
<li><a href="minifi-toolkit.html"><i class="fa"></i>Converter Toolkit</a></li>
<li><a href="faq.html"><i class="fa"></i>FAQ</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/MiNiFi"><i class="fa fa-external-link external-link"></i>Wiki</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Downloads</a>
<ul class="dropdown">
<li><a href="download.html">Download MiNiFi Components</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/MINIFI/Release+Notes"><i class="fa fa-external-link external-link"></i>MiNiFi Java Release Notes</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/MINIFI/Release+Notes#ReleaseNotes-MiNiFi(C++)"><i class="fa fa-external-link external-link"></i>MiNiFi C++ Release Notes</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Community</a>
<ul class="dropdown">
<li><a href="https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide"><i class="fa fa-external-link external-link"></i>Contributor Guide</a></li>
<li><a href="../mailing_lists.html">Mailing Lists &amp; Chat</a></li>
<li><a href="../people.html">People</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">Development</a>
<ul class="dropdown">
<li><a href="../release-guide.html">Release Guide</a></li>
<li><a href="../licensing-guide.html">Licensing Guide</a></li>
<li><a href="https://gitbox.apache.org/repos/asf?p=nifi.git"><i class="fa fa-external-link external-link"></i>Source - Java Agent</a></li>
<li><a href="https://github.com/apache/nifi"><i class="fa fa-external-link external-link"></i>Source - GitHub - Java Agent</a></li>
<li><a href="https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git"><i class="fa fa-external-link external-link"></i>Source - C++ Agent</a></li>
<li><a href="https://github.com/apache/nifi-minifi-cpp"><i class="fa fa-external-link external-link"></i>Source - GitHub - C++ Agent</a></li>
<li><a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20NIFI%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20%22MiNiFi%22%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC"><i class="fa fa-external-link external-link"></i>MiNiFi Java Issues</a></li>
<li><a href="https://issues.apache.org/jira/browse/MINIFICPP"><i class="fa fa-external-link external-link"></i>MiNiFi C++ Issues</a></li>
</ul>
</li>
<li class="has-dropdown">
<a href="#">ASF Links</a>
<ul class="dropdown">
<li><a href="https://www.apache.org"><i class="fa fa-external-link external-link"></i>Apache Software Foundation</a></li>
<li><a href="https://privacy.apache.org/policies/privacy-policy-public.html"><i class="fa fa-external-link external-link"></i>Privacy Policy</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html"><i class="fa fa-external-link external-link"></i>Sponsorship</a></li>
<li><a href="https://www.apache.org/security/"><i class="fa fa-external-link external-link"></i>Security</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html"><i class="fa fa-external-link external-link"></i>Thanks</a></li>
</ul>
</li>
<li>
<a href="../index.html">Apache NiFi</a>
</li>
</ul>
</section>
</nav>
</div>
<div class="row">
<div class="large-12 columns">
<div class="large-space"></div>
<p><a href="dev@nifi.apache.org%3E">Apache NiFi Team</a></p>
<p><a href="https://nifi.apache.org/minifi/index.html">MiNiFi Homepage</a></p>
<p>This documentation is for MiNiFi 0.5.0.</p>
<h1 id="automatic-warm-redeploy">Automatic Warm-Redeploy</h1>
<p>When many MiNiFi agents running on the edge, it may not be possible to manually stop, edit the <em>config.yml</em> and then restart every one every time their configuration needs to change. The Config Change Coordinator and its Ingestors were designed to automatically redeploy in response to a configuration update.</p>
<p>The Config Change Ingestors are the means by which the agent is notified of a potential new configuration. Currently there are three:</p>
<ul>
<li>FileChangeIngestor</li>
<li>RestChangeIngestor</li>
<li>PullHttpChangeIngestor</li>
</ul>
<p>After a new configuration has been pulled/received the Ingestors use a Differentiator in order to determine if the currently running config is different than the new config. Which Differentiator is used, is configurable for each Ingestor. Currently there is only one Differentiator:</p>
<ul>
<li>WholeConfigDifferentiator: Compares the entire new config with the currently running one, byte for byte.</li>
</ul>
<p>After a new config is determined to be new, the MiNiFi agent will attempt to restart. The bootstrap first saves the old config into a swap file. The bootstrap monitors the agent as it restarts and if it fails it will roll back to the old config. If it succeeds then the swap file will be deleted and the agent will start processing using the new config.</p>
<p><strong>Note:</strong> Data left in connections when the agent attempts to restart will either be mapped to a connection with the same ID in the new config, or orphaned and deleted.</p>
<p>The configuration for Warm-Redeploy is done in the bootstrap.conf and primarily revolve around the Config Change Ingestors. The configuration in the bootstrap.conf is done using the <code>nifi.minifi.notifier.ingestors</code> key followed by the full path name of the desired Ingestor implementation to run. Use a comma separated list to define more than one Ingestor implementation. For example:</p>
<pre tabindex="0"><code>nifi.minifi.notifier.ingestors=org.apache.nifi.minifi.bootstrap.configuration.ingestors.PullHttpChangeIngestor
</code></pre><p>Ingestor specific configuration is also necessary and done in the bootstrap.conf as well. Specifics for each are detailed below.</p>
<h2 id="filechangeingestor">FileChangeIngestor</h2>
<p>class name: <code>org.apache.nifi.minifi.bootstrap.configuration.ingestors.FileChangeIngestor</code></p>
<p>This Config Change Ingestor watches a file and when the file is updated, the file is ingested as a new config.</p>
<p>Note: The config file path configured here and in <code>nifi.minifi.config</code> cannot be the same. This is due to the swapping mechanism and other implementation limitations.</p>
<p>Below are the configuration options. The file config path is the only required property.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nifi.minifi.notifier.ingestors.file.config.path</code></td>
<td>Path of the file to monitor for changes. When these occur, the FileChangeNotifier, if configured, will begin the configuration reloading process</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.file.polling.period.seconds</code></td>
<td>How frequently the file specified by <code>nifi.minifi.notifier.file.config.path</code> should be evaluated for changes. If not set then a default polling period of 15 seconds will be used.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.file.differentiator</code></td>
<td>Which differentiator to use. If not set then it uses the WholeConfigDifferentiator as a default.</td>
</tr>
</tbody>
</table>
<h2 id="restchangeingestor">RestChangeIngestor</h2>
<p>class name: <code>org.apache.nifi.minifi.bootstrap.configuration.ingestors.RestChangeIngestor</code></p>
<p>This Config Change Ingestor sets up a light-weight Jetty HTTP(S) REST service in order to listen to HTTP(S) requests. A potential new configuration is sent via a POST request with the BODY being the potential new config.</p>
<p><strong>Note:</strong> The encoding is expected to be Unicode and the exact version specified by the BOM mark (&lsquo;UTF-8&rsquo;,&lsquo;UTF-16BE&rsquo; or &lsquo;UTF-16LE&rsquo;). If there is no BOM mark, then UTF-8 is used.</p>
<p>Here is an example post request using <code>curl</code> hitting the local machine on port <code>8338</code> and it is executed with the config file <em>config.yml</em> in the directory the command is run from:</p>
<pre tabindex="0"><code>curl --request POST --data-binary &quot;@config.yml&quot; http://localhost:8338/
</code></pre><p>Below are the configuration options. There are no required options. If no properties are set then the server will bind to hostname <code>localhost</code> on a random open port, will only connect via HTTP and will use the <code>WholeConfigDifferentiator</code>.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.host</code></td>
<td>Hostname on which the Jetty server will bind to. If not specified then it will bind to localhost.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.port</code></td>
<td>Port on which the Jetty server will bind to. If not specified then it will bind to a random open port.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.truststore.location</code></td>
<td>If using HTTPS, this specifies the location of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.truststore.password</code></td>
<td>If using HTTPS, this specifies the password of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.truststore.type</code></td>
<td>If using HTTPS, this specifies the type of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.keystore.location</code></td>
<td>If using HTTPS, this specifies the location of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.keystore.password</code></td>
<td>If using HTTPS, this specifies the password of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.keystore.type</code></td>
<td>If using HTTPS, this specifies the type of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.need.client.auth</code></td>
<td>If using HTTPS, this specifies whether or not to require client authentication.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.receive.http.differentiator</code></td>
<td>Which differentiator to use. If not set then it uses the <code>WholeConfigDifferentiator</code> as a default.</td>
</tr>
</tbody>
</table>
<h2 id="pullhttpchangeingestor">PullHttpChangeIngestor</h2>
<p>class name: <code>org.apache.nifi.minifi.bootstrap.configuration.ingestors.PullHttpChangeIngestor</code></p>
<p>This Config Change Ingestor periodically sends a GET request to a REST endpoint using HTTP(S) to order to pull the potential new config.</p>
<p>Below are the configuration options. The hostname and port are the only required properties.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.hostname</code></td>
<td>Hostname on which to pull configurations from</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.port</code></td>
<td>Port on which to pull configurations from</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.proxy.hostname</code></td>
<td>Proxy server hostname</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.proxy.port</code></td>
<td>Proxy server port</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.proxy.username</code></td>
<td>Proxy username</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.proxy.password</code></td>
<td>Proxy password</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.path</code></td>
<td>Path on which to pull configurations from</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.period.ms</code></td>
<td>Period on which to pull configurations from, defaults to <code>5 minutes</code> if not set.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.query</code></td>
<td>Querystring value for the URL</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.use.etag</code></td>
<td>If the destination server is set up with cache control ability and utilizes an &ldquo;ETag&rdquo; header, then this should be set to true to utilize it. Very simply, the Ingestor remembers the &ldquo;ETag&rdquo; of the last successful pull (returned 200) then uses that &ldquo;ETag&rdquo; in a &ldquo;If-None-Match&rdquo; header on the next request.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.connect.timeout.ms</code></td>
<td>Sets the connect timeout for new connections. A value of 0 means no timeout, otherwise values must be a positive whole number in milliseconds.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.read.timeout.ms</code></td>
<td>Sets the read timeout for new connections. A value of 0 means no timeout, otherwise values must be a positive whole number in milliseconds.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.truststore.location</code></td>
<td>If using HTTPS, this specifies the location of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.truststore.password</code></td>
<td>If using HTTPS, this specifies the password of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.truststore.type</code></td>
<td>If using HTTPS, this specifies the type of the truststore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.keystore.location</code></td>
<td>If using HTTPS, this specifies the location of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.keystore.password</code></td>
<td>If using HTTPS, this specifies the password of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.keystore.type</code></td>
<td>If using HTTPS, this specifies the type of the keystore.</td>
</tr>
<tr>
<td><code>nifi.minifi.notifier.ingestors.pull.http.differentiator</code></td>
<td>Which differentiator to use. If not set then it uses the <code>WholeConfigDifferentiator</code> as a default.</td>
</tr>
</tbody>
</table>
<h1 id="status-reporting-and-querying">Status Reporting and Querying</h1>
<p>In NiFi there is a lot of information, such as stats and bulletins, that is only available to view through the UI. MiNiFi provides access to this information through a query mechanism. You can query FlowStatus either using the <code>minifi.sh</code> script or by configuring one of the Periodic Status Reporters. The API for the query is the same for the reporters and the &ldquo;flowStatus&rdquo; script option. The API is outlined in the &ldquo;FlowStatus Query Options&rdquo; section below.</p>
<h2 id="flowstatus-script-query">FlowStatus Script Query</h2>
<p>From the <code>minifi.sh</code> script, you can manually query to get the current status of your dataflow. The following is an example of a <code>minifi.sh</code> query you might run to view health, stats, and bulletins for the TailFile processor. This query returns information to your command-line.</p>
<pre tabindex="0"><code>minifi.sh flowStatus processor:TailFile:health,stats,bulletins
</code></pre><p>Currently the script only accepts one high level option at a time. Also any names of connections, remote process groups, or processors that contain &quot; &quot; (a space), &ldquo;:&rdquo;, &ldquo;;&rdquo; or &ldquo;,&rdquo; cause parsing errors when querying.</p>
<p><strong>Note:</strong> The examples in this documentation are provided for *nix based environments. Windows support is also provided by by the <code>flowstatus-minifi.bat</code> file. To perform one of the listed interactions, <code>minifi.sh flowStatus</code> would simply be replaced by <code>flowstatus-minifi.bat</code>. For example, the sample query above in *nix environments,</p>
<pre tabindex="0"><code>minifi.sh flowStatus processor:TailFile:health,stats,bulletins
</code></pre><p>would translate to Windows environments as,</p>
<pre tabindex="0"><code>flowstatus-minifi.bat processor:TailFile:health,stats,bulletins
</code></pre><h2 id="periodic-status-reporters">Periodic Status Reporters</h2>
<p>You can set up Periodic Status Reporters to periodically report the status of your dataflow. The query executes at configurable intervals and the results are reported using the configured implementation. Configure the Reporters in the <em>bootstrap.conf</em> file, using the <code>nifi.minifi.status.reporter.components</code> key followed by the full path name of the desired Reporter implementation to run. Use a comma separated list to define more than one Reporter implementation. For example:</p>
<pre tabindex="0"><code>nifi.minifi.status.reporter.components=org.apache.nifi.minifi.bootstrap.status.reporters.StatusLogger
</code></pre><h3 id="statuslogger">StatusLogger</h3>
<p>class name: <code>org.apache.nifi.minifi.bootstrap.status.reporters.StatusLogger</code></p>
<p>The Periodic Status Reporter logs the results of the query to the logs. By default it is logged to the <em>minifi-bootstrap.log</em> but you can modify <em>logback.xml</em> to log to an alternate file and location.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>nifi.minifi.status.reporter.log.query</code></td>
<td>The FlowStatus query to run.</td>
</tr>
<tr>
<td><code>nifi.minifi.status.reporter.log.level</code></td>
<td>The log level at which to log the status. Available options are &ldquo;TRACE&rdquo;, &ldquo;DEBUG&rdquo;, &ldquo;INFO&rdquo;, &ldquo;WARN&rdquo; and &ldquo;ERROR&rdquo;.</td>
</tr>
<tr>
<td><code>nifi.minifi.status.reporter.log.period</code></td>
<td>The delay (in milliseconds) between each query.</td>
</tr>
</tbody>
</table>
<p>Example <code>bootstrap.conf</code> configuration:</p>
<pre tabindex="0"><code># The FlowStatus query to submit to the MiNiFi instance
nifi.minifi.status.reporter.log.query=instance:health,bulletins
# The log level at which the status will be logged
nifi.minifi.status.reporter.log.level=INFO
# The period (in milliseconds) at which to log the status
nifi.minifi.status.reporter.log.period=60000
</code></pre><p>Example <code>logback.xml</code> configuration to output the status to its own rolling log file:</p>
<pre tabindex="0"><code>&lt;appender name=&quot;STATUS_LOG_FILE&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;
&lt;file&gt;logs/minifi-status.log&lt;/file&gt;
&lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;&gt;
&lt;!--
For daily rollover, use 'user_%d.log'.
For hourly rollover, use 'user_%d{yyyy-MM-dd_HH}.log'.
To GZIP rolled files, replace '.log' with '.log.gz'.
To ZIP rolled files, replace '.log' with '.log.zip'.
--&gt;
&lt;fileNamePattern&gt;./logs/minifi-status_%d.log&lt;/fileNamePattern&gt;
&lt;!-- keep 5 log files worth of history --&gt;
&lt;maxHistory&gt;5&lt;/maxHistory&gt;
&lt;/rollingPolicy&gt;
&lt;encoder class=&quot;ch.qos.logback.classic.encoder.PatternLayoutEncoder&quot;&gt;
&lt;pattern&gt;%date %level [%thread] %logger{40} %msg%n&lt;/pattern&gt;
&lt;/encoder&gt;
&lt;/appender&gt;
&lt;logger name=&quot;org.apache.nifi.minifi.bootstrap.status.reporters.StatusLogger&quot; level=&quot;INFO&quot; additivity=&quot;false&quot;&gt;
&lt;appender-ref ref=&quot;STATUS_LOG_FILE&quot; /&gt;
&lt;/logger&gt;
</code></pre><h2 id="flowstatus-query-options">FlowStatus Query Options</h2>
<p>This section outlines each option to query the MiNiFi instance for the FlowStatus.</p>
<p><strong>Note:</strong> In Windows environments, all <code>minifi.sh flowStatus</code> invocations should be replaced with <code>flowstatus-minifi.bat</code>. See <a href="#flowstatus-script-query">FlowStatus Script Query</a> for an illustration.</p>
<h3 id="processors">Processors</h3>
<p>To query the processors, use the <code>processor</code> flag and specify the processor (by ID, name or &ldquo;all&rdquo;) followed by one of the processor options. The processor options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The processor&rsquo;s run status, whether or not it has bulletins and the validation errors (if there are any).</td>
</tr>
<tr>
<td><code>bulletins</code></td>
<td>A list of all the current bulletins (if there are any).</td>
</tr>
<tr>
<td><code>stats</code></td>
<td>The current stats of the processor. This includes but is not limited to active threads and FlowFiles sent/received.</td>
</tr>
</tbody>
</table>
<p>An example query to get the health, bulletins and stats of the &ldquo;TailFile&rdquo; processor is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus processor:TailFile:health,stats,bulletins
</code></pre><h3 id="connections">Connections</h3>
<p>To query the connections, use the <code>connection</code> flag and specify the connection (by ID, name or &ldquo;all&rdquo;) followed by one of the connection options. The connection options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The connections&rsquo;s queued bytes and queued FlowFile count.</td>
</tr>
<tr>
<td><code>stats</code></td>
<td>The current stats of the connection. This includes input/output count and input/output bytes.</td>
</tr>
</tbody>
</table>
<p>An example query to get the health and stats of the &ldquo;TailToS2S&rdquo; connection is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus connection:TailToS2S:health,stats
</code></pre><h3 id="remote-process-groups">Remote Process Groups</h3>
<p>To query the remote process groups (RPGs), use the <code>remoteprocessgroup</code> flag and specify the RPG (by ID, name or &ldquo;all&rdquo;) followed by one of the remote process group options. The remote process group options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The connections&rsquo;s queued bytes and queued FlowFile count.</td>
</tr>
<tr>
<td><code>bulletins</code></td>
<td>A list of all the current bulletins (if there are any).</td>
</tr>
<tr>
<td><code>inputports</code></td>
<td>A list of every input port for this RPG and their status. Their status includes its name, whether the target exists and whether it&rsquo;s currently running.</td>
</tr>
<tr>
<td><code>outputports</code></td>
<td>A list of every output port for this RPG and their status. Their status includes its name, whether the target exists and whether it&rsquo;s currently running.</td>
</tr>
<tr>
<td><code>stats</code></td>
<td>The current stats of the RPG. This includes the active threads, sent content size and count.</td>
</tr>
</tbody>
</table>
<p>An example query to get the health, bulletins, input ports and stats of all the RPGs is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus remoteprocessgroup:all:health,bulletins,inputports,stats
</code></pre><h3 id="controller-services">Controller Services</h3>
<p>To query the controller services, use the <code>controllerservices</code> flag followed by one of the controller service options. The controller service options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The controller service&rsquo;s state, whether or not it has bulletins and any validation errors.</td>
</tr>
<tr>
<td><code>bulletins</code></td>
<td>A list of all the current bulletins (if there are any).</td>
</tr>
</tbody>
</table>
<p>An example query to get the health and bulletins of all the controller services is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus controllerservices:health,bulletins
</code></pre><h3 id="provenance-reporting">Provenance Reporting</h3>
<p>To query the status of the provenance reporting, use the <code>provenancereporting</code> flag followed by one of the provenance reporting options. The provenance reporting options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The provenance reporting state, active threads, whether or not it has bulletins and any validation errors.</td>
</tr>
<tr>
<td><code>bulletins</code></td>
<td>A list of all the current bulletins (if there are any).</td>
</tr>
</tbody>
</table>
<p>An example query to get the health and bulletins of the provenance reporting is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus provenancereporting:health,bulletins
</code></pre><h3 id="instance">Instance</h3>
<p>To query the status of the MiNiFi instance, use the <code>instance</code> flag followed by one of the instance options. The instance options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>health</code></td>
<td>The instance reporting state, active threads, whether or not it has bulletins and any validation errors.</td>
</tr>
<tr>
<td><code>bulletins</code></td>
<td>A list of all the current bulletins (if there are any).</td>
</tr>
<tr>
<td><code>stats</code></td>
<td>The current stats of the instance. This including but not limited to bytes read/written and FlowFiles sent/transferred.</td>
</tr>
</tbody>
</table>
<p>An example query to get the health, stats and bulletins of the instance is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus instance:health,stats,bulletins
</code></pre><h3 id="system-diagnostics">System Diagnostics</h3>
<p>To query the system diagnostics, use the <code>systemdiagnostics</code> flag followed by one of the system diagnostics options. The system diagnostics options are below.</p>
<table>
<thead>
<tr>
<th>Option</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>heap</code></td>
<td>Information detailing the state of the JVM heap.</td>
</tr>
<tr>
<td><code>processorstats</code></td>
<td>The system processor stats. This includes the available processors and load average.</td>
</tr>
<tr>
<td><code>contentrepositoryusage</code></td>
<td>A list of each content repository and stats detailing its usage.</td>
</tr>
<tr>
<td><code>flowfilerepositoryusage</code></td>
<td>Stats about the current usage of the FlowFile repository.</td>
</tr>
<tr>
<td><code>garbagecollection</code></td>
<td>A list of the garbage collection events, detailing their name, collection count and time.</td>
</tr>
</tbody>
</table>
<p>An example query to get the heap, processor stats, content repository usage, FlowFile repository usage and garbage collection from the system diagnostics is below.</p>
<pre tabindex="0"><code>minifi.sh flowStatus systemdiagnostics:heap,processorstats,contentrepositoryusage,flowfilerepositoryusage,garbagecollection
</code></pre><h3 id="example">Example</h3>
<p>This is an example of a simple query to get the health of all the processors and its results from a simple flow:</p>
<pre tabindex="0"><code>User:minifi-0.0.1-SNAPSHOT user ./bin/minifi.sh flowStatus processor:all:health
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_74.jdk/Contents/Home
MiNiFi home: /Users/user/projects/nifi-minifi/minifi-assembly/target/minifi-0.0.1-SNAPSHOT-bin/minifi-0.0.1-SNAPSHOT
Bootstrap Config File: /Users/user/projects/nifi-minifi/minifi-assembly/target/minifi-0.0.1-SNAPSHOT-bin/minifi-0.0.1-SNAPSHOT/conf/bootstrap.conf
{&quot;controllerServiceStatusList&quot;:null,&quot;processorStatusList&quot;:[{&quot;name&quot;:&quot;Connection Diagnostics&quot;,&quot;processorHealth&quot;:{&quot;runStatus&quot;:&quot;Running&quot;,&quot;hasBulletins&quot;:false,&quot;validationErrorList&quot;:[]},&quot;processorStats&quot;:null,&quot;bulletinList&quot;:null},{&quot;name&quot;:&quot;UpdateAttribute&quot;,&quot;processorHealth&quot;:{&quot;runStatus&quot;:&quot;Running&quot;,&quot;hasBulletins&quot;:false,&quot;validationErrorList&quot;:[]},&quot;processorStats&quot;:null,&quot;bulletinList&quot;:null},{&quot;name&quot;:&quot;Processor Diagnostics&quot;,&quot;processorHealth&quot;:{&quot;runStatus&quot;:&quot;Running&quot;,&quot;hasBulletins&quot;:false,&quot;validationErrorList&quot;:[]},&quot;processorStats&quot;:null,&quot;bulletinList&quot;:null},{&quot;name&quot;:&quot;System Diagnostics&quot;,&quot;processorHealth&quot;:{&quot;runStatus&quot;:&quot;Running&quot;,&quot;hasBulletins&quot;:false,&quot;validationErrorList&quot;:[]},&quot;processorStats&quot;:null,&quot;bulletinList&quot;:null},{&quot;name&quot;:&quot;GenerateFlowFile&quot;,&quot;processorHealth&quot;:{&quot;runStatus&quot;:&quot;Running&quot;,&quot;hasBulletins&quot;:false,&quot;validationErrorList&quot;:[]},&quot;processorStats&quot;:null,&quot;bulletinList&quot;:null}],&quot;connectionStatusList&quot;:null,&quot;remoteProcessGroupStatusList&quot;:null,&quot;instanceStatus&quot;:null,&quot;systemDiagnosticsStatus&quot;:null,&quot;reportingTaskStatusList&quot;:null,&quot;errorsGeneratingReport&quot;:[]}
</code></pre><h1 id="periodic-status-reporters-1">Periodic Status Reporters</h1>
<h1 id="config-file">Config File</h1>
<p>The <em>config.yml</em> in the <code>conf</code> directory is the main configuration file for controlling how MiNiFi runs. This section provides an overview of the properties in this file. The file is a YAML
and follows the YAML format laid out <a href="http://www.yaml.org/">here</a>.</p>
<p>Alternatively, the MiNiFi Toolkit Converter can aid in creating a <em>config.yml</em> from a generated template exported from a NiFi instance. This
tool can be downloaded from <a href="https://nifi.apache.org/minifi/download.html">https://nifi.apache.org/minifi/download.html</a> under the &ldquo;MiNiFi Toolkit Binaries&rdquo; section. Information on the toolkit&rsquo;s usage is
available at <a href="https://nifi.apache.org/minifi/minifi-toolkit.html">https://nifi.apache.org/minifi/minifi-toolkit.html</a>.</p>
<p><strong>Note:</strong> Values for periods of time and data sizes must include the unit of measure,
for example &ldquo;10 sec&rdquo; or &ldquo;10 MB&rdquo;, not simply &ldquo;10&rdquo;.</p>
<h2 id="versioning">Versioning</h2>
<p>The &ldquo;MiNiFi Config Version&rdquo; property is used to indicate to the configuration parser which version of the config file it is looking at. If the property is empty or missing, version 1 is assumed.</p>
<p>The MiNiFi Toolkit Converter is capable of parsing previous versions (possibly subject to a future deprecation policy) and writing out the current version. It can also validate that a given config file
parses and upconverts to the current version without issue.</p>
<h3 id="version-1---version-2-changes">Version 1 -&gt; Version 2 changes</h3>
<ol>
<li>Use ids instead of names for processors, connections.</li>
<li>Allow multiple source relationships for connections.</li>
<li>Added support for process groups, and internal input ports an output ports.</li>
<li>Change Id Key for RPGs from &ldquo;Remote Processing Groups&rdquo; to the proper &ldquo;Remote Process Groups&rdquo; (not &ldquo;ing&rdquo;).</li>
</ol>
<h3 id="version-2---version-3-changes">Version 2 -&gt; Version 3 changes</h3>
<ol>
<li>Added support for Controller Services.</li>
<li>Added support for Site-To-Site over proxy.</li>
<li>Added support for overriding <em>nifi.properties</em> values</li>
<li>Added support for Output Ports to Remote Process Groups</li>
</ol>
<h2 id="flow-controller">Flow Controller</h2>
<p>The first section of <em>config.yml</em> is for naming and commenting on the file.</p>
<table>
<thead>
<tr>
<th>Property</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>MiNiFi Config Version</code></td>
<td>The version of the configuration file. The default value if this property is missing or empty is <code>1</code>, the current value is 3.</td>
</tr>
<tr>
<td><code>name</code></td>
<td>The name of the file.</td>
</tr>
<tr>
<td><code>comment</code></td>
<td>A comment describing the usage of this config file.</td>
</tr>
</tbody>
</table>
<h2 id="core-properties">Core Properties</h2>
<p>The &ldquo;Core Properties&rdquo; section applies to the core framework as a whole.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>flow controller graceful shutdown period</code></td>
<td>Indicates the shutdown period. The default value is <code>10 sec</code>.</td>
</tr>
<tr>
<td><code>flow service write delay interval</code></td>
<td>When many changes are made to the <em>flow.xml</em>, this property specifies how long to wait before writing out the changes, so as to batch the changes into a single write. The default value is <code>500 ms</code>.</td>
</tr>
<tr>
<td><code>administrative yield duration</code></td>
<td>If a component allows an unexpected exception to escape, it is considered a bug. As a result, the framework will pause (or administratively yield) the component for this amount of time. This is done so that the component does not use up massive amounts of system resources, since it is known to have problems in the existing state. The default value is <code>30 sec</code>.</td>
</tr>
<tr>
<td><code>bored yield duration</code></td>
<td>When a component has no work to do (i.e., is &ldquo;bored&rdquo;), this is the amount of time it will wait before checking to see if it has new data to work on. This way, it does not use up CPU resources by checking for new work too often. When setting this property, be aware that it could add extra latency for components that do not constantly have work to do, as once they go into this &ldquo;bored&rdquo; state, they will wait this amount of time before checking for more work. The default value is <code>10 millis</code>.</td>
</tr>
<tr>
<td><code>max concurrent threads</code></td>
<td>The maximum number of threads any processor can have running at one time.</td>
</tr>
</tbody>
</table>
<h2 id="flowfile-repository">FlowFile Repository</h2>
<p>The FlowFile repository keeps track of the attributes and current state of each FlowFile in the system. By default,
this repository is installed in the same root installation directory as all the other repositories; however, it is advisable
to configure it on a separate drive if available.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>partitions</code></td>
<td>The number of partitions. The default value is <code>256</code>.</td>
</tr>
<tr>
<td><code>checkpoint interval</code></td>
<td>The FlowFile Repository checkpoint interval. The default value is <code>2 mins</code>.</td>
</tr>
<tr>
<td><code>always sync</code></td>
<td>If set to <em>true</em>, any change to the repository will be synchronized to the disk, meaning that NiFi will ask the operating system not to cache the information. This is very expensive and can significantly reduce NiFi performance. However, if it is <em>false</em>, there could be the potential for data loss if either there is a sudden power loss or the operating system crashes. The default value is <code>false</code>.</td>
</tr>
</tbody>
</table>
<h4 id="swap-subsection">Swap Subsection</h4>
<p>A part of the &ldquo;FlowFile Repository&rdquo; section there is a &ldquo;Swap&rdquo; subsection.</p>
<p>NiFi keeps FlowFile information in memory (the JVM)
but during surges of incoming data, the FlowFile information can start to take up so much of the JVM that system performance
suffers. To counteract this effect, NiFi &ldquo;swaps&rdquo; the FlowFile information to disk temporarily until more JVM space becomes
available again. The &ldquo;Swap&rdquo; subsection of properties govern how that process occurs.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>threshold</code></td>
<td>The queue threshold at which NiFi starts to swap FlowFile information to disk. The default value is <code>20000</code>.</td>
</tr>
<tr>
<td><code>in period</code></td>
<td>The swap in period. The default value is <code>5 sec</code>.</td>
</tr>
<tr>
<td><code>in threads</code></td>
<td>The number of threads to use for swapping in. The default value is <code>1</code>.</td>
</tr>
<tr>
<td><code>out period</code></td>
<td>The swap out period. The default value is <code>5 sec</code>.</td>
</tr>
<tr>
<td><code>out threads</code></td>
<td>The number of threads to use for swapping out. The default value is <code>4</code>.</td>
</tr>
</tbody>
</table>
<h2 id="content-repository">Content Repository</h2>
<p>The Content Repository holds the content for all the FlowFiles in the system. By default, it is installed in the same root
installation directory as all the other repositories; however, administrators will likely want to configure it on a separate
drive if available. If nothing else, it is best if the Content Repository is not on the same drive as the FlowFile Repository.
In dataflows that handle a large amount of data, the Content Repository could fill up a disk and the
FlowFile Repository, if also on that disk, could become corrupt. To avoid this situation, configure these repositories on different drives.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>content claim max appendable size</code></td>
<td>The maximum size for a content claim. The default value is <code>10 MB</code>.</td>
</tr>
<tr>
<td><code>content claim max flow files</code></td>
<td>The maximum number of FlowFiles to assign to one content claim. The default value is <code>100</code>.</td>
</tr>
<tr>
<td><code>always sync</code></td>
<td>If set to <em>true</em>, any change to the repository will be synchronized to the disk, meaning that NiFi will ask the operating system not to cache the information. This is very expensive and can significantly reduce NiFi performance. However, if it is <em>false</em>, there could be the potential for data loss if either there is a sudden power loss or the operating system crashes. The default value is <code>false</code>.</td>
</tr>
</tbody>
</table>
<h2 id="provenance-repository">Provenance Repository</h2>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>provenance rollover time</code></td>
<td>The amount of time to wait before rolling over the latest data provenance information so that it is available to be accessed by components. The default value is <code>1 min</code>.</td>
</tr>
<tr>
<td><code>implementation</code></td>
<td>The implementation of <code>ProvenanceRepository</code> to use. The default value is <code>org.apache.nifi.provenance.MiNiFiPersistentProvenanceRepository</code>.</td>
</tr>
</tbody>
</table>
<h2 id="component-status-repository">Component Status Repository</h2>
<p>The Component Status Repository contains the information for the Component Status History tool in the User Interface. These
properties govern how that tool works.</p>
<p>The <code>buffer size</code> and <code>snapshot frequency</code> work together to determine the amount of historical data to retain. As an example to
configure two days worth of historical data with a data point snapshot occurring every 5 minutes you would configure
<code>snapshot frequency</code> to be &ldquo;5 mins&rdquo; and the <code>buffer size</code> to be &ldquo;576&rdquo;. To further explain this example, for every 60 minutes there
are 12 (60 / 5) snapshot windows for that time period. To keep that data for 48 hours (12 * 48) you end up with a buffer size
of 576.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>buffer size</code></td>
<td>Specifies the buffer size for the Component Status Repository. The default value is <code>1440</code>.</td>
</tr>
<tr>
<td><code>snapshot frequency</code></td>
<td>This value indicates how often to present a snapshot of the components' status history. The default value is <code>1 min</code>.</td>
</tr>
</tbody>
</table>
<h2 id="security-properties">Security Properties</h2>
<p>These properties pertain to various security features in NiFi. Many of these properties are covered in more detail in the
&ldquo;Security Configuration&rdquo; section of this Administrator&rsquo;s Guide.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>keystore</code></td>
<td>The full path and name of the keystore. It is blank by default.</td>
</tr>
<tr>
<td><code>keystore type</code></td>
<td>The keystore type. It is blank by default.</td>
</tr>
<tr>
<td><code>keystore password</code></td>
<td>The keystore password. It is blank by default.</td>
</tr>
<tr>
<td><code>key password</code></td>
<td>The key password. It is blank by default.</td>
</tr>
<tr>
<td><code>truststore</code></td>
<td>The full path and name of the truststore. It is blank by default.</td>
</tr>
<tr>
<td><code>truststore type</code></td>
<td>The truststore type. It is blank by default.</td>
</tr>
<tr>
<td><code>truststore password</code></td>
<td>The truststore password. It is blank by default.</td>
</tr>
<tr>
<td><code>ssl protocol</code></td>
<td>The protocol to use when communicating via https. Necessary to transfer provenance securely.</td>
</tr>
</tbody>
</table>
<p><strong>Note:</strong> A StandardSSLContextService will be made automatically with the ID &ldquo;SSL-Context-Service&rdquo; if <code>ssl protocol</code> is configured.</p>
<h4 id="sensitive-properties-subsection">Sensitive Properties Subsection</h4>
<p>Some properties for processors are marked as <em>sensitive</em> and should be encrypted. These following properties will be used to encrypt the properties while in use by MiNiFi. This will currently <strong>not</strong> be used to encrypt properties in the config file.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>key</code></td>
<td>This is the password used to encrypt any sensitive property values that are configured in processors. By default, it is blank, but the system administrator should provide a value for it. It can be a string of any length, although the recommended minimum length is 10 characters. Be aware that once this password is set and one or more sensitive processor properties have been configured, this password should not be changed.</td>
</tr>
<tr>
<td><code>algorithm</code></td>
<td>The algorithm used to encrypt sensitive properties. The default value is <code>PBEWITHMD5AND256BITAES-CBC-OPENSSL</code>.</td>
</tr>
<tr>
<td><code>provider</code></td>
<td>The sensitive property provider. The default value is <code>BC</code>.</td>
</tr>
</tbody>
</table>
<h2 id="processors-1">Processors</h2>
<p>The current implementation of MiNiFi supports multiple processors. The &ldquo;Processors&rdquo; subsection is a list of these processors. Each processor must specify these properties. They are the basic configuration general to all processor implementations. Make sure that all relationships for a processor are accounted for in the auto-terminated relationship list or are used in a connection.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this processor will do. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this processor. This can be omitted but in processors without this field, there should not be any duplicate names and connections will need to specify source and destination name instead of id. If set it should be a filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
<tr>
<td><code>class</code></td>
<td>The fully qualified java class name of the processor to run. For example for the standard TailFile processor it would be: <code>org.apache.nifi.processors.standard.TailFile</code></td>
</tr>
<tr>
<td><code>max concurrent tasks</code></td>
<td>The maximum number of tasks that the processor will use.</td>
</tr>
<tr>
<td><code>scheduling strategy</code></td>
<td>The strategy for executing the processor. Valid options are <code>CRON_DRIVEN</code> or <code>TIMER_DRIVEN</code></td>
</tr>
<tr>
<td><code>scheduling period</code></td>
<td>This property expects different input depending on the scheduling strategy selected. For the <code>TIMER_DRIVEN</code> scheduling strategy, this value is a time duration specified by a number followed by a time unit. For example, 1 second or 5 mins. 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., 0 sec, 0 mins, 0 days). For an explanation of values that are applicable for the CRON driven scheduling strategy, see the description of the CRON driven scheduling strategy in the scheduling tab section of the <a href="https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#scheduling-tab">NiFi User documentation</a>.</td>
</tr>
<tr>
<td><code>penalization period</code></td>
<td>Specifies how long FlowFiles will be penalized.</td>
</tr>
<tr>
<td><code>yield period</code></td>
<td>In the event the processor cannot make progress it should &ldquo;yield&rdquo; which will prevent the processor from being scheduled to run for some period of time. That period of time is specific using this property.</td>
</tr>
<tr>
<td><code>run duration nanos</code></td>
<td>If the processor supports batching this property can be used to control how long the Processor should be scheduled to run each time that it is triggered. Smaller values will have lower latency but larger values will have higher throughput. This period should typically only be set between 0 and 2000000000 (2 seconds).</td>
</tr>
<tr>
<td><code>auto-terminated relationships list</code></td>
<td>A YAML list of the relationships to auto-terminate for the processor.</td>
</tr>
<tr>
<td><code>annotation data</code></td>
<td>Some processors make use of &ldquo;Annotation Data&rdquo; in order to do more complex configuration, such as the Advanced portion of UpdateAttribute. This data will be unique to each implementing processor and more than likely will not be written out manually.</td>
</tr>
</tbody>
</table>
<h4 id="processor-properties">Processor Properties</h4>
<p>Within the &ldquo;Processor Configuration&rdquo; section, there is the &ldquo;Properties&rdquo; subsection. The keys and values in this section are the property names and values for the processor. For example the TailFile processor would have a section like this:</p>
<pre><code>Properties:
File to Tail: logs/nifi-app.log
Rolling Filename Pattern: nifi-app*
State File: ./conf/state/tail-file
Initial Start Position: Beginning of File
</code></pre>
<h3 id="controller-services-1">Controller Services</h3>
<p>The current implementation of MiNiFi supports Controller Services. The &ldquo;Controller Services&rdquo; subsection is a list of these services. Each Controller Service must specify the following properties. They are the basic configuration general to all Controller Service implementations.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this Controller Service will do. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this Controller Service. This must be a valid UUID. To reference this Controller Service in the properties of another component, this ID is used.</td>
</tr>
<tr>
<td><code>type</code></td>
<td>The fully qualified java class name of the processor to run. For example, for the standard StandardSSLContextService processor, the value would be: <code>org.apache.nifi.ssl.StandardSSLContextService</code></td>
</tr>
</tbody>
</table>
<p><strong>Note:</strong> If the &ldquo;Security Properties&rdquo; is configured with an &ldquo;ssl protocol&rdquo; then a StandardSSLContextService will be made automatically with the ID &ldquo;SSL-Context-Service&rdquo;.</p>
<h4 id="controller-service-properties">Controller Service Properties</h4>
<p>Within the &ldquo;Controller Service Configuration&rdquo; section, there is the &ldquo;Properties&rdquo; subsection. The keys and values in this section are the property names and values for the service. For example, the StandardSSLContextService would have a section like this:</p>
<pre><code>Properties:
Keystore Filename: /tmp/localhost/keystore.jks
Keystore Password: keystorePassword
Keystore Type: JKS
SSL Protocol: TLS
Truststore Filename: /tmp/truststore.jks
Truststore Password: truststorePassword
Truststore Type: JKS
key-password: keyPassword
</code></pre>
<h2 id="process-groups">Process Groups</h2>
<p>Process groups can be nested from the top level. They can contain other process groups as well and can be used to logically group related operations.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this process group will do.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this process group. This needs to be set to a unique filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
<tr>
<td><code>Processors</code></td>
<td>The processors contained in this Process Group. (Defined above)</td>
</tr>
<tr>
<td><code>Remote Process Groups</code></td>
<td>The remote process groups contained in this Process Group. (Defined below)</td>
</tr>
<tr>
<td><code>Connections</code></td>
<td>The connections contained in this Process Group. (Defined below)</td>
</tr>
<tr>
<td><code>Input Ports</code></td>
<td>The input ports contained in this Process Group. (Defined below)</td>
</tr>
<tr>
<td><code>Output Ports</code></td>
<td>The output ports contained in this Process Group. (Defined below)</td>
</tr>
<tr>
<td><code>Funnels</code></td>
<td>The funnels contained in this Process Group. (Defined below)</td>
</tr>
<tr>
<td><code>Process Groups</code></td>
<td>The child Process Groups contained in this Process Group.</td>
</tr>
</tbody>
</table>
<h2 id="input-ports">Input Ports</h2>
<p>These ports provide input to the Process Group they reside on. (Currently only for internal Input ports.)</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this input port will do.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this input port. This needs to be set to a unique filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
</tbody>
</table>
<h2 id="output-ports">Output Ports</h2>
<p>These ports provide output from the Process Group they reside on. (Currently only for internal Output ports.)</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this output port will do.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this output port. This needs to be set to a unique filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
</tbody>
</table>
<h2 id="funnels">Funnels</h2>
<p>Funnels can be used to combine outputs from multiple processors into a single connection for ease of design.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td>The id of this funnel. This needs to be set to a unique filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
</tbody>
</table>
<h2 id="connections-1">Connections</h2>
<p>There can be multiple connections in this version of MiNiFi. The &ldquo;Connections&rdquo; subsection is a list of connections. Each connection must specify these properties.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this connection will do. This is used for the id of the connection so it must be unique.</td>
</tr>
<tr>
<td><code>id</code></td>
<td>The id of this connection. This needs to be left empty or set to a filesystem-friendly value (regex: [A-Za-z0-9_-]+)</td>
</tr>
<tr>
<td><code>source name</code></td>
<td>The name of what of the processor that is the source for this connection.</td>
</tr>
<tr>
<td><code>source relationship name</code></td>
<td>The name of the processors relationship to route to this connection</td>
</tr>
<tr>
<td><code>destination name</code></td>
<td>The name of the component to receive this connection.</td>
</tr>
<tr>
<td><code>max work queue size</code></td>
<td>This property is the max number of FlowFiles that can be in the queue before back pressure is applied. When back pressure is applied the source processor will no longer be scheduled to run.</td>
</tr>
<tr>
<td><code>max work queue data size</code></td>
<td>This property specifies the maximum amount of data (in size) that should be queued up before applying back pressure. When back pressure is applied the source processor will no longer be scheduled to run.</td>
</tr>
<tr>
<td><code>flowfile expiration</code></td>
<td>Indicates how long FlowFiles are allowed to exist in the connection before be expired (automatically removed from the flow).</td>
</tr>
<tr>
<td><code>queue prioritizer class</code></td>
<td>This configuration option specifies the fully qualified java class path of a queue prioritizer to use. If no special prioritizer is desired then it should be left blank. An example value of this property is: <code>org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer</code></td>
</tr>
</tbody>
</table>
<h2 id="remote-process-groups-1">Remote Process Groups</h2>
<p>MiNiFi can be used to send data using the Site to Site protocol (via a Remote Process Group) or a Processor. These properties configure the Remote Process Groups that use Site-To-Site to send data to a core instance. The proxy settings are for HTTP Site-To-Site.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>name</code></td>
<td>The name of what this Remote Process Group points to. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>comment</code></td>
<td>A comment about the Remote Process Group. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>url</code></td>
<td>The URL of the core NiFi instance.</td>
</tr>
<tr>
<td><code>timeout</code></td>
<td>How long MiNiFi should wait before timing out the connection.</td>
</tr>
<tr>
<td><code>yield period</code></td>
<td>When communication with this Remote Process Group fails, it will not be scheduled again for this amount of time.</td>
</tr>
<tr>
<td><code>transport protocol</code></td>
<td>The transport protocol to use for this Remote Process Group. Can be either <code>RAW</code> or <code>HTTP</code></td>
</tr>
<tr>
<td><code>proxy host</code></td>
<td>The hostname of the proxy server</td>
</tr>
<tr>
<td><code>proxy port</code></td>
<td>The port to connect to on the proxy server</td>
</tr>
<tr>
<td><code>proxy user</code></td>
<td>The user name on the proxy server</td>
</tr>
<tr>
<td><code>proxy password</code></td>
<td>The password for the proxy server</td>
</tr>
<tr>
<td><code>Input Ports</code></td>
<td>The Input Ports for this Remote Process Group (See below)</td>
</tr>
<tr>
<td><code>Output Ports</code></td>
<td>The Output Ports for this Remote Process Group (See below)</td>
</tr>
</tbody>
</table>
<h4 id="inputoutput-ports-subsection">Input/Output Ports Subsection</h4>
<p>When connecting via Site to Site, MiNiFi needs to know which input or output port to communicate to of the core NiFi instance. These properties designate and configure communication with that port.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td>The id of the port as it exists on the core NiFi instance. To get this information access the UI of the core instance, right click the port that is desired to be connect to and select &ldquo;configure&rdquo;. The id of the port should under the &ldquo;Id&rdquo; section.</td>
</tr>
<tr>
<td><code>name</code></td>
<td>The name of the port as it exists on the core NiFi instance. To get this information access the UI of the core instance, right click the port that is desired to be connect to and select &ldquo;configure&rdquo;. The name of the port should under the &ldquo;Port name&rdquo; section.</td>
</tr>
<tr>
<td><code>comments:</code></td>
<td>A comment about the Port. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>max concurrent tasks</code></td>
<td>The number of tasks that this port should be scheduled for at maximum.</td>
</tr>
<tr>
<td><code>use compression</code></td>
<td>Whether or not compression should be used when communicating with the port. This is a boolean value of either <code>true</code> or <code>false</code></td>
</tr>
</tbody>
</table>
<h2 id="provenance-reporting-1">Provenance Reporting</h2>
<p>MiNiFi is currently designed only to report provenance data using the Site to Site protocol. These properties configure the underlying reporting task that sends the provenance events.</p>
<table>
<thead>
<tr>
<th><em>Property</em></th>
<th><em>Description</em></th>
</tr>
</thead>
<tbody>
<tr>
<td><code>comment</code></td>
<td>A comment about the Provenance reporting. This is not used for any underlying implementation but solely for the users of this configuration and MiNiFi agent.</td>
</tr>
<tr>
<td><code>scheduling strategy</code></td>
<td>The strategy for executing the Reporting Task. Valid options are <code>CRON_DRIVEN</code> or <code>TIMER_DRIVEN</code></td>
</tr>
<tr>
<td><code>scheduling period</code></td>
<td>This property expects different input depending on the scheduling strategy selected. For the <code>TIMER_DRIVEN</code> scheduling strategy, this value is a time duration specified by a number followed by a time unit. For example, 1 second or 5 mins. 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., 0 sec, 0 mins, 0 days). For an explanation of values that are applicable for the CRON driven scheduling strategy, see the description of the CRON driven scheduling strategy in the scheduling tab section of the <a href="https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#scheduling-tab">NiFi User documentation</a>.</td>
</tr>
<tr>
<td><code>destination url</code></td>
<td>The URL to post the Provenance Events to.</td>
</tr>
<tr>
<td><code>port name</code></td>
<td>The name of the input port as it exists on the receiving NiFi instance. To get this information access the UI of the core instance, right the input port that is desired to be connect to and select &ldquo;configure&rdquo;. The id of the port should under the &ldquo;Port name&rdquo; section.</td>
</tr>
<tr>
<td><code>originating url</code></td>
<td>The URL of this MiNiFi instance. This is used to include the Content URI to send to the destination.</td>
</tr>
<tr>
<td><code>use compression</code></td>
<td>Indicates whether or not to compress the events when being sent.</td>
</tr>
<tr>
<td><code>timeout</code></td>
<td>How long MiNiFi should wait before timing out the connection.</td>
</tr>
<tr>
<td><code>batch size</code></td>
<td>Specifies how many records to send in a single batch, at most. This should be significantly above the expected amount of records generated between scheduling. If it is not, then there is the potential for the Provenance reporting to lag behind event generation and never catch up.</td>
</tr>
</tbody>
</table>
<p><strong>Note:</strong> In order to send via HTTPS, the &ldquo;Security Properties&rdquo; must be fully configured. A StandardSSLContextService will be made automatically with the ID &ldquo;SSL-Context-Service&rdquo; and used by the Provenance Reporting.</p>
<h2 id="nifi-properties-overrides">NiFi Properties Overrides</h2>
<p>This is a yaml map that contains values to be put into <em>nifi.properties</em>. This will supercede any hardcoded or other schema values that are substituted into <em>nifi.properties</em> file.</p>
<h3 id="example-nifi-properties-overrides">Example NiFi Properties Overrides</h3>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#008000;font-weight:bold">NiFi Properties Overrides</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nifi.flowfile.repository.directory</span>:<span style="color:#bbb"> </span>./flowfile_repository_override<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nifi.content.repository.directory.default</span>:<span style="color:#bbb"> </span>./content_repository_override<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">nifi.database.directory</span>:<span style="color:#bbb"> </span>./database_repository_override<span style="color:#bbb">
</span></code></pre></div><h1 id="running-as-a-windows-service">Running as a Windows Service</h1>
<p>MiNiFi can run as a Windows service. To do so, you must modify the <em>conf/bootstrap.conf</em> to set absolute paths for some properties. The properties are:</p>
<ul>
<li><code>lib.dir</code> (e.g. <code>C:\\minifi-x.x.x\\lib</code>)</li>
<li><code>conf.dir</code> (e.g. <code>C:\\minifi-x.x.x\\conf</code>)</li>
<li><code>nifi.minifi.config</code> (e.g. <code>C:\\minifi-x.x.x\\conf\\config.yml</code>)</li>
</ul>
<p>You can now install the MiNiFi service by running the <code>install-service.bat</code> script. To remove the service run the <code>delete-service.bat</code> file.</p>
<p>The <em>minifi.exe</em> in MiNiFi <code>bin</code> directory is used to run MiNiFi Windows service. The bundled one is for 64 bit architecture and requires 64 bit JRE. If you have to use 32 bit JRE for some reason, you need to replace the <em>minifi.exe</em> file with the one for 32 bit to make MiNiFi service runs successfully. To do so, go to <a href="https://commons.apache.org/proper/commons-daemon/download_daemon.cgi">Commons Daemon project download page</a>, download the binary (e.g. <em>commons-daemon-1.1.0-bin.zip</em>), extract it and replace <em>bin/minifi.exe</em> by copying <code>commons-daemon-x.x.x-bin/prunsrv.exe</code> into MiNiFi <code>bin</code> directory as <em>minifi.exe</em> to overwrite the 64 bit exe with the 32 bit one.</p>
<h1 id="example-config-file">Example Config File</h1>
<p>Below are two example config YAML files. The first tails the <em>minifi-app.log</em> and sends the tailed log and provenance data back to a secure instance of NiFi. The second uses a series of processors to tail the app log, routes off only lines that contain &ldquo;WriteAheadFlowFileRepository&rdquo; and puts it as a file in the &ldquo;./&rdquo; directory.</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#008000;font-weight:bold">MiNiFi Config Version</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Flow Controller</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>MiNiFi Flow<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comment</span>:<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Core Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flow controller graceful shutdown period</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flow service write delay interval</span>:<span style="color:#bbb"> </span><span style="color:#666">500</span><span style="color:#bbb"> </span>ms<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">administrative yield duration</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">bored yield duration</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>millis<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">FlowFile Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">partitions</span>:<span style="color:#bbb"> </span><span style="color:#666">256</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">checkpoint interval</span>:<span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span>mins<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">always sync</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Swap</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">threshold</span>:<span style="color:#bbb"> </span><span style="color:#666">20000</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">in period</span>:<span style="color:#bbb"> </span><span style="color:#666">5</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">in threads</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">out period</span>:<span style="color:#bbb"> </span><span style="color:#666">5</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">out threads</span>:<span style="color:#bbb"> </span><span style="color:#666">4</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Provenance Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">provenance rollover time</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>min<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Content Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">content claim max appendable size</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">content claim max flow files</span>:<span style="color:#bbb"> </span><span style="color:#666">100</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">always sync</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Component Status Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">buffer size</span>:<span style="color:#bbb"> </span><span style="color:#666">1440</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">snapshot frequency</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>min<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Security Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore</span>:<span style="color:#bbb"> </span>/tmp/ssl/localhost-ks.jks<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore type</span>:<span style="color:#bbb"> </span>JKS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">key password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore</span>:<span style="color:#bbb"> </span>/tmp/ssl/localhost-ts.jks<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore type</span>:<span style="color:#bbb"> </span>JKS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">ssl protocol</span>:<span style="color:#bbb"> </span>TLS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Sensitive Props</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">key</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">algorithm</span>:<span style="color:#bbb"> </span>PBEWITHMD5AND256BITAES-CBC-OPENSSL<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">provider</span>:<span style="color:#bbb"> </span>BC<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Processors</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>TailFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">class</span>:<span style="color:#bbb"> </span>org.apache.nifi.processors.standard.TailFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">penalization period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">run duration nanos</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">auto-terminated relationships list</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">File to Tail</span>:<span style="color:#bbb"> </span>logs/minifi-app.log<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Rolling Filename Pattern</span>:<span style="color:#bbb"> </span>minifi-app*<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Initial Start Position</span>:<span style="color:#bbb"> </span>Beginning of File<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Connections</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>TailToS2S<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source name</span>:<span style="color:#bbb"> </span>TailFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source relationship name</span>:<span style="color:#bbb"> </span>success<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination name</span>:<span style="color:#bbb"> </span>8644cbcc-a45c-40e0-964d-5e536e2ada61<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue size</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue data size</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flowfile expiration</span>:<span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">queue prioritizer class</span>:<span style="color:#bbb"> </span>org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Remote Processing Groups</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>NiFi Flow<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comment</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">url</span>:<span style="color:#bbb"> </span>https://localhost:8090/nifi<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">timeout</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>secs<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Input Ports</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">id</span>:<span style="color:#bbb"> </span>8644cbcc-a45c-40e0-964d-5e536e2ada61<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>tailed log<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comments</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">use compression</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Provenance Reporting</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comment</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination url</span>:<span style="color:#bbb"> </span>https://localhost:8090/<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port name</span>:<span style="color:#bbb"> </span>provenance<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">originating url</span>:<span style="color:#bbb"> </span>http://${hostname(true)}:8081/nifi<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">use compression</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">timeout</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>secs<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">batch size</span>:<span style="color:#bbb"> </span><span style="color:#666">1000</span><span style="color:#bbb">
</span></code></pre></div><div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#008000;font-weight:bold">Flow Controller</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>MiNiFi Flow<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comment</span>:<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Core Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flow controller graceful shutdown period</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flow service write delay interval</span>:<span style="color:#bbb"> </span><span style="color:#666">500</span><span style="color:#bbb"> </span>ms<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">administrative yield duration</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">bored yield duration</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>millis<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent threads</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">FlowFile Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">partitions</span>:<span style="color:#bbb"> </span><span style="color:#666">256</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">checkpoint interval</span>:<span style="color:#bbb"> </span><span style="color:#666">2</span><span style="color:#bbb"> </span>mins<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">always sync</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Swap</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">threshold</span>:<span style="color:#bbb"> </span><span style="color:#666">20000</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">in period</span>:<span style="color:#bbb"> </span><span style="color:#666">5</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">in threads</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">out period</span>:<span style="color:#bbb"> </span><span style="color:#666">5</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">out threads</span>:<span style="color:#bbb"> </span><span style="color:#666">4</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Content Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">content claim max appendable size</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">content claim max flow files</span>:<span style="color:#bbb"> </span><span style="color:#666">100</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">always sync</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">false</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Component Status Repository</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">buffer size</span>:<span style="color:#bbb"> </span><span style="color:#666">1440</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">snapshot frequency</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>min<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Security Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore</span>:<span style="color:#bbb"> </span>/tmp/ssl/localhost-ks.jks<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore type</span>:<span style="color:#bbb"> </span>JKS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">keystore password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">key password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore</span>:<span style="color:#bbb"> </span>/tmp/ssl/localhost-ts.jks<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore type</span>:<span style="color:#bbb"> </span>JKS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">truststore password</span>:<span style="color:#bbb"> </span>localtest<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">ssl protocol</span>:<span style="color:#bbb"> </span>TLS<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Sensitive Props</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">key</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">algorithm</span>:<span style="color:#bbb"> </span>PBEWITHMD5AND256BITAES-CBC-OPENSSL<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">provider</span>:<span style="color:#bbb"> </span>BC<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Processors</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>TailAppLog<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">class</span>:<span style="color:#bbb"> </span>org.apache.nifi.processors.standard.TailFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">10</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">penalization period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">run duration nanos</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">auto-terminated relationships list</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">File to Tail</span>:<span style="color:#bbb"> </span>logs/minifi-app.log<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Rolling Filename Pattern</span>:<span style="color:#bbb"> </span>minifi-app*<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Initial Start Position</span>:<span style="color:#bbb"> </span>Beginning of File<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>SplitIntoSingleLines<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">class</span>:<span style="color:#bbb"> </span>org.apache.nifi.processors.standard.SplitText<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">penalization period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">run duration nanos</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">auto-terminated relationships list</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- failure<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- original<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Line Split Count</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Header Line Count</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Remove Trailing Newlines</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>RouteErrors<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">class</span>:<span style="color:#bbb"> </span>org.apache.nifi.processors.standard.RouteText<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">penalization period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">run duration nanos</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">auto-terminated relationships list</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- unmatched<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- original<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Routing Strategy</span>:<span style="color:#bbb"> </span>Route to &#39;matched&#39; if line matches all conditions<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Matching Strategy</span>:<span style="color:#bbb"> </span>Contains<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Character Set</span>:<span style="color:#bbb"> </span>UTF-8<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Ignore Leading/Trailing Whitespace</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Ignore Case</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Grouping Regular Expression</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">WALFFR</span>:<span style="color:#bbb"> </span>WriteAheadFlowFileRepository<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>PutFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">class</span>:<span style="color:#bbb"> </span>org.apache.nifi.processors.standard.PutFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max concurrent tasks</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">penalization period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">yield period</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">run duration nanos</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">auto-terminated relationships list</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- failure<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- success<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Properties</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Directory</span>:<span style="color:#bbb"> </span>./<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Conflict Resolution Strategy</span>:<span style="color:#bbb"> </span>replace<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Create Missing Directories</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Maximum File Count</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Last Modified Time</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Permissions</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Owner</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">Group</span>:<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Connections</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>TailToSplit<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source name</span>:<span style="color:#bbb"> </span>TailAppLog<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source relationship name</span>:<span style="color:#bbb"> </span>success<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination name</span>:<span style="color:#bbb"> </span>SplitIntoSingleLines<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue size</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue data size</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flowfile expiration</span>:<span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">queue prioritizer class</span>:<span style="color:#bbb"> </span>org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>SplitToRoute<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source name</span>:<span style="color:#bbb"> </span>SplitIntoSingleLines<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source relationship name</span>:<span style="color:#bbb"> </span>splits<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination name</span>:<span style="color:#bbb"> </span>RouteErrors<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue size</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue data size</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flowfile expiration</span>:<span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">queue prioritizer class</span>:<span style="color:#bbb"> </span>org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer<span style="color:#bbb">
</span><span style="color:#bbb"> </span>- <span style="color:#008000;font-weight:bold">name</span>:<span style="color:#bbb"> </span>RouteToS2S<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source name</span>:<span style="color:#bbb"> </span>RouteErrors<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">source relationship name</span>:<span style="color:#bbb"> </span>matched<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination name</span>:<span style="color:#bbb"> </span>PutFile<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue size</span>:<span style="color:#bbb"> </span><span style="color:#666">0</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">max work queue data size</span>:<span style="color:#bbb"> </span><span style="color:#666">1</span><span style="color:#bbb"> </span>MB<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">flowfile expiration</span>:<span style="color:#bbb"> </span><span style="color:#666">60</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">queue prioritizer class</span>:<span style="color:#bbb"> </span>org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#008000;font-weight:bold">Provenance Reporting</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">comment</span>:<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling strategy</span>:<span style="color:#bbb"> </span>TIMER_DRIVEN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">scheduling period</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>sec<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">destination url</span>:<span style="color:#bbb"> </span>https://localhost:8080/<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">port name</span>:<span style="color:#bbb"> </span>provenance<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">originating url</span>:<span style="color:#bbb"> </span>http://${hostname(true)}:8081/nifi<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">use compression</span>:<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">true</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">timeout</span>:<span style="color:#bbb"> </span><span style="color:#666">30</span><span style="color:#bbb"> </span>secs<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#008000;font-weight:bold">batch size</span>:<span style="color:#bbb"> </span><span style="color:#666">1000</span><span style="color:#bbb">
</span></code></pre></div>
</div>
</div>
<div class="row">
<div class="large-12 columns footer">
<a href="https://www.apache.org">
<img id="asf-logo" alt="Apache Software Foundation" src="/assets/images/asf_logo.png" width="200" style="margin:0px 10px" />
</a>
<a href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png" style="margin:0px 10px" />
</a>
<div id="copyright">
<p>Copyright &#169; 2022 The Apache Software Foundation, Licensed under the <a
href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>Apache, the
Apache feather logo, NiFi, Apache NiFi and the project logo are trademarks of The Apache Software
Foundation.</p>
</div>
</div>
</div>
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/foundation.js"></script>
<script src="/assets/js/app.js"></script>
</body>
</html>