mirror of https://github.com/apache/nifi.git
NIFI-221: included controller service needed in nar-bundles pom
This commit is contained in:
commit
2d0b163961
|
@ -72,7 +72,8 @@ public class DateCastEvaluator extends DateEvaluator {
|
|||
final Date date = sdf.parse(value);
|
||||
return new DateQueryResult(date);
|
||||
} catch (final ParseException pe) {
|
||||
throw new AttributeExpressionLanguageException("Could not parse input as date", pe);
|
||||
final String details = "Format: '" + DATE_TO_STRING_FORMAT + "' Value: '" + value + "'";
|
||||
throw new AttributeExpressionLanguageException("Could not parse date using " + details, pe);
|
||||
}
|
||||
} else if (NUMBER_PATTERN.matcher(value).matches()) {
|
||||
return new DateQueryResult(new Date(Long.valueOf(value)));
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
<ul>
|
||||
<li class="component-item"><a class="component-link overview" href="html/overview.html" target="component-usage">Overview</a></li>
|
||||
<li class="component-item"><a class="component-link user-guide" href="html/user-guide.html" target="component-usage">User Guide</a></li>
|
||||
<li class="component-item"><a class="component-link expression-language-guide" href="html/expression-language-guide.html" target="component-usage">Expression Language Guide</a></li>
|
||||
<li class="component-item"><a class="component-link admin-guide" href="html/administration-guide.html" target="component-usage">Admin Guide</a></li>
|
||||
</ul>
|
||||
<span class="no-matching no-components hidden">No matching guides</span>
|
||||
|
|
|
@ -259,7 +259,7 @@ $(document).ready(function () {
|
|||
});
|
||||
|
||||
// listen for on the rest api and user guide and developer guide and admin guide and overview
|
||||
$('a.rest-api, a.user-guide, a.developer-guide, a.admin-guide, a.overview').on('click', function() {
|
||||
$('a.rest-api, a.user-guide, a.developer-guide, a.admin-guide, a.overview, a.expression-language-guide').on('click', function() {
|
||||
selectComponent($(this).text());
|
||||
});
|
||||
|
||||
|
|
|
@ -30,13 +30,10 @@
|
|||
}
|
||||
|
||||
.tooltip {
|
||||
padding: 10px;
|
||||
display: none;
|
||||
position: absolute;
|
||||
padding: 10px;
|
||||
z-index: 1000;
|
||||
border: 3px solid #959FA9;
|
||||
background-color: #F9F9F9;
|
||||
color: #454545;
|
||||
}
|
||||
|
||||
/* svg styles */
|
||||
|
|
|
@ -111,6 +111,12 @@ div.context-menu-item-text {
|
|||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
div.nifi-tooltip {
|
||||
border: 1px solid #454545;
|
||||
background-color: #FFFFA3;
|
||||
color: #454545;
|
||||
}
|
||||
|
||||
.ellipsis {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
|
|
@ -97,9 +97,9 @@ nf.CanvasHeader = (function () {
|
|||
});
|
||||
|
||||
// setup the tooltip for the refresh icon
|
||||
$('#refresh-required-icon').qtip($.extend(nf.CanvasUtils.config.systemTooltipConfig, {
|
||||
$('#refresh-required-icon').qtip($.extend({
|
||||
content: 'This flow has been modified by another user. Please refresh.'
|
||||
}));
|
||||
}, nf.CanvasUtils.config.systemTooltipConfig));
|
||||
|
||||
// setup the refresh link actions
|
||||
$('#refresh-required-link').click(function () {
|
||||
|
|
|
@ -50,30 +50,9 @@ nf.CanvasUtils = (function () {
|
|||
|
||||
return {
|
||||
config: {
|
||||
cellTooltipConfig: {
|
||||
style: {
|
||||
classes: 'ui-tooltip-tipped ui-tooltip-shadow'
|
||||
},
|
||||
show: {
|
||||
solo: true,
|
||||
effect: false
|
||||
},
|
||||
hide: {
|
||||
effect: false
|
||||
},
|
||||
position: {
|
||||
target: 'mouse',
|
||||
viewport: $(window),
|
||||
adjust: {
|
||||
x: 8,
|
||||
y: 8,
|
||||
method: 'flipinvert flipinvert'
|
||||
}
|
||||
}
|
||||
},
|
||||
systemTooltipConfig: {
|
||||
style: {
|
||||
classes: 'ui-tooltip-tipped ui-tooltip-shadow'
|
||||
classes: 'nifi-tooltip'
|
||||
},
|
||||
show: {
|
||||
solo: true,
|
||||
|
@ -444,7 +423,7 @@ nf.CanvasUtils = (function () {
|
|||
.attr('id', function () {
|
||||
return 'bulletin-tip-' + d.component.id;
|
||||
})
|
||||
.attr('class', 'tooltip')
|
||||
.attr('class', 'tooltip nifi-tooltip')
|
||||
.html(function () {
|
||||
// format the bulletins
|
||||
var bulletins = nf.Common.getFormattedBulletins(d.status.bulletins);
|
||||
|
@ -476,12 +455,12 @@ nf.CanvasUtils = (function () {
|
|||
target.on('mouseenter', function () {
|
||||
tip.style('top', (d3.event.pageY + 15) + 'px').style('left', (d3.event.pageX + 15) + 'px').style('display', 'block');
|
||||
})
|
||||
.on('mousemove', function () {
|
||||
tip.style('top', (d3.event.pageY + 15) + 'px').style('left', (d3.event.pageX + 15) + 'px');
|
||||
})
|
||||
.on('mouseleave', function () {
|
||||
tip.style('display', 'none');
|
||||
});
|
||||
.on('mousemove', function () {
|
||||
tip.style('top', (d3.event.pageY + 15) + 'px').style('left', (d3.event.pageX + 15) + 'px');
|
||||
})
|
||||
.on('mouseleave', function () {
|
||||
tip.style('display', 'none');
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -695,9 +695,9 @@ nf.Canvas = (function () {
|
|||
bulletinIcon.qtip('option', 'content.text', newBulletins);
|
||||
} else {
|
||||
// no bulletins before, show icon and tips
|
||||
bulletinIcon.addClass('has-bulletins').qtip($.extend(nf.CanvasUtils.config.systemTooltipConfig, {
|
||||
bulletinIcon.addClass('has-bulletins').qtip($.extend({
|
||||
content: newBulletins
|
||||
}));
|
||||
}, nf.CanvasUtils.config.systemTooltipConfig));
|
||||
}
|
||||
|
||||
// show the icon
|
||||
|
|
|
@ -1164,9 +1164,9 @@ nf.ConnectionConfiguration = (function () {
|
|||
|
||||
// add the description if applicable
|
||||
if (nf.Common.isDefinedAndNotNull(prioritizerType.description)) {
|
||||
$('<img class="icon-info" style="float: right; margin-right: 5px;" src="images/iconInfo.png"></img>').appendTo(prioritizer).qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
$('<img class="icon-info" style="float: right; margin-right: 5px;" src="images/iconInfo.png"></img>').appendTo(prioritizer).qtip($.extend({
|
||||
content: nf.Common.escapeHtml(prioritizerType.description)
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ nf.Draggable = (function () {
|
|||
var updateConnectionPosition = function(d) {
|
||||
// only update if necessary
|
||||
if (d.component.bends.length === 0) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
|
||||
// calculate the new bend points
|
||||
|
@ -149,7 +149,10 @@ nf.Draggable = (function () {
|
|||
|
||||
// go through each selected connection
|
||||
d3.selectAll('g.connection.selected').each(function (d) {
|
||||
updates.set(d.component.id, updateConnectionPosition(d));
|
||||
var connectionUpdate = updateConnectionPosition(d);
|
||||
if (connectionUpdate !== null) {
|
||||
updates.set(d.component.id, connectionUpdate);
|
||||
}
|
||||
});
|
||||
|
||||
// go through each selected component
|
||||
|
@ -158,7 +161,10 @@ nf.Draggable = (function () {
|
|||
var connections = nf.Connection.getComponentConnections(d.component.id);
|
||||
$.each(connections, function(_, connection) {
|
||||
if (!updates.has(connection.id) && nf.CanvasUtils.getConnectionSourceComponentId(connection) === nf.CanvasUtils.getConnectionDestinationComponentId(connection)) {
|
||||
updates.set(connection.id, updateConnectionPosition(nf.Connection.get(connection.id)));
|
||||
var connectionUpdate = updateConnectionPosition(nf.Connection.get(connection.id));
|
||||
if (connectionUpdate !== null) {
|
||||
updates.set(connection.id, connectionUpdate);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -304,7 +304,7 @@ nf.Port = (function () {
|
|||
.attr('id', function () {
|
||||
return 'run-status-tip-' + d.component.id;
|
||||
})
|
||||
.attr('class', 'tooltip')
|
||||
.attr('class', 'tooltip nifi-tooltip')
|
||||
.html(function () {
|
||||
var list = nf.Common.formatUnorderedList(d.component.validationErrors);
|
||||
if (list === null || list.length === 0) {
|
||||
|
|
|
@ -302,9 +302,9 @@ nf.ProcessorPropertyTable = (function () {
|
|||
var tooltip = nf.Common.formatPropertyTooltip(propertyDescriptor, propertyHistory);
|
||||
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
infoIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
infoIcon.qtip($.extend({
|
||||
content: tooltip
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -437,7 +437,7 @@ nf.Processor = (function () {
|
|||
.attr('id', function () {
|
||||
return 'run-status-tip-' + d.component.id;
|
||||
})
|
||||
.attr('class', 'tooltip')
|
||||
.attr('class', 'tooltip nifi-tooltip')
|
||||
.html(function () {
|
||||
var list = nf.Common.formatUnorderedList(d.component.validationErrors);
|
||||
if (list === null || list.length === 0) {
|
||||
|
|
|
@ -231,9 +231,9 @@ nf.RemoteProcessGroupPorts = (function () {
|
|||
editRemotePort.show();
|
||||
}
|
||||
} else if (port.exists === false) {
|
||||
$('<div class="remote-port-removed"/>').appendTo(portContainerEditContainer).qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
$('<div class="remote-port-removed"/>').appendTo(portContainerEditContainer).qtip($.extend({
|
||||
content: 'This port has been removed.'
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
|
||||
// only allow modifications to transmission when the swtich is defined
|
||||
|
@ -364,13 +364,13 @@ nf.RemoteProcessGroupPorts = (function () {
|
|||
|
||||
// add this ports concurrent tasks
|
||||
$('<div>' +
|
||||
'<div class="setting-name">' +
|
||||
'<div class="setting-name">' +
|
||||
'Concurrent tasks' +
|
||||
'<img class="processor-setting concurrent-tasks-info" src="images/iconInfo.png" alt="Info"/>' +
|
||||
'</div>' +
|
||||
'</div>').append(concurrentTasks).appendTo(concurrentTasksContainer).find('img.concurrent-tasks-info').qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
'</div>' +
|
||||
'</div>').append(concurrentTasks).appendTo(concurrentTasksContainer).find('img.concurrent-tasks-info').qtip($.extend({
|
||||
content: 'The number of tasks that should be concurrently scheduled for this port.'
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
|
||||
var compressionContainer = $('<div class="compression-container"></div>').appendTo(portContainerDetailsContainer);
|
||||
|
||||
|
|
|
@ -568,7 +568,7 @@ nf.RemoteProcessGroup = (function () {
|
|||
.attr('id', function () {
|
||||
return 'authorization-issues-' + d.component.id;
|
||||
})
|
||||
.attr('class', 'tooltip')
|
||||
.attr('class', 'tooltip nifi-tooltip')
|
||||
.html(function () {
|
||||
var list = nf.Common.formatUnorderedList(d.status.authorizationIssues);
|
||||
if (list === null || list.length === 0) {
|
||||
|
@ -605,7 +605,7 @@ nf.RemoteProcessGroup = (function () {
|
|||
.attr('id', function () {
|
||||
return 'transmission-secure-' + d.component.id;
|
||||
})
|
||||
.attr('class', 'tooltip')
|
||||
.attr('class', 'tooltip nifi-tooltip')
|
||||
.text(function () {
|
||||
if (d.component.targetSecure === true) {
|
||||
return 'Site-to-Site is secure.';
|
||||
|
|
|
@ -57,7 +57,7 @@ nf.Common = {
|
|||
config: {
|
||||
tooltipConfig: {
|
||||
style: {
|
||||
classes: 'ui-tooltip-tipped ui-tooltip-shadow'
|
||||
classes: 'nifi-tooltip'
|
||||
},
|
||||
show: {
|
||||
solo: true,
|
||||
|
|
|
@ -381,9 +381,9 @@ nf.ProcessorDetails = (function () {
|
|||
var tooltip = nf.Common.formatPropertyTooltip(propertyDescriptor, propertyHistory);
|
||||
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
infoIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
infoIcon.qtip($.extend({
|
||||
content: tooltip
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -424,7 +424,7 @@ nf.SummaryTable = (function () {
|
|||
|
||||
// show the tooltip
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
bulletinIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
bulletinIcon.qtip($.extend({
|
||||
content: tooltip,
|
||||
position: {
|
||||
target: 'mouse',
|
||||
|
@ -435,7 +435,7 @@ nf.SummaryTable = (function () {
|
|||
method: 'flipinvert flipinvert'
|
||||
}
|
||||
}
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -817,7 +817,7 @@ nf.SummaryTable = (function () {
|
|||
|
||||
// show the tooltip
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
bulletinIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
bulletinIcon.qtip($.extend({
|
||||
content: tooltip,
|
||||
position: {
|
||||
target: 'mouse',
|
||||
|
@ -828,7 +828,7 @@ nf.SummaryTable = (function () {
|
|||
method: 'flipinvert flipinvert'
|
||||
}
|
||||
}
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1010,7 +1010,7 @@ nf.SummaryTable = (function () {
|
|||
|
||||
// show the tooltip
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
bulletinIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
bulletinIcon.qtip($.extend({
|
||||
content: tooltip,
|
||||
position: {
|
||||
target: 'mouse',
|
||||
|
@ -1021,7 +1021,7 @@ nf.SummaryTable = (function () {
|
|||
method: 'flipinvert flipinvert'
|
||||
}
|
||||
}
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1243,7 +1243,7 @@ nf.SummaryTable = (function () {
|
|||
|
||||
// show the tooltip
|
||||
if (nf.Common.isDefinedAndNotNull(tooltip)) {
|
||||
bulletinIcon.qtip($.extend(nf.Common.config.tooltipConfig, {
|
||||
bulletinIcon.qtip($.extend({
|
||||
content: tooltip,
|
||||
position: {
|
||||
target: 'mouse',
|
||||
|
@ -1254,7 +1254,7 @@ nf.SummaryTable = (function () {
|
|||
method: 'flipinvert flipinvert'
|
||||
}
|
||||
}
|
||||
}));
|
||||
}, nf.Common.config.tooltipConfig));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -37,77 +37,77 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>framework-cluster-protocol</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>framework-cluster-web</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>file-authorization-provider</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>cluster-authorization-provider</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>framework-cluster</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-runtime</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>client-dto</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-security</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>core-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>site-to-site</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>framework-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-user-actions</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-administration</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-jetty</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>web-optimistic-locking</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>hdfs-processors</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -38,13 +38,13 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>monitor-threshold-processor</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>monitor-threshold-ui</artifactId>
|
||||
<type>war</type>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>persistent-provenance-repository</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -47,46 +47,46 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>load-distribution-service</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>distributed-cache-client-service</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>distributed-cache-client-service-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>ssl-context-service-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>load-distribution-service-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>distributed-cache-protocol</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>distributed-cache-server</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>ssl-context-service</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
|
@ -96,37 +96,37 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>http-context-map</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>volatile-provenance-repository</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- The following dependencies are marked provided because they must be provided by the container. Nars can assume they are there-->
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-runtime</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-properties</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
|
|
@ -42,27 +42,27 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>standard-processors</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>standard-prioritizers</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>standard-reporting-tasks</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>standard-ganglia-reporter</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>jms-processors</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -106,12 +106,19 @@ public class ListenHTTP extends AbstractSessionFactoryProcessor {
|
|||
.required(false)
|
||||
.identifiesControllerService(SSLContextService.class)
|
||||
.build();
|
||||
public static final PropertyDescriptor HEADERS_AS_ATTRIBUTES_REGEX = new PropertyDescriptor.Builder()
|
||||
.name("HTTP Headers to receive as Attributes (Regex)")
|
||||
.description("Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes")
|
||||
.addValidator(StandardValidators.REGULAR_EXPRESSION_VALIDATOR)
|
||||
.required(false)
|
||||
.build();
|
||||
|
||||
public static final String URI = "/contentListener";
|
||||
public static final String CONTEXT_ATTRIBUTE_PROCESSOR = "processor";
|
||||
public static final String CONTEXT_ATTRIBUTE_LOGGER = "logger";
|
||||
public static final String CONTEXT_ATTRIBUTE_SESSION_FACTORY_HOLDER = "sessionFactoryHolder";
|
||||
public static final String CONTEXT_ATTRIBUTE_AUTHORITY_PATTERN = "authorityPattern";
|
||||
public static final String CONTEXT_ATTRIBUTE_HEADER_PATTERN = "headerPattern";
|
||||
public static final String CONTEXT_ATTRIBUTE_FLOWFILE_MAP = "flowFileMap";
|
||||
public static final String CONTEXT_ATTRIBUTE_STREAM_THROTTLER = "streamThrottler";
|
||||
|
||||
|
@ -131,6 +138,7 @@ public class ListenHTTP extends AbstractSessionFactoryProcessor {
|
|||
descriptors.add(SSL_CONTEXT_SERVICE);
|
||||
descriptors.add(AUTHORIZED_DN_PATTERN);
|
||||
descriptors.add(MAX_UNCONFIRMED_TIME);
|
||||
descriptors.add(HEADERS_AS_ATTRIBUTES_REGEX);
|
||||
this.properties = Collections.unmodifiableList(descriptors);
|
||||
}
|
||||
|
||||
|
@ -236,6 +244,9 @@ public class ListenHTTP extends AbstractSessionFactoryProcessor {
|
|||
contextHandler.setAttribute(CONTEXT_ATTRIBUTE_AUTHORITY_PATTERN, Pattern.compile(context.getProperty(AUTHORIZED_DN_PATTERN).getValue()));
|
||||
contextHandler.setAttribute(CONTEXT_ATTRIBUTE_STREAM_THROTTLER, streamThrottler);
|
||||
|
||||
if (context.getProperty(HEADERS_AS_ATTRIBUTES_REGEX).isSet()) {
|
||||
contextHandler.setAttribute(CONTEXT_ATTRIBUTE_HEADER_PATTERN, Pattern.compile(context.getProperty(HEADERS_AS_ATTRIBUTES_REGEX).getValue()));
|
||||
}
|
||||
server.start();
|
||||
|
||||
this.server = server;
|
||||
|
|
|
@ -20,6 +20,7 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
@ -56,7 +57,6 @@ import org.apache.nifi.util.FlowFileUnpackager;
|
|||
import org.apache.nifi.util.FlowFileUnpackagerV1;
|
||||
import org.apache.nifi.util.FlowFileUnpackagerV2;
|
||||
import org.apache.nifi.util.FlowFileUnpackagerV3;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
|
@ -88,6 +88,7 @@ public class ListenHTTPServlet extends HttpServlet {
|
|||
private ProcessorLog logger;
|
||||
private AtomicReference<ProcessSessionFactory> sessionFactoryHolder;
|
||||
private Pattern authorizedPattern;
|
||||
private Pattern headerPattern;
|
||||
private ConcurrentMap<String, FlowFileEntryTimeWrapper> flowFileMap;
|
||||
private StreamThrottler streamThrottler;
|
||||
|
||||
|
@ -103,6 +104,7 @@ public class ListenHTTPServlet extends HttpServlet {
|
|||
this.logger = (ProcessorLog) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_LOGGER);
|
||||
this.sessionFactoryHolder = (AtomicReference<ProcessSessionFactory>) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_SESSION_FACTORY_HOLDER);
|
||||
this.authorizedPattern = (Pattern) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_AUTHORITY_PATTERN);
|
||||
this.headerPattern = (Pattern) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_HEADER_PATTERN);
|
||||
this.flowFileMap = (ConcurrentMap<String, FlowFileEntryTimeWrapper>) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_FLOWFILE_MAP);
|
||||
this.streamThrottler = (StreamThrottler) context.getAttribute(ListenHTTP.CONTEXT_ATTRIBUTE_STREAM_THROTTLER);
|
||||
}
|
||||
|
@ -242,6 +244,16 @@ public class ListenHTTPServlet extends HttpServlet {
|
|||
if (StringUtils.isNotBlank(nameVal)) {
|
||||
attributes.put(CoreAttributes.FILENAME.key(), nameVal);
|
||||
}
|
||||
|
||||
// put arbitrary headers on flow file
|
||||
for(Enumeration<String> headerEnum = request.getHeaderNames();
|
||||
headerEnum.hasMoreElements(); ) {
|
||||
String headerName = headerEnum.nextElement();
|
||||
if (headerPattern != null && headerPattern.matcher(headerName).matches()) {
|
||||
String headerValue = request.getHeader(headerName);
|
||||
attributes.put(headerName, headerValue);
|
||||
}
|
||||
}
|
||||
|
||||
String sourceSystemFlowFileIdentifier = attributes.get(CoreAttributes.UUID.key());
|
||||
if (sourceSystemFlowFileIdentifier != null) {
|
||||
|
|
|
@ -57,6 +57,12 @@
|
|||
<li>Default value: .*</li>
|
||||
<li>Supports expression language: false</li>
|
||||
</ul></li>
|
||||
<li>HTTP Headers to receive as Attributes (Regex)
|
||||
<ul>
|
||||
<li>Specifies the Regular Expression that determines the names of HTTP Headers that should be passed along as FlowFile attributes</li>
|
||||
<li>Default value: no default</li>
|
||||
<li>Supports expression language: false</li>
|
||||
</ul></li>
|
||||
<li><strong>Max Unconfirmed FlowFile Time</strong>
|
||||
<ul>
|
||||
<li>The maximum amount of time to wait for a FlowFile to be confirmed before it is removed from the cache.</li>
|
||||
|
|
|
@ -38,18 +38,18 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>update-attribute-model</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>update-attribute-processor</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>update-attribute-ui</artifactId>
|
||||
<type>war</type>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>volatile-provenance-repository</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
<imagesdir>./images</imagesdir>
|
||||
<icons>font</icons>
|
||||
<toc>true</toc>
|
||||
<docVersion>${project.version}</docVersion>
|
||||
<docVersion>0.0.1-SNAPSHOT</docVersion>
|
||||
<sectanchors>true</sectanchors>
|
||||
<idprefix/>
|
||||
<idseparator>-</idseparator>
|
||||
|
|
|
@ -22,9 +22,9 @@ Apache NiFi Team <dev@nifi.incubator.apache.org>
|
|||
What is Apache NiFi?
|
||||
--------------------
|
||||
Put simply NiFi was built to automate the flow of data between systems. While
|
||||
the term 'dataflow' is used in a variety of contexts we'll use it here
|
||||
the term 'dataflow' is used in a variety of contexts, we'll use it here
|
||||
to mean the automated and managed flow of information between systems. This
|
||||
problem space has been around ever since enterprises had more than one system
|
||||
problem space has been around ever since enterprises had more than one system,
|
||||
where some of the systems created data and some of the systems consumed data.
|
||||
The problems and solution patterns that emerged have been discussed and
|
||||
articulated extensively. A comprehensive and readily consumed form is found in
|
||||
|
@ -45,7 +45,7 @@ What is noise one day becomes signal the next::
|
|||
Priorities of an organization change - rapidly. Enabling new flows and changing existing ones must be fast.
|
||||
|
||||
Systems evolve at different rates::
|
||||
The protocols and formats used by a given system can change anytime and often irrespective of the systems around them. Dataflow exists to connect what is essentially a massively distributed system of components loosely or not-at-all designed to work together.
|
||||
The protocols and formats used by a given system can change anytime and often irrespective of the systems around them. Dataflow exists to connect what is essentially a massively distributed system of components that are loosely or not-at-all designed to work together.
|
||||
|
||||
Compliance and security::
|
||||
Laws, regulations, and policies change. Business to business agreements change. System to system and system to user interactions must be secure, trusted, accountable.
|
||||
|
@ -60,7 +60,7 @@ success of a given enterprise. These include things like; Service Oriented
|
|||
Architecture <<soa>>, the rise of the API <<api>><<api2>>, Internet of Things <<iot>>,
|
||||
and Big Data <<bigdata>>. In addition, the level of rigor necessary for
|
||||
compliance, privacy, and security is constantly on the rise. Even still with
|
||||
all of these new concepts coming about the patterns and needs of dataflow is
|
||||
all of these new concepts coming about, the patterns and needs of dataflow are
|
||||
still largely the same. The primary differences then are the scope of
|
||||
complexity, the rate of change necessary to adapt, and that at scale
|
||||
the edge case becomes common occurrence. NiFi is built to help tackle these
|
||||
|
@ -78,21 +78,21 @@ the main NiFi concepts and how they map to FBP:
|
|||
| NiFi Term | FBP Term| Description
|
||||
|
||||
| FlowFile | Information Packet |
|
||||
A FlowFile represents the objects moving through the system and for each one NiFi
|
||||
keeps track of a Map of key/value pair attribute strings and its associated
|
||||
A FlowFile represents each object moving through the system and for each one, NiFi
|
||||
keeps track of a map of key/value pair attribute strings and its associated
|
||||
content of zero or more bytes.
|
||||
|
||||
| FlowFile Processor | Black Box |
|
||||
Processors are what actually performs work. In <<eip>> terms a processor is
|
||||
doing some combination of data Routing, Transformation, or mediation between
|
||||
systems. Processors have access to attributes of a given flow file and its
|
||||
Processors actually perform the work. In <<eip>> terms a processor is
|
||||
doing some combination of data Routing, Transformation, or Mediation between
|
||||
systems. Processors have access to attributes of a given FlowFile and its
|
||||
content stream. Processors can operate on zero or more FlowFiles in a given unit of work
|
||||
and either commit that work or rollback.
|
||||
|
||||
| Connection | Bounded Buffer |
|
||||
Connections provide the actual linkage between processors. These act as queues
|
||||
and allow various processes to interact at differing rates. These queues then
|
||||
can be prioritized dynamically and can have upper bounds on load which enables
|
||||
can be prioritized dynamically and can have upper bounds on load which enable
|
||||
back pressure.
|
||||
|
||||
| Flow Controller | Scheduler |
|
||||
|
@ -103,7 +103,7 @@ between processors.
|
|||
|
||||
| Process Group | subnet |
|
||||
A Process Group is a specific set of processes and their connections which can
|
||||
receive data via input ports and which can send data out via output ports. In
|
||||
receive data via input ports and send data out via output ports. In
|
||||
this manner process groups allow creation of entirely new components simply by
|
||||
composition of other components.
|
||||
|
||||
|
@ -153,10 +153,10 @@ image::nifi-arch-cluster.png["NiFi Cluster Architecture Diagram"]
|
|||
A NiFi cluster is comprised of one or more 'NiFi Nodes' (Node) controlled
|
||||
by a single NiFi Cluster Manager (NCM). The design of clustering is a simple
|
||||
master/slave model where the NCM is the master and the Nodes are the slaves.
|
||||
The NCM's reason for existence is to keep track of which Nodes are in the flow,
|
||||
The NCM's reason for existence is to keep track of which Nodes are in the cluster,
|
||||
their status, and to replicate requests to modify or observe the
|
||||
flow. Fundamentally then the NCM keeps the state of the cluster consistent.
|
||||
While the model is that of master and slave if the master dies the Nodes are all
|
||||
While the model is that of master and slave, if the master dies the Nodes are all
|
||||
instructed to continue operating as they were to ensure the data flow remains live.
|
||||
The absence of the NCM simply means new nodes cannot come on-line and flow changes
|
||||
cannot occur until the NCM is restored.
|
||||
|
@ -164,7 +164,7 @@ cannot occur until the NCM is restored.
|
|||
Performance Expections and Characteristics of NiFi
|
||||
--------------------------------------------------
|
||||
NiFi is designed to fully leverage the capabilities of the underlying host system
|
||||
its is operating on. This maximization of resources is particularly strong with
|
||||
it is operating on. This maximization of resources is particularly strong with
|
||||
regard to CPU and disk. Many more details will
|
||||
be provided on best practices and configuration tips in the Administration Guide.
|
||||
|
||||
|
@ -173,22 +173,22 @@ The throughput or latency
|
|||
one can expect to see will vary greatly on how the system is configured. Given
|
||||
that there are pluggable approaches to most of the major NiFi subsystems the
|
||||
performance will depend on the implementation. But, for something concrete and broadly
|
||||
applicable lets consider the out of the box default implementations that are used.
|
||||
applicable, let's consider the out-of-the-box default implementations that are used.
|
||||
These are all persistent with guaranteed delivery and do so using local disk. So
|
||||
being conservative assume roughly 50 MB/s read/write rate on modest disks or RAID volumes
|
||||
within a typical server. NiFi for a large class of data flows then should be able to
|
||||
efficiently reach one hundred or more MB/s of throughput. That is because linear growth
|
||||
is expected for each physical parition and content repository added to NiFi. This will
|
||||
being conservative, assume roughly 50 MB/s read/write rate on modest disks or RAID volumes
|
||||
within a typical server. NiFi for a large class of dataflows then should be able to
|
||||
efficiently reach 100 or more MB/s of throughput. That is because linear growth
|
||||
is expected for each physical partition and content repository added to NiFi. This will
|
||||
bottleneck at some point on the FlowFile repository and provenance repository.
|
||||
We plan to provide a benchmarking/performance test template to
|
||||
include in the build which will allow users to easily test their system and
|
||||
to identify where bottlenecks are and at which point they might become a factor. It
|
||||
should also make it easy for system administrators to make changes and to verity the impact.
|
||||
should also make it easy for system administrators to make changes and to verify the impact.
|
||||
|
||||
For CPU::
|
||||
The FlowController acts as the engine dictating when a given processor will be
|
||||
The Flow Controller acts as the engine dictating when a particular processor will be
|
||||
given a thread to execute. Processors should be written to return the thread
|
||||
as soon as they're done executing their task. The FlowController can be given a
|
||||
as soon as they're done executing their task. The Flow Controller can be given a
|
||||
configuration value indicating how many threads there should be for the various
|
||||
thread pools it maintains. The ideal number of threads to use will depend on the
|
||||
resources of the host system in terms of numbers of cores, whether that system is
|
||||
|
@ -205,7 +205,7 @@ how well the application will run over time.
|
|||
High Level Overview of Key NiFi Features
|
||||
----------------------------------------
|
||||
Guaranteed Delivery::
|
||||
A core philosophy of NiFi has been that even at very high scale guaranteed delivery
|
||||
A core philosophy of NiFi has been that even at very high scale, guaranteed delivery
|
||||
is a must. This is achieved through effective use of a purpose-built persistent
|
||||
write-ahead log and content repository. Together they are designed in such a way
|
||||
as to allow for very high transaction rates, effective load-spreading, copy-on-write,
|
||||
|
@ -218,12 +218,12 @@ as it reaches a specified age (its value has perished).
|
|||
|
||||
Prioritized Queuing::
|
||||
NiFi allows the setting of one or more prioritization schemes for how data is
|
||||
retrieved from a queue. The default is oldest first but there are times when
|
||||
retrieved from a queue. The default is oldest first, but there are times when
|
||||
data should be pulled newest first, largest first, or some other custom scheme.
|
||||
|
||||
Flow Specific QoS (latency v throughput, loss tolerance, etc..)::
|
||||
Flow Specific QoS (latency v throughput, loss tolerance, etc.)::
|
||||
There are points of a dataflow where the data is absolutely critical and it is
|
||||
loss intolerant. There are times when it must be processed and delivered within
|
||||
loss intolerant. There are also times when it must be processed and delivered within
|
||||
seconds to be of any value. NiFi enables the fine-grained flow specific configuration
|
||||
of these concerns.
|
||||
|
||||
|
@ -237,21 +237,21 @@ Recovery / Recording a rolling buffer of fine-grained history::
|
|||
NiFi's content repository is designed to act as a rolling buffer of history. Data
|
||||
is removed only as it ages off the content repository or as space is needed. This
|
||||
combined with the data provenance capability makes for an incredibly useful basis
|
||||
to enable click-to-content, download of content, replay, and all at a specific
|
||||
point in and objects lifecycle which can even span generations.
|
||||
to enable click-to-content, download of content, and replay, all at a specific
|
||||
point in an object's lifecycle which can even span generations.
|
||||
|
||||
Visual Command and Control::
|
||||
Dataflows can become quite complex. Being able to visualize those flows and express
|
||||
them visually can help greatly to reduce that complexity and to identify areas which
|
||||
them visually can help greatly to reduce that complexity and to identify areas that
|
||||
need to be simplified. NiFi enables not only the visual establishment of dataflows but
|
||||
it does so in real-time. Rather than being 'design and deploy' it is much more like
|
||||
molding clay. If you make a change to the dataflow that change is taking effect. Changes
|
||||
molding clay. If you make a change to the dataflow that change immediately takes effect. Changes
|
||||
are fine-grained and isolated to the affected components. You don't need to stop an entire
|
||||
flow or set of flows just to make some specific modification.
|
||||
|
||||
Flow Templates::
|
||||
Dataflows tend to be highly pattern oriented and while there are often many different
|
||||
ways to solve a problem it helps greatly to be able to share those best practices. Templates
|
||||
ways to solve a problem, it helps greatly to be able to share those best practices. Templates
|
||||
allow subject matter experts to build and publish their flow designs and for others to benefit
|
||||
and collaborate on them.
|
||||
|
||||
|
@ -263,8 +263,8 @@ Security::
|
|||
either side of the sender/recipient equation.
|
||||
User to system;;
|
||||
NiFi enables 2-Way SSL authentication and provides pluggable authorization so that it can properly control
|
||||
a users access and at particular levels (read-only, dataflow manager, admin). If a user enters a
|
||||
sensitive property like a password into the flow it is immediately encrypted server side and never again exposed
|
||||
a user's access and at particular levels (read-only, dataflow manager, admin). If a user enters a
|
||||
sensitive property like a password into the flow, it is immediately encrypted server side and never again exposed
|
||||
on the client side even in its encrypted form.
|
||||
|
||||
Designed for Extension::
|
||||
|
@ -275,12 +275,12 @@ Designed for Extension::
|
|||
For any component based system one problem that can quickly occur is dependency nightmares. NiFi addresses this by providing a custom class loader model
|
||||
ensuring that each extension bundle is exposed to a very limited set of dependencies. As a result extensions can be built with little concern for whether
|
||||
they might conflict with another extension. The concept of these extension bundles is called 'NiFi Archives' and will be discussed in greater detail
|
||||
in the developers guide.
|
||||
in the developer's guide.
|
||||
Clustering (scale-out)::
|
||||
NiFi is designed to scale-out through the use of clustering many nodes together as described above. If a single node is provisioned and configured
|
||||
to handle hundreds of MB/s then a modest cluster could be configured to handle GB/s. This then brings about interesting challenges of load balancing
|
||||
and fail-over between NiFi and the systems from which it gets data. Use of asynchronous queuing based protocols like messaging services, Kafka, etc.. can
|
||||
help. Use of NiFi's 'site-to-site' feature is also very effective as it is a protocol that allows NiFi and a client (could be another NiFi cluster) to talk to eachother, share information
|
||||
and fail-over between NiFi and the systems from which it gets data. Use of asynchronous queuing based protocols like messaging services, Kafka, etc., can
|
||||
help. Use of NiFi's 'site-to-site' feature is also very effective as it is a protocol that allows NiFi and a client (could be another NiFi cluster) to talk to each other, share information
|
||||
about loading, and to exchange data on specific authorized ports.
|
||||
|
||||
# References
|
||||
|
@ -292,4 +292,4 @@ Clustering (scale-out)::
|
|||
- [[[iot]]] Wikipedia. Internet of Things [online]. Retrieved: 27 Dec 2014, from: http://en.wikipedia.org/wiki/Internet_of_Things
|
||||
- [[[bigdata]]] Wikipedia. Big Data [online]. Retrieved: 27 Dec 2014, from: http://en.wikipedia.org/wiki/Big_data
|
||||
- [[[fbp]]] Wikipedia. Flow Based Programming [online]. Retrieved: 28 Dec 2014, from: http://en.wikipedia.org/wiki/Flow-based_programming#Concepts
|
||||
- [[[seda]]] Matt Welsh. Harvard. SEDA: An Architecture for Highly Concurrent Server Applications [online]. Retrieved: 28 Dec 2014, from: http://www.eecs.harvard.edu/~mdw/proj/seda/
|
||||
- [[[seda]]] Matt Welsh. Harvard. SEDA: An Architecture for Highly Concurrent Server Applications [online]. Retrieved: 28 Dec 2014, from: http://www.eecs.harvard.edu/~mdw/proj/seda/
|
||||
|
|
62
pom.xml
62
pom.xml
|
@ -631,57 +631,57 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-web-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-expression-language</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>custom-ui-utilities</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>flowfile-packager</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-socket-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>data-provenance-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-runtime</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-bootstrap</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-resources</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<classifier>resources</classifier>
|
||||
<scope>provided</scope> <!-- Provided - we don't want the zip in the libs -->
|
||||
<type>zip</type>
|
||||
|
@ -689,7 +689,7 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-docs</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<classifier>resources</classifier>
|
||||
<scope>provided</scope> <!-- Provided - we don't want the zip in the libs -->
|
||||
<type>zip</type>
|
||||
|
@ -697,73 +697,73 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-framework-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>volatile-provenance-repository-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>persistent-provenance-repository-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>standard-services-api-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>ssl-context-service-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>distributed-cache-services-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-standard-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-jetty-bundle</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>update-attribute-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>monitor-threshold-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>hadoop-libraries-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>hadoop-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<type>nar</type>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
@ -775,38 +775,38 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-properties</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-security-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-logging-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-nar</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-processor-utils</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>nifi-mock</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.nifi</groupId>
|
||||
<artifactId>wali</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
|
Loading…
Reference in New Issue