我从事的系统即将进行重大的技术更新。目标是改善当前阻止摄入更多数据的障碍。补救措施要求产品接收来自外部来源的投入,处理它们,并向其目的地传播结果。
Apache Nifi 实现了基于流的编程 (FBP)范式;它由黑箱进程组成,这些进程通过预定义的连接交换数据(摘自维基百科)。
简而言之,Apache NiFi 是处理和分发数据的工具。其直观的 UI 支持路由定义、各种连接器(输入/输出)和许多内置处理器。所有这些功能结合在一起,成为适合我们用例的可选平台。
鉴于我们系统的未来需求,我们决定对尼菲进行彻底评估。起点是设置环境。
在这篇文章中,我将介绍如何使用 Docker 映像设置 Nifi 环境并运行一个简单的预定义模板;从头开始构建 Nifi 流将另一篇文章介绍。本文主要三个部分:
- 回顾阿帕奇尼菲概念和构建基块
- 设置尼菲流和尼菲注册表(基于 Docker 图像)
- 加载并运行模板
准备?让我们从基础开始。
尼菲组件和概念
Nifi 基于以下层次结构:
- 流程组
处理器及其连接的集合。流程组是保存在版本控制(Nifi 注册表)中的最小单位。进程组可以具有允许连接进程组的输入和输出端口。这样,数据流可以由多个流程组组成。 - 处理器
(大部分)由连接器链接到另一个处理器的输入和输出的处理单元。每个处理器都是一个黑盒,执行单个操作;例如,处理器可以更改 FlowFile 的内容或属性(见下文)
FlowFile 对象是不可变的,但其内容和属性在处理过程中可能会更改。
连接是将流文件路由在处理器之间的队列。路由逻辑基于与处理器结果相关的条件;连接与一个或多个结果类型关联。连接的条件是处理器之间的关系,可以是静态的,也可以是动态的。虽然静态关系是固定的(例如 = 成功、失败、匹配或不匹配),但动态关系基于用户定义的 FlowFile 的属性;如果静态关系是固定的(例如 ,成功、失败、匹配或不匹配),但动态关系基于用户定义的 FlowFile 属性。本文的最后一节说明了使用RouteOnAttribute 处理器的此功能。
流程组的入口和退出点。每个进程组可以有一个或多个输入或输出端口,由其名称区分。
将多个连接中的数据合并到单个连接中。
下面的 Nifi 流描述了这些组件:
设置尼菲环境
我选择使用在 Docker 容器上托管的 Nifi,而不是在我的计算机上安装 Nifi,主要原因如下:
- 可移植性:Nifi 应用程序可以复制或移动到其他主机。
- 在同一主机上具有多个 Nifi 应用程序的灵活性,每个主机具有不同的端口。
- 低脚印:避免更换主机。
- 能够在定义 Nifi 流的过程中拍摄快照时冻结环境。
启动尼菲应用程序
我使用Ubuntu,一个基于德比安的Linux,所以你可以找到命令来安装和配置Dock到本文。
安装 Docker 后,从 下载最新的 Nifi 映像版本
您可以使用默认设置创建和启动 Docker 容器:
但是,我想创建一个更复杂的容器,允许以下: 下面的示例命令实现上述操作(容器的名称为nifi2)
$码头运行阿帕奇/尼菲