01_Apache NiFi入门

Apache NiFi入门

Apache NiFi团队dev@nifi.apache.org

目录

本指南适用于谁?

本指南是为从未使用过NiFi或仅接触过NiFi或仅完成特定任务的用户编写的。本指南无意成为详尽的说明手册或参考指南。本 用户指南提供的大量信息,旨在成为一个更更详尽的资源,是作为参考指南是非常有用的,也是如此。相比之下,本指南仅向用户提供所需的信息,以便他们了解如何使用NiFi,以便快速,轻松地构建强大而敏捷的数据流。

由于本指南中的某些信息仅适用于初次使用的用户,而其他信息则可能适用于曾经使用NiFi的用户,因此本指南分为几个不同的部分,其中某些部分可能对某些用户没有用。读者。随意跳到最适合您的部分。

本指南确实希望用户对NiFi是什么有一个基本的了解,并且不会深入研究这一详细级别。可在概述文档中找到此级别的信息 。

本指南中使用的术语

为了谈论NiFi,读者应该熟悉一些关键术语。我们将在此处较高层次地解释这些特定于NiFi的术语。

FlowFile:每个“用户数据”(即用户带入NiFi进行处理和分发的数据)都称为FlowFile。FlowFile由两部分组成:属性和内容。内容是用户数据本身。属性是与用户数据关联的键/值对。

处理器:处理器是NiFi组件,负责创建,发送,接收,转换,路由,拆分,合并和处理FlowFiles。它是NiFi用户可用来构建其数据流的最重要的构建块。

下载并安装NiFi

NiFi可以从NiFi下载页面下载。有两种打包选项:一个更适合Linux的“ tarball”和一个更适合Windows用户的zip文件。Mac OS X用户也可以使用压缩包,也可以通过Homebrew安装。

要通过Homebrew安装,只需运行命令brew install nifi

对于未运行OS X或未安装Homebrew的用户,下载您要使用的NiFi版本后,只需将存档提取到要从中运行应用程序的位置。

有关如何配置NiFi实例(例如,配置安全性,数据存储配置或运行NiFi的端口)的信息,请参阅《管理指南》

启动NiFi

如上所述下载并安装NiFi后,可以使用适合您操作系统的机制来启动它。

对于Windows用户

对于Windows用户,请导航至安装NiFi的文件夹。此文件夹中有一个名为的子文件夹bin。导航到此子文件夹,然后双击run-nifi.bat文件。

这将启动NiFi并使其在前台运行。要关闭NiFi,请选择已启动的窗口,并在按住C的同时按住Ctrl键。

对于Linux / Mac OS X用户

对于Linux和OS X用户,请使用“终端”窗口导航到安装NiFi的目录。要在前台运行NiFi,请运行bin/nifi.sh run。这将使应用程序运行,直到用户按下Ctrl-C。届时,它将启动应用程序的关闭。

要在后台运行NiFi,请运行bin/nifi.sh start。这将启动应用程序以开始运行。要检查状态并查看NiFi当前是否正在运行,请执行命令bin/nifi.sh status。通过执行命令可以关闭NiFi bin/nifi.sh stop

即服务安装

目前,仅Linux和Mac OS X用户支持将NiFi作为服务安装。要将应用程序作为服务安装,请在“终端”窗口中导航到安装目录,然后执行命令bin/nifi.sh install 以使用默认名称安装服务nifi。要为服务指定自定义名称,请使用可选的第二个参数(即服务名称)执行命令。例如,要将NiFi作为名称安装为服务dataflow,请使用命令bin/nifi.sh install dataflow

安装后,可以使用适当的命令(例如sudo service nifi start 和)启动和停止该服务sudo service nifi stop。另外,可以通过检查运行状态sudo service nifi status

我开始了NiFi。怎么办?

现在,NiFi已启动,我们可以启动用户界面(UI)来创建和监视我们的数据流。首先,请打开网络浏览器并导航至http://localhost:8080/nifi。可以通过编辑nifi.propertiesNiFi conf目录中的文件来更改端口,但默认端口为8080。

这将显示用户界面,这是用于编排数据流的空白画布:

新流程

UI有多种工具可以创建和管理您的第一个数据流:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avXyaPI6-1570756540435)(http://nifi.apache.org/docs/nifi-docs/html/images/nifi-toolbar-components.png)]

全局菜单包含以下选项:

全局菜单

添加处理器

现在,我们可以通过在画布上添加处理器来开始创建数据流。为此,将“处理器”图标(处理器)从屏幕的左上角拖到画布的中间(类似方格纸的背景),然后将其放在此处。这将为我们提供一个对话框,使我们可以选择要添加的处理器:

添加处理器

我们有很多选择。为了适应系统,我们只想将本地磁盘中的文件导入NiFi。当开发人员创建处理器时,开发人员可以为该处理器分配“标签”。这些可以被视为关键字。我们可以通过在对话框右上角的“过滤器”框中键入过滤器来按这些标签或处理器名称进行过滤。键入想要从本地磁盘提取文件时想到的关键字。例如,输入关键字“文件”将为我们提供一些处理文件的不同处理器。同样,通过术语“本地”进行过滤也会很快缩小列表的范围。如果从列表中选择一个处理器,我们将在对话框底部附近看到处理器的简短说明。这应该告诉我们处理器的确切功能。的描述GetFile Processor告诉我们,它会将数据从本地磁盘拉到NiFi中,然后删除本地文件。然后,我们可以双击处理器类型或选择它,然后选择 Add按钮。处理器将被添加到放置画布的位置。

配置处理器

现在,我们已经添加了GetFile Processor,我们可以通过右键单击Processor并选择Configure菜单项来对其进行配置。提供的对话框使我们可以配置许多不同的选项,这些选项可以在《用户指南》中阅读,但出于本指南的考虑,我们将重点关注“属性”标签。选择“属性”选项卡后,我们将为您提供几个可以为处理器配置的不同属性的列表。可用的属性取决于处理器的类型,并且每种类型通常都不同。粗体属性是必需属性。在配置了所有必需的属性之前,无法启动处理器。为GetFile配置的最重要的属性是从中拾取文件的目录。如果我们将目录名称设置为./data-in,这将导致处理器开始拾取目录中的所有数据。data-inNiFi主目录的子目录。我们可以选择为此处理器配置几个不同的属性。如果不确定某个特定属性的用途,我们可以将鼠标悬停在救命 属性名称旁边的“帮助”图标( )上,以读取该属性的描述。此外,将鼠标悬停在“帮助”图标上时显示的工具提示将提供该属性的默认值(如果存在),则提供有关该属性是否支持表达式语言的信息(请参见下面的“ 表达式语言/在属性值中使用属性”部分) )以及该属性的先前配置值。

为了使此属性有效,请data-in在NiFi主目录中创建一个目录,然后单击Ok按钮关闭对话框。

连接处理器

每个处理器都有一组定义的“关系”,可以将数据发送到这些关系。当处理器完成对FlowFile的处理时,它将其传输到这些关系之一。这使用户可以根据处理结果来配置如何处理FlowFiles。例如,许多处理器定义两个关系:successfailure。然后,如果处理器能够成功处理数据,则用户可以配置要通过该流路由的数据,如果处理器由于某种原因无法处理数据,则用户可以以完全不同的方式将数据路由通过流。或者,根据使用情况,它可以简单地将两个关系通过流程路由到同一路由。

现在,我们已经添加并配置了GetFile处理器并应用了配置,我们可以在Processor的左上角看到一个Alert图标( 警报 ),表示该Processor处于无效状态。将鼠标悬停在此图标上,可以看到该success 关系尚未定义。这仅表示我们没有告诉NiFi处理者转移到该success关系的数据该怎么做。

为了解决这个问题,请按照上述相同的步骤添加另一个可以将GetFile Processor连接到的Processor。但是,这一次,我们将仅记录FlowFile存在的属性。为此,我们将添加一个LogAttributes Processor。

现在,我们可以将GetFile Processor的输出发送到LogAttribute Processor。用鼠标悬停在GetFile处理器上,并且连接图标( 连接 )将出现在处理器的中间。我们可以将该图标从GetFile Processor拖到LogAttribute Processor。这为我们提供了一个对话框,以选择我们要为此连接包括的关系。由于GetFile只有一个Relationship success,因此会自动为我们选择它。

单击“设置”选项卡,可以提供一些选项来配置此连接的行为方式:

连接设定

如果愿意,我们可以给Connection命名。否则,连接名称将基于所选的关系。我们还可以为数据设置过期时间。默认情况下,它设置为“ 0秒”,表示数据不应过期。但是,我们可以更改该值,以便当此Connection中的数据达到一定期限时,将自动删除该值(并创建相应的EXPIRE Provenance事件)。

背压阈值使我们可以指定在不再安排源处理器运行之前允许队列已满的程度。这使我们能够处理一个处理器能够比另一个处理器消费该数据的速度更快的情况。如果沿途为每个连接配置了背压,则将数据带入系统的处理器最终将遇到背压并停止引入新数据,以便我们的系统具有恢复能力。

最后,我们在右侧有优先级排序器。这使我们可以控制如何排序此队列中的数据。我们可以将优先级从“可用优先级”列表拖到“选定优先级”列表,以激活优先级。如果激活了多个优先级排序器,将对其进行评估,以便首先评估第一个列出的优先级排序器;如果根据该优先级排序器确定两个FlowFiles相等,则将使用第二个优先级排序器。

为了便于讨论,我们只需单击Add即可将Connection添加到我们的图形中。现在,我们应该看到“警报”图标已更改为“已停止”图标( 已停止 )。但是,LogAttribute Processor现在无效,因为其successRelationship尚未连接到任何东西。让我们通过发信号通知success通过LogAttribute 路由到的数据应为“自动终止” 来解决此问题,这意味着NiFi应该考虑FlowFile的处理已完成并“删除”数据。为此,我们配置LogAttribute Processor。在“设置”选项卡的右侧,我们可以选中“ success自动终止数据的关系”旁边的框。单击OK将关闭对话框,并显示两个处理器现在都已停止。

启动和停止处理器

至此,我们的图形上有两个处理器,但是没有任何反应。为了启动处理器,我们可以分别单击每个处理器,然后右键单击并选择Start菜单项。或者,我们可以选择第一个处理器,然后在选择另一个处理器的同时按住Shift键以同时选择两者。然后,我们可以右键单击并选择Start菜单项。作为使用上下文菜单的替代方法,我们可以选择处理器,然后单击操作面板中的开始图标。

启动后,处理器左上角的图标将从停止的图标更改为正在运行的图标。然后,我们可以使用“操作”调板或Stop菜单项中的“停止”图标来停止处理器。

一旦处理器启动,我们将无法对其进行配置。相反,当我们右键单击处理器时,可以选择查看其当前配置。为了配置处理器,我们必须首先停止处理器并等待任何可能正在执行的任务完成。当前正在执行的任务数显示在处理器的右上角附近,但是如果当前没有任务,则那里什么也没有显示。

获取处理器的更多信息

由于每个处理器都有能力公开多个不同的属性和关系,因此记住所有不同部分对每个处理器的工作方式可能具有挑战性。为了解决这个问题,您可以右键单击处理器,然后选择Usage菜单项。这将为您提供处理器的使用信息,例如处理器的描述,可用的不同关系,何时使用不同的关系,处理器及其文档公开的属性以及哪些FlowFile属性( (如果有的话)期望在传入的FlowFiles上使用,并将哪些属性(如果有的话)添加到传出的FlowFiles。

其他组件

工具栏为用户提供了将“处理器”拖放到图形上的能力,其中包括可用于构建数据流的其他几个组件。这些组件包括输入和输出端口,漏斗,过程组和远程过程组。由于本文档的预期范围,我们在此将不讨论这些元素,但是可以在《用户指南》的“ 构建数据流”部分中 轻松获得信息。

可用的处理器

为了创建有效的数据流,用户必须了解他们可以使用哪些类型的处理器。NiFi包含许多不同的处理器。这些处理器提供以下功能:从众多不同的系统中提取数据,路由,转换,处理,拆分和聚合数据,并将数据分发到许多系统。

在几乎每个NiFi版本中,可用的处理器数量都会增加。因此,我们不会尝试命名每个可用的处理器,但是将重点介绍一些最常用的处理器,并按功能对其进行分类。

数据转换

  • CompressContent:压缩或解压缩内容
  • ConvertCharacterSet:将用于编码内容的字符集从一个字符集转换为另一个字符集
  • EncryptContent:加密或解密内容
  • ReplaceText:使用正则表达式修改文本内容
  • TransformXml:将XSLT转换应用于XML内容
  • JoltTransformJSON:应用JOLT规范转换JSON内容

路由与中介

  • ControlRate:限制数据流通过一部分流量的速率
  • DetectDuplicate:基于某些用户定义的条件,监视重复的FlowFiles。常与HashContent结合使用
  • DistributeLoad:通过仅将一部分数据分配给每个用户定义的关系来实现负载平衡或样本数据
  • MonitorActivity:在用户定义的时间段过后,没有任何数据通过流中的特定点时,发送通知。(可选)在数据流恢复时发送通知。
  • RouteOnAttribute:根据FlowFile包含的属性来路由它。
  • ScanAttribute:在FlowFile上扫描用户定义的属性集,检查是否有任何属性与用户定义的词典中找到的术语匹配。
  • RouteOnContent:搜索FlowFile的内容以查看其是否与任何用户定义的正则表达式匹配。如果是这样,则将FlowFile路由到已配置的Relationship。
  • ScanContent:在FlowFile的内容中搜索用户定义的词典中存在的术语,并根据这些术语的存在或不存在进行路由。该词典可以包含文本条目或二进制条目。
  • ValidateXml:根据XML模式验证XML内容;根据用户定义的XML模式,根据FlowFile的内容是否有效来路由FlowFile。

数据库访问

  • ConvertJSONToSQL:将JSON文档转换为SQL INSERT或UPDATE命令,然后可以将其传递到PutSQL处理器
  • ExecuteSQL:执行用户定义的SQL SELECT命令,将结果以Avro格式写入FlowFile
  • PutSQL:通过执行由FlowFile的内容定义的SQL DDM语句来更新数据库
  • SelectHiveQL:对Apache Hive数据库执行用户定义的HiveQL SELECT命令,将结果以Avro或CSV格式写入FlowFile
  • PutHiveQL:通过执行由FlowFile的内容定义的HiveQL DDM语句来更新Hive数据库

属性提取

  • EvaluateJsonPath:用户提供JSONPath表达式(类似于XPath,用于XML解析/提取),然后根据JSON内容对这些表达式进行评估,以替换FlowFile内容或将值提取到用户命名的Attribute中。
  • EvaluateXPath:用户提供XPath表达式,然后根据XML内容对这些表达式进行评估,以替换FlowFile内容或将值提取到用户命名的Attribute中。
  • EvaluateXQuery:用户提供一个XQuery查询,然后根据XML内容对该查询进行评估,以替换FlowFile内容或将该值提取到用户命名的Attribute中。
  • ExtractText:用户提供一个或多个正则表达式,然后根据FlowFile的文本内容对其进行评估,然后将提取的值添加为用户命名的属性。
  • HashAttribute:对现有属性的用户定义列表的串联执行哈希函数。
  • HashContent:对FlowFile的内容执行哈希函数,并将哈希值添加为Attribute。
  • IdentifyMimeType:评估FlowFile的内容,以确定FlowFile封装的文件类型。该处理器能够检测许多不同的MIME类型,例如图像,文字处理器文档,文本和压缩格式。
  • UpdateAttribute:向FlowFile添加或更新任意数量的用户定义属性。这对于添加静态配置的值以及使用表达式语言动态派生属性值很有用。该处理器还提供了一个“高级用户界面”,使用户可以根据用户提供的规则有条件地更新属性。

系统互动

  • ExecuteProcess:运行用户定义的操作系统命令。重定向流程的StdOut,以使写入StdOut的内容成为出站FlowFile的内容。该处理器是一个源处理器-预期其输出将生成新的FlowFile,并且预期系统调用将不接收任何输入。为了向过程提供输入,请使用ExecuteStreamCommand Processor。
  • ExecuteStreamCommand:运行用户定义的操作系统命令。FlowFile的内容可以选择流式传输到流程的StdIn。写入StdOut的内容将成为出站FlowFile的内容。该处理器不能用作源处理器-必须将其输入传入的FlowFiles才能执行其工作。要与源处理器执行相同类型的功能,请参见ExecuteProcess Processor。

资料撷取

  • GetFile:将文件的内容从本地磁盘(或网络连接的磁盘)流式传输到NiFi中,然后删除原始文件。希望该处理器将文件从一个位置移动到另一位置,并且不得用于复制数据。
  • GetFTP:通过FTP将远程文件的内容下载到NiFi中,然后删除原始文件。希望该处理器将数据从一个位置移动到另一位置,并且不得用于复制数据。
  • GetSFTP:通过SFTP将远程文件的内容下载到NiFi中,然后删除原始文件。希望该处理器将数据从一个位置移动到另一位置,并且不得用于复制数据。
  • GetJMSQueue:从JMS队列下载消息,并根据JMS消息的内容创建FlowFile。还可以选择将JMS属性复制为属性。
  • GetJMSTopic:从JMS主题下载消息,并根据JMS消息的内容创建FlowFile。还可以选择将JMS属性复制为属性。该处理器支持持久订阅和非持久订阅。
  • GetHTTP:将基于远程HTTP或HTTPS的URL的内容下载到NiFi中。处理器将记住ETag和上次修改日期,以确保不会连续摄取数据。
  • ListenHTTP:启动HTTP(或HTTPS)服务器并侦听传入的连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200响应。
  • ListenUDP:侦听传入的UDP数据包,并为每个数据包或每个数据包包创建一个FlowFile(取决于配置),并将FlowFile发送为“成功”关系。
  • GetHDFS:监视HDFS中用户指定的目录。每当有新文件进入HDFS时,就会将其复制到NiFi中并从HDFS中删除。希望该处理器将文件从一个位置移动到另一位置,并且不得用于复制数据。如果该处理器在群集中运行,则也应仅在主节点上运行。为了从HDFS复制数据并使其保持完整,或从群集中的多个节点流传输数据,请参阅ListHDFS处理器。
  • ListHDFS / FetchHDFS:ListHDFS监视HDFS中用户指定的目录,并发出一个FlowFile,其中包含它遇到的每个文件的文件名。然后,它通过分布式缓存在整个NiFi群集中保持此状态。然后,可以将这些FlowFiles散布到整个群集中,并发送到FetchHDFS处理器,该处理器负责获取这些文件的实际内容,并发出包含从HDFS中获取的内容的FlowFiles。
  • FetchS3Object:从Amazon Web Services(AWS)简单存储服务(S3)获取对象的内容。出站FlowFile包含从S3接收的内容。
  • GetKafka:从Apache Kafka获取消息,特别是针对0.8.x版本。这些消息可以作为每个消息的FlowFile发出,也可以使用用户指定的定界符一起批处理。
  • GetMongo:对MongoDB执行用户指定的查询,并将内容写入新的FlowFile。
  • GetTwitter:允许用户注册一个过滤器以侦听Twitter的“花园软管”或Enterprise端点,从而为收到的每个推文创建一个FlowFile。

数据出口/发送数据

  • PutEmail:向配置的收件人发送电子邮件。FlowFile的内容可以作为附件发送。
  • PutFile:将FlowFile的内容写入本地(或网络连接)文件系统上的目录中。
  • PutFTP:将FlowFile的内容复制到远程FTP服务器。
  • PutSFTP:将FlowFile的内容复制到远程SFTP服务器。
  • PutJMS:将FlowFile的内容作为JMS消息发送到JMS代理,可以选择基于属性添加JMS属性。
  • PutSQL:以SQL DDL语句(INSERT,UPDATE或DELETE)的形式执行FlowFile的内容。FlowFile的内容必须是有效的SQL语句。可以将属性用作参数,以便可以将FlowFile的内容参数化为SQL语句,以避免SQL注入攻击。
  • PutKafka:将FlowFile的内容作为消息发送到Apache Kafka,特别是针对0.8.x版本。FlowFile可以作为单个消息发送,也可以使用分隔符(例如可以指定换行符)发送,以便为单个FlowFile发送许多消息。
  • PutMongo:将FlowFile的内容作为INSERT或UPDATE发送到Mongo。

分裂与聚集

  • SplitText:SplitText接收单个FlowFile,其内容为文本,然后根据配置的行数将其拆分为1个或多个FlowFile。例如,可以将处理器配置为将一个FlowFile拆分为多个FlowFile,每个文件只有1行。
  • SplitJson:允许用户将由数组或许多子对象组成的JSON对象拆分为每个JSON元素到FlowFile中。
  • SplitXml:允许用户将XML消息拆分为多个FlowFile,每个FlowFiles包含原始文件的一部分。通常在将几个XML元素与“包装”元素结合在一起时使用。然后,此处理器允许将那些元素拆分为单独的XML元素。
  • UnpackContent:解压缩不同类型的存档格式,例如ZIP和TAR。然后,存档中的每个文件都将作为单个FlowFile进行传输。
  • MergeContent:此处理器负责将多个FlowFile合并到单个FlowFile中。可以通过将FlowFiles的内容与可选的页眉,页脚和分界符连接在一起,或者通过指定存档格式(例如ZIP或TAR)来合并FlowFiles。FlowFiles可以基于公共属性进行装箱,如果通过其他拆分过程将它们分开,则可以对其进行“碎片整理”。每个bin的最小和最大大小由用户指定,具体取决于FlowFiles内容的元素数或总大小,还可以分配一个可选的Timeout,以便FlowFiles仅在一定时间内等待其bin变满多少时间。
  • SegmentContent:根据一些已配置的数据大小,将FlowFile分割为可能更小的FlowFile。不针对任何类型的分界符执行拆分,而仅基于字节偏移量执行。在传输FlowFiles之前使用它,以便通过并行发送许多不同的片段来提供较低的延迟。另一方面,这些FlowFiles随后可以由MergeContent处理器使用碎片整理模式重新组装。
  • SplitContent:类似于SegmentContent,将单个FlowFile拆分为可能的多个FlowFile。但是,使用SplitContent时,不对任意字节边界执行拆分,而是指定了要在其上拆分内容的字节序列。

HTTP

  • GetHTTP:将基于远程HTTP或HTTPS的URL的内容下载到NiFi中。处理器将记住ETag和上次修改日期,以确保不会连续摄取数据。
  • ListenHTTP:启动HTTP(或HTTPS)服务器并侦听传入的连接。对于任何传入的POST请求,请求的内容将作为FlowFile写出,并返回200响应。
  • InvokeHTTP:执行由用户配置的HTTP请求。该处理器比GetHTTP和PostHTTP具有更多的用途,但是需要更多的配置。该处理器不能用作源处理器,并且必须具有传入的FlowFiles才能被触发执行其任务。
  • PostHTTP:执行HTTP POST请求,将FlowFile的内容作为消息的主体发送。在无法使用站点到站点的情况下(例如,当节点之间无法直接访问并且能够通过HTTP进行通信时),通常将它与ListenHTTP结合使用,以便在两个不同的NiFi实例之间传输数据。代理)。 注意:除了现有的RAW套接字传输之外,HTTP还可作为站点到站点传输协议使用。它还支持HTTP代理。建议使用HTTP Site-to-Site,因为它具有更高的可扩展性,并且可以使用输入/输出端口提供双向数据传输,并具有更好的用户身份验证和授权。
  • HandleHttpRequest / HandleHttpResponse:HandleHttpRequest处理器是一个源处理器,它启动类似于ListenHTTP的嵌入式HTTP(S)服务器。但是,它不会向客户端发送响应。相反,将以HTTP请求的正文作为其内容和属性(所有典型的Servlet参数,标头等)作为属性来发送FlowFile。然后,在FlowFile处理完毕后,HandleHttpResponse可以将响应发送回客户端。始终希望这些处理器可以相互结合使用,并允许用户在NiFi中直观地创建Web服务。这对于将前端添加到非基于Web的协议或围绕NiFi已执行的某些功能(例如数据格式转换)添加简单的Web服务特别有用。

亚马逊网络服务

  • FetchS3Object:获取存储在Amazon Simple Storage Service(S3)中的对象的内容。然后将从S3中检索到的内容写入FlowFile的内容。
  • PutS3Object:使用配置的凭证,密钥和存储桶名称将FlowFile的内容写入Amazon S3对象。
  • PutSNS:将FlowFile的内容作为通知发送到Amazon Simple Notification Service(SNS)。
  • GetSQS:从Amazon Simple Queuing Service(SQS)中提取一条消息,并将消息的内容写入FlowFile的内容。
  • PutSQS:将FlowFile的内容作为消息发送到Amazon Simple Queuing Service(SQS)。
  • DeleteSQS:从Amazon Simple Queuing Service(SQS)删除消息。可以将其与GetSQS结合使用,以便从SQS接收消息,对其进行一些处理,然后仅在对象成功完成处理后才从队列中删除该对象。

使用属性

每个FlowFile都创建有几个属性,并且这些属性将在FlowFile的使用期限内发生变化。FlowFile的概念非常强大,并提供了三个主要好处。首先,它允许用户在流中做出路由决策,以便可以以不同于其他FlowFiles的方式处理满足某些条件的FlowFiles。这是通过使用RouteOnAttribute和类似的处理器来完成的。

其次,使用属性来配置处理器,以使处理器的配置取决于数据本身。例如,PutFile处理器能够使用属性来知道每个FlowFile的存储位置,而每个FlowFile的目录和文件名属性可能不同。

最后,属性提供了有关数据的非常有价值的上下文。在查看FlowFile的出处数据时,这很有用。这允许用户搜索与特定条件匹配的出处数据,并且还允许用户在检查出处事件的详细信息时查看此上下文。通过这样做,用户只需看一眼与内容一起携带的上下文,就能够获得关于为什么以一种或另一种方式处理数据的宝贵见解。

共同属性

每个FlowFile都有一组最少的属性:

  • filename:可用于将数据存储到本地或远程文件系统的文件名。
  • path:可用于将数据存储到本地或远程文件系统的目录的名称。
  • uuid:通用唯一标识符,用于将FlowFile与系统中的其他FlowFile进行区分。
  • entryDate:FlowFile进入系统(即已创建)的日期和时间。此属性的值是一个数字,表示自1970年1月1日午夜(UTC)以来的毫秒数。
  • lineageStartDate:每当克隆,合并或拆分FlowFile时,都会导致创建“子” FlowFile。然后,在克隆,合并或拆分这些子代时,便构建了一个祖先链。此值表示最早的祖先进入系统的日期和时间。考虑这一点的另一种方法是,此属性表示FlowFile通过系统的延迟。该值是代表自1970年1月1日午夜(UTC)以来的毫秒数。
  • fileSize:此属性表示FlowFile的内容占用的字节数。

需要注意的是uuidentryDatelineageStartDate,和fileSize属性是系统生成的,不能改变。

提取属性

NiFi开箱即用提供了几种不同的处理器,用于从FlowFiles中提取属性。可以在上面的“ 属性提取”部分中找到为此目的常用的处理器列表。同样,这也是构建自定义处理器的非常常见的用例。编写了许多处理器以了解特定的数据格式,并从FlowFile的内容中提取相关信息,并创建属性来保存该信息,以便随后就如何路由或处理数据做出决策。

添加用户定义的属性

除了使处理器能够从FlowFile内容中提取特定信息到属性中外,用户还希望将自己的用户定义属性添加到流中特定位置的每个FlowFile中。UpdateAttribute Processor专为此目的而设计。通过单击“属性”选项卡右上角的“ +”按钮,用户可以在“配置”对话框中向处理器添加新属性。然后提示用户输入属性的名称,然后输入值。对于此UpdateAttribute Processor处理的每个FlowFile,将为每个用户定义的属性添加一个属性。属性的名称将与添加的属性的名称相同。

该属性的值也可以包含表达语言。这允许基于其他属性修改或添加属性。例如,如果我们要在处理文件的主机名和日期前加上文件名,则可以通过添加名称filename和值的属性来实现${hostname()}-${now():format('yyyy-dd-MM')}-${filename}。乍一看这似乎令人困惑,但是下面有关表达式语言/在属性值中使用属性的部分将有助于弄清这里发生的情况。

除了始终添加一组定义的属性外,UpdateAttribute Processor还具有一个高级UI,该UI允许用户配置一组规则,在这些规则上应添加属性。要访问此功能,请在“配置”对话框的“属性”选项卡中,单击Advanced对话框底部的按钮。这将提供专门针对此处理器定制的UI,而不是为所有处理器提供的简单“属性”表。在此UI中,用户能够配置规则引擎,从本质上讲,指定必须匹配的规则才能将已配置的属性添加到FlowFile。

属性路由

NiFi最强大的功能之一就是能够基于FlowFiles的属性来对其进行路由。执行此操作的主要机制是RouteOnAttribute Processor。该处理器与UpdateAttribute一样,是通过添加用户定义的属性来配置的。单击“处理器”的“配置”对话框中“属性”选项卡右上角的“ +”按钮,可以添加任意数量的属性。

将每个FlowFile的属性与配置的属性进行比较,以确定FlowFile是否满足指定的条件。每个属性的值都应为表达式语言表达式,并返回布尔值。有关表达式语言的更多信息,请参见下面的“ 表达式语言/在属性值中使用属性”部分。

在评估针对FlowFile的属性提供的表达语言表达式后,处理器将根据所选的路由策略确定如何路由FlowFile。最常见的策略是“路由到属性名称”策略。选择此策略后,处理器将为每个配置的属性显示一个关系。如果FlowFile的属性满足给定的表达式,则FlowFile的副本将被路由到相应的Relationship。例如,如果我们有一个名为“ begins-with-r”和值为“ $ {filename:startsWith(‘r’)}”的新属性,则任何文件名以字母“ r”开头的FlowFile都将是路由到该关系。所有其他FlowFiles将被路由到“ unmatched”。

表达式语言/在属性值中使用属性

当我们从FlowFiles的内容中提取属性并添加用户定义的属性时,除非我们有某种使用它们的机制,否则它们对我们作为运算符的作用不大。NiFi表达式语言允许我们在配置流程时访问和操作FlowFile属性值。并非所有处理器属性都允许使用表达式语言,但许多属性都可以使用。为了确定属性是否支持表达式语言,用户可以将鼠标悬停在救命 “处理器配置”对话框的“属性”选项卡中的“帮助”图标( )上。这将提供一个工具提示,该提示显示属性的描述,默认值(如果有)以及该属性是否支持表达式语言。

对于确实支持表达式语言的属性,可以通过在开始${标记和结束 }标记内添加表达式来使用它。表达式可以和属性名称一样简单。例如,要引用uuidAttribute,我们可以简单地使用value ${uuid}。如果属性名称以字母以外的任何字符开头,或者包含数字,字母,句点(。)或下划线(_)以外的其他字符,则需要用引号引起来。例如,${My Attribute Name} 将是无效的,但${'My Attribute Name'}将引用Attribute My Attribute Name

除了引用属性值之外,我们还可以对这些属性执行许多功能和比较。例如,如果我们要检查filename属性是否包含字母“ r”而不关注大小写(大写或小写),则可以使用表达式来实现${filename:toLower():contains('r')}。注意这里的功能用冒号隔开。我们可以将任意数量的函数链接在一起以构建更复杂的表达式。在这里要理解,即使我们正在调用filename:toLower(),这也不会改变filenameAttribute 的值,而只是给我们提供了一个新的值,这一点也很重要。

我们还可以将一个表达式嵌入另一个表达式中。举例来说,如果我们要比较的价值attr1属性的价值attr2属性,我们可以用下面的表达式做到这一点:${attr1:equals( ${attr2} )}

表达式语言包含许多不同的功能,可用于执行路由和处理属性所需的任务。存在用于解析和处理字符串,比较字符串和数字值,处理和替换值以及比较值的功能。对可用的不同功能的完整说明不在本文档的范围之内,但是《 表达式语言指南》为每个功能提供了更多详细信息。

此外,此表达语言指南内置于应用程序中,因此用户可以在键入时轻松查看可用的功能并查看其文档。在设置支持表达式语言的属性的值时,如果光标位于表达式语言的开始和结束标记之内,则按关键字上的Ctrl +空格键将弹出所有可用功能,并且会自动完整的功能。单击或使用键盘导航到弹出窗口中列出的功能之一,将显示一个工具提示,其中解释了该功能的作用,期望的参数以及该函数的返回类型。

表达式语言中的自定义属性

除了使用FlowFile属性外,您还可以定义用于表达语言的自定义属性。定义自定义属性使您在处理和配置数据流时具有更多的灵活性。例如,您可以引用连接,服务器和服务属性的自定义属性。创建自定义属性后,可以nifi.variable.registry.properties在“ nifi.properties”文件中的字段中标识它们的位置。更新“ nifi.properties”文件并重新启动NiFi之后,便可以根据需要使用自定义属性。

使用模板

当我们使用处理器在NiFi中构建越来越复杂的数据流时,我们经常会发现我们将相同顺序的处理器串在一起以执行某些任务。这可能变得乏味且效率低下。为了解决这个问题,NiFi提供了模板的概念。可以将模板视为可重用的子流。若要进行模板,请按照下列步骤操作:

  • 选择要包含在模板中的组件。我们可以选择多个组件,方法是单击第一个组件,然后在选择其他组件时按住Shift键(以包括这些组件之间的连接),或者在按住Shift键的同时在画布上的所需组件周围拖动一个框,以选择多个组件。
  • 新模板图标 从操作面板中选择创建模板图标( )。
  • 提供模板的名称和描述(可选)。
  • 点击Create按钮。

一旦创建了模板,就可以像处理程序一样将其用作流程中的构建块。为此,我们将从模板 组件工具栏上单击模板图标()并将其 拖到画布上。然后,我们可以选择要添加到画布上的模板,然后单击Add按钮。

最后,我们可以使用“模板管理”对话框来管理模板。要访问此对话框,请从“全局”菜单中选择“模板”。从这里,我们可以看到存在哪些模板,并对模板进行过滤以找到感兴趣的模板。表格的右侧是一个图标,用于将模板导出或下载为XML文件。然后可以将其提供给其他人,以便他们可以使用您的模板。

要将模板导入您的NiFi实例,请上载范本 从“操作员”面板中选择“上传模板”图标( ),单击“搜索”图标并导航到计算机上的文件。然后点击Upload按钮。现在,该模板将显示在您的表格中,您可以将其拖动到画布上,就像创建其他模板一样。

使用模板时,需要记住一些重要注意事项:

  • 被标识为敏感属性的任何属性(例如在处理器中配置的密码)都不会添加到模板中。每次将模板添加到画布时,都必须填充这些敏感属性。
  • 如果模板中包含的组件引用了Controller Service,则Controller Service也将添加到模板中。这意味着每次将模板添加到图形时,它将创建Controller Service的副本。

监控NiFi

当数据流过NiFi中的数据流时,了解系统的性能状况很重要,以便评估您是否需要更多资源并评估当前资源的运行状况。NiFi提供了一些机制来监视系统。

状态栏

“组件”工具栏下的NiFi屏幕顶部附近是一个称为状态栏的栏。它包含有关NiFi当前运行状况的一些重要统计信息。活动线程的数量可以指示NiFi当前工作的辛苦程度,而“已排队”状态则指示当前在整个流中排队的FlowFile数量以及这些FlowFile的总大小。

如果NiFi实例位于群集中,则我们还将在此处看到一个指示器,该指示器告诉我们群集中有多少个节点以及当前已连接多少个节点。在这种情况下,活动线程的数量和队列大小指示当前连接的所有节点的总和。

组件统计

画布上的每个处理器,进程组和远程进程组均提供有关组件已处理多少数据的若干统计信息。这些统计信息提供有关在过去五分钟中处理了多少数据的信息。这是一个滚动窗口,使我们能够看到诸如处理器已消耗的FlowFiles数量以及处理器已发出的FlowFiles数量之类的信息。

处理器之间的连接还公开了当前排队的项目数。

查看这些指标的历史值,以及如果将它们聚在一起,还可以了解不同节点之间的比较方式,这可能也很有价值。为了查看此信息,我们可以右键单击一个组件并选择Stats菜单项。这将向我们显示一个图表,该图表跨越自NiFi启动以来的时间,或长达24小时(以较少者为准)。通过更改属性文件中的配置,可以延长或减少此处显示的时间。

该对话框的右上角是一个下拉菜单,允许用户选择他们正在查看的指标。底部的图形允许用户选择图形的较小部分进行放大。

公告栏

除了每个组件提供的统计信息之外,用户还想知道是否发生任何问题。尽管我们可以监视日志中是否有任何有趣的事情,但在屏幕上弹出通知会更加方便。如果处理器将任何内容记录为警告或错误,我们将在处理器的右上角看到“公告指示器”。该指示器看起来像一个便签,将在事件发生后显示五分钟。将鼠标悬停在公告上可提供有关发生的情况的信息,以便用户不必在日志消息中进行筛选即可找到它。如果在集群中,则公告还将指示集群中的哪个节点发出了公告。我们还可以在处理器的“配置”对话框的“设置”选项卡中更改将发生公告的日志级别。

如果框架发出公告,我们还将在屏幕的右上方看到一个公告指示器。在全局菜单中是公告板选项。单击此选项将带我们到公告栏,在这里我们可以看到NiFi实例中发生的所有公告,并可以根据组件,消息等进行过滤。

资料来源

NiFi会非常详细地收集所提取的每条数据。由于数据是通过系统处理的,并且经过转换,路由,拆分,汇总和分发到其他端点,因此这些信息都存储在NiFi的Provenance Repository中。为了搜索和查看此信息,我们可以从“全局菜单”中选择“数据来源”。这将为我们提供一个表格,其中列出了我们搜索的出处事件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6aHJsGWX-1570756540439)(http://nifi.apache.org/docs/nifi-docs/html/images/provenance-table.png)]

最初,此表中填充了最近发生的1,000个“来源事件”(尽管事件发生后可能需要花费几秒钟来处理信息)。在此对话框中,有一个Search按钮,允许用户通过文件名或UUID或其他几个字段搜索特定处理器,特定FlowFile发生的事件。该nifi.properties文件提供了配置这些属性中的哪些被索引或使其可搜索的功能。此外,属性文件还允许您选择将被索引的特定FlowFile属性。因此,您可以选择哪些属性对您的特定数据流很重要,并使这些属性可搜索。

活动详情

执行搜索后,将仅在表中填充符合搜索条件的事件。在这里,我们可以选择详细信息图标 表格左侧的“信息”图标( )以查看该事件的详细信息:

活动详情

从这里,我们可以确切地看到该事件何时发生,该事件受影响的FlowFile,哪个组件(处理器等)执行了该事件,该事件花费了多长时间以及该事件发生时数据进入NiFi的总时间。发生(总延迟)。

下一个选项卡列出了事件发生时FlowFile上存在的所有属性:

事件属性

从这里,我们可以看到事件发生时FlowFile上存在的所有属性,以及这些属性的先前值。这使我们能够知道哪些属性由于此事件而发生更改,以及它们如何更改。此外,在右上角是一个复选框,允许用户仅查看已更改的那些属性。如果FlowFile仅具有少数几个属性,这可能不是特别有用,但是当FlowFile具有数百个属性时,这将非常有用。

这非常重要,因为它使用户能够了解处理FlowFile的确切上下文。了解FlowFile处理方式的“原因”很有帮助,尤其是在使用表达式语言配置处理器时。

最后,我们有“内容”选项卡:

活动内容

此选项卡向我们提供有关FlowFile内容存储在内容存储库中的位置的信息。如果事件修改了FlowFile的内容,我们将看到“之前”(输入)和“之后”(输出)内容声明。如果数据格式是NiFi可以渲染的一种数据格式,那么我们可以选择下载内容或在NiFi本身中查看内容。

此外,在选项卡的“重播”部分中,有一个“重播”按钮,允许用户将FlowFile重新插入流中,并从事件发生的确切位置对其进行重新处理。这提供了一种非常强大的机制,因为我们能够实时修改流,重新处理FlowFile,然后查看结果。如果它们不符合预期,我们可以再次修改流,然后再次重新处理FlowFile。我们能够执行流程的迭代开发,直到流程完全按预期处理数据为止。

沿袭图

除了查看Provenance事件的详细信息外,我们还可以通过单击血统 表格视图中的沿袭图标()来查看所涉及的FlowFile的沿袭 。

这为我们提供了该数据遍历系统时发生了什么情况的图形表示:

沿袭图

在这里,我们可以右键单击所代表的任何事件,然后单击View Details菜单项以查看“ 事件详细信息”。此图形表示形式向我们准确显示了数据发生了哪些事件。有一些“特殊”事件类型需要注意。如果看到JOIN,FORK或CLONE事件,则可以右键单击并选择“查找父项”或“展开”。这使我们能够看到父FlowFiles和子FlowFiles的血统。

左下角的滑块使我们可以看到这些事件的发生时间。通过左右滑动,我们可以看到哪些事件在系统中引入了延迟,因此我们对在系统中的何处可能需要提供更多的资源有了很好的了解,例如处理器的并发任务数。例如,它可能揭示出大多数延迟是由JOIN事件引起的,在该事件中,我们正在等待更多FlowFiles合并在一起。无论哪种情况,都能轻松查看发生的位置是一项非常强大的功能,它将帮助用户了解企业的运作方式。

去哪里获取更多信息

NiFi社区已经建立了大量有关如何使用该软件的文档。除本《入门指南》外,还提供以下指南:

  • Apache NiFi概述 -概述Apache NiFi是什么,它做什么以及创建它的原因。
  • Apache NiFi用户指南 -相当广泛的指南,经常用作参考指南,因为它对构成应用程序的所有不同组件进行了冗长的讨论。本指南的编写者是NiFi操作员。它提供有关NiFi中可用的每个不同组件的信息,并说明如何使用该应用程序提供的不同功能。
  • 管理指南 -用于为生产环境设置和管理Apache NiFi的指南。本指南提供有关不同系统级设置的信息,例如设置NiFi群集以及保护对Web UI和数据的访问。
  • 表达语言指南 -比上面提供的更为详尽的指南,用于理解表达语言。本指南是NiFi表达语言的权威文档。它提供了对EL的介绍,并解释了每个函数,其参数和返回类型,并提供了示例。
  • 开发人员指南 -虽然不是有关NiFi开发所有事物的详尽指南,但该指南确实提供了各种可用API的全面概述以及应如何使用它们。此外,它还提供了开发NiFi组件和常见处理器惯用法的最佳实践,以帮助您理解许多现有NiFi组件背后的逻辑。
  • 贡献者指南 -解释如何将工作贡献给Apache NiFi社区,以便其他人可以使用它的指南。

Apache NiFi博客网站上还添加了一些博客文章:https ?/blogs.apache.org/nifi/

除了此处提供的博客和指南之外,您还可以浏览其他 NiFi邮件列表或将电子邮件发送至其中一个邮件列表,网址users@nifi.apache.orgdev@nifi.apache.org

NiFi社区的许多成员也可以在Twitter上找到,并积极监视提及@apachenifi的推文。

最后更新时间2019-04-03 15:37:18 -04:00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值