NiFi用户文档分析(3)
连接组件
将处理器和其他组件添加到画布并进行配置后,下一步是将它们彼此连接,以便NiFi知道在处理完每个FlowFile后如何处理。这是通过在每个组件之间创建连接来实现的。当用户将鼠标悬停在组件的中心上时,会出现一个新的连接图标( ):
用户将连接气泡从一个组件拖动到另一个组件,直到第二个组件突出显示。当用户释放鼠标时,会出现“创建连接”对话框。该对话框包含两个选项卡:“详细信息”和“设置”。它们将在下面详细讨论。请注意,可以绘制连接,以便它在同一处理器上循环。如果DFM希望处理器在失败关系时尝试重新处理FlowFiles,这将非常有用。要创建这种类型的循环连接,只需将连接气泡拖离,然后再返回到同一处理器,直到它突出显示。然后释放鼠标,出现相同的“创建连接”对话框。
细节标签
“创建连接”对话框的“详细信息”选项卡提供有关源和目标组件的信息,包括组件名称,组件类型和组件所在的进程组:此外,此选项卡还提供了选择此Connection中应包含哪些关系的功能。必须至少选择一个关系。如果只有一个关系可用,则会自动选择它。
【注】:如果使用相同的关系添加多个Connections,则路由到该关系的任何FlowFile将自动“克隆”,并且将向每个Connections发送一个副本。
设置
“设置”选项卡提供配置连接名称,FlowFile到期,背压阈值,负载平衡策略和优先级的功能:
连接名称是可选的。如果未指定,则为Connection显示的名称将是Connection的活动关系的名称。
FlowFile到期
FlowFile到期是一个概念,通过该概念可以自动从流中删除无法及时处理的数据。例如,当预计数据量超过可以发送到远程站点的卷时,这很有用。在这种情况下,到期可以与优先级排序器一起使用,以确保首先处理最高优先级数据,然后可以丢弃在特定时间段(例如,一小时)内无法处理的任何内容。到期时间基于数据进入NiFi实例的时间。换句话说,如果给定连接上的文件到期时间设置为“1小时”,并且已经在NiFi实例中一小时的文件到达该连接,则该文件将过期。默认值为0 sec表示数据永不过期。当设置了“0秒”以外的文件到期时,连接标签上会出现一个小时钟图标,因此在查看画布上的流时,DFM可以一目了然地看到它。
背压
NiFi为背压提供两种配置元素。这些阈值表示在不再计划运行作为Connection源的组件之前,应允许在队列中存在多少数据。这允许系统避免数据溢出。提供的第一个选项是“背压对象阈值”。这是在应用背压之前可以在队列中的FlowFiles的数量。第二个配置选项是“背压数据大小阈值”。这指定了在应用反压之前应排队的最大数据量(大小)。通过输入数字后跟数据大小(B对于字节,KB对于千字节,MB对于兆字节,GB对于千兆字节或TB对于太字节)来配置此值。
【注】:默认情况下,添加的每个新连接都将具有默认的背压对象阈值10,000 objects和背压数据大小阈值1 GB。可以通过修改nifi.properties文件中的相应属性来更改这些默认值。
启用背压时,连接标签上会出现小进度条,因此在查看画布上的流时,DFM可以一目了然地看到它。进度条根据队列百分比更改颜色:绿色(0-60%),黄色(61-85%)和红色(86-100%)。将鼠标悬停在条形图上会显示确切的百分比。
队列完全填满后,Connection将以红色突出显示。
负载均衡
负载平衡策略
为了在群集中的节点之间分配流中的数据,NiFi提供以下负载平衡策略:
-
不负载平衡:不要在群集中的节点之间平衡FlowFile。这是默认值。
-
按属性划分:根据用户指定的FlowFile属性的值确定将给定FlowFile发送到哪个节点。具有相同Attribute值的所有FlowFile将发送到集群中的同一节点。如果目标节点与群集断开连接或无法通信,则数据不会故障转移到另一个节点。数据将排队,等待节点再次可用。此外,如果节点加入或离开集群需要重新平衡数据,则应用一致性散列以避免必须重新分发所有数据。
-
循环:FlowFiles将以循环方式分发到集群中的节点。如果节点与群集断开连接或无法与节点通信,则排队等待该节点的数据将自动重新分发到另一个节点。
-
单个节点:所有FlowFiles将发送到群集中的单个节点。它们被发送到哪个节点是不可配置的。如果节点与群集断开连接或无法与节点通信,则排队等待该节点的数据将保持排队,直到该节点再次可用。
【注】:1.除UI设置外,还有与负载平衡相关的群集节点属性,还必须在nifi.properties中进行配置。
2.NiFi会在重新启动时持久保存群集中的节点。这可以防止在所有节点都已连接之前重新分配数据。如果群集已关闭且不打算重新启动节点,则用户有责任通过UI中的“群集”对话框从群集中删除该节点
负载平衡压缩
选择负载平衡策略后,用户可以配置在群集中的节点之间传输时是否应压缩数据。
可以使用以下压缩选项:
-
不压缩:FlowFiles不会被压缩。这是默认值。
-
仅压缩属性:将压缩FlowFile属性,但不会压缩FlowFile属性。
-
压缩属性和内容:将压缩FlowFile属性和内容。
负载平衡指示器
为连接实施负载平衡策略后,连接上将显示负载平衡指示符():
将鼠标悬停在该图标上将显示连接的负载平衡策略和压缩配置。此状态下的图标还表示连接中的所有数据都已在群集中分布。
当在群集中的节点之间主动传输数据时,负载平衡指示器将更改方向和颜色:
群集连接摘要
要查看在群集节点之间分配数据的位置,请从“全局菜单”中选择“摘要”。然后选择“连接”选项卡和源的“查看连接详细信息”图标:
这将打开“群集连接摘要”对话框,该对话框显示群集中每个节点上的数据:
优先级
选项卡的右侧提供了对队列中数据进行优先级排序的功能,以便首先处理更高优先级的数据。优先级可以从顶部(‘可用的优先级排序器’)拖动到底部(‘选择的优先级排序器’)。可以选择多个优先级排序器。位于“所选优先级”列表顶部的优先级排序是最高优先级。如果两个FlowFiles根据此优先级排序器具有相同的值,则第二个优先级排序器将确定首先处理哪个FlowFile,依此类推。如果不再需要优先级排序器,则可以将其从“选定的优先级排序器”列表拖动到“可用的优先级排序器”列表。
可以使用以下优先顺序:
-
FirstInFirstOutPrioritizer:给定两个FlowFiles,首先处理首先到达连接的FlowFiles。
-
NewestFlowFileFirstPrioritizer:给定两个FlowFiles,将首先处理数据流中最新的FlowFiles。
-
OldestFlowFileFirstPrioritizer:给定两个FlowFiles,将首先处理数据流中最旧的FlowFiles。‘这是在没有选择优先级的情况下使用的默认方案’。
-
PriorityAttributePrioritizer:给定两个FlowFiles,将提取名为“priority”的属性。将首先处理具有最低优先级值的那个。
请注意,应使用UpdateAttribute处理器在FlowFiles到达具有此优先级设置的连接之前将“priority”属性添加到FlowFiles。
如果只有一个具有该属性,它将首先出现。
“priority”属性的值可以是字母数字,其中“a”将出现在“z”之前,“1”出现在“9”之前
如果“priority”属性无法解析为long,则将使用unicode字符串排序。例如:“99”和“100”将被排序,因此带有“99”的流文件首先出现,但“A-99”和“A-100”将排序,因此带有“A-100”的流文件首先出现。
更改配置和上下文菜单选项
在两个组件之间建立连接之后,可以更改连接的配置,并且可以将连接移动到新目的地; 但是,必须先停止连接任一侧的处理器,然后才能进行配置或目标更改。要更改连接的配置或以其他方式与连接交互,请右键单击连接以打开连接上下文菜单。
可以使用以下选项:
配置:此选项允许用户更改连接的配置。
查看状态历史记录:此选项打开连接统计信息随时间的图形表示。
列表队列:此选项列出可能正在等待处理的FlowFiles队列。
转到源:如果画布上连接的源组件和目标组件之间有很长的距离,则此选项很有用。通过单击此选项,画布视图将跳转到连接源。
转到目标:与“转到源”选项类似,此选项将视图更改为画布上的目标组件,如果两个连接的组件之间存在较长距离,则此选项可能很有用。
带到前面:如果其他东西(例如另一个连接)与其重叠,则此选项将连接带到画布的前面。
空队列:此选项允许DFM清除可能正在等待处理的FlowFiles队列。当DFM不关心从队列中删除数据时,此选项在测试期间特别有用。选择此选项后,用户必须确认是否要删除队列中的数据。
删除:此选项允许DFM删除两个组件之间的连接。请注意,必须先停止连接两侧的组件,并且连接必须为空才能删除。
弯曲连接
要向现有连接添加弯曲点(或弯头),只需双击要弯曲点所在位置的连接即可。然后,您可以使用鼠标抓住弯曲点并拖动它,以便以所需的方式弯曲连接。您可以根据需要添加任意数量的弯曲点。您还可以使用鼠标将连接上的标签拖动并移动到任何现有折弯点。要删除折弯点,只需再次双击即可。
处理器验证
在尝试启动处理器之前,确保处理器的配置有效非常重要。状态指示器显示在处理器的左上角。如果处理器无效,指示器将显示黄色警告指示器,并带有感叹号,表示存在问题:
在这种情况下,使用鼠标悬停在指示器图标上将提供工具提示,显示处理器的所有验证错误。一旦解决了所有验证错误,状态指示器将变为Stop图标,表示处理器有效并准备启动但当前未运行:
站点到站点
当从一个NiFi实例向另一个实例发送数据时,可以使用许多不同的协议。但是,首选协议是NiFi站点到站点协议。站点到站点可以轻松安全高效地将数据传输到一个NiFi实例中的节点或从一个NiFi实例中的节点或数据生成应用程序传输到另一个NiFi实例或其他消费应用程序中的节点。
使用站点到站点提供以下好处:
易于配置
输入远程NiFi实例的URL后,将自动发现可用端口(端点)并在下拉列表中提供
安全
站点到站点可选地使用证书来加密数据并提供身份验证和授权。可以将每个端口配置为仅允许特定用户,并且只有那些用户才能看到该端口甚至存在。有关配置证书的信息,请参阅 “ 系统管理员指南”的“ 安全配置”部分 。
可扩展
随着远程群集中的节点发生更改,将自动检测这些更改,并在群集中的所有节点上扩展数据。
高效
站点到站点允许立即发送批量的FlowFiles,以避免建立连接和在对等点之间进行多次往返请求的开销。
可靠
校验和由发送方和接收方自动生成,并在数据传输后进行比较,以确保没有发生损坏。如果校验和不匹配,则只会取消交易并再次尝试。
自动加载平衡
当节点联机或退出远程群集,或节点的负载变得更重或更轻时,将自动调整定向到该节点的数据量。
FlowFiles维护属性
当通过此协议传输FlowFile时,所有FlowFile的属性都会随之自动传输。这在许多情况下是非常有利的,因为由一个NiFi实例确定的所有上下文和丰富随数据传播,使得数据易于路由并且允许用户容易地检查数据。
适应性强
随着新技术和新想法的出现,处理站点到站点通信的协议能够随之改变。当与远程NiFi实例建立连接时,执行握手以协商将使用哪种协议和协议版本。这允许添加新功能,同时仍保持与所有旧实例的向后兼容性。此外,如果在协议中发现漏洞或缺陷,它允许更新版本的NiFi禁止通过受损版本的协议进行通信。
配置站点到站点客户端NiFi实例
远程进程组:为了通过站点到站点与远程NiFi实例进行通信,只需将远程进程组拖到画布上,然后输入远程NiFi实例的URL。URL与用于转到该实例的用户界面的URL相同。此时,您可以使用与将处理器连接到处理器或本地进程组的连接相同的方式将连接拖到远程进程组或从远程进程组拖出连接。拖动连接时,您将有机会选择要连接的端口。请注意,远程进程组最多可能需要一分钟才能确定哪些端口可用。
如果从远程进程组开始拖动连接,则显示的端口将是远程组的输出端口,因为这表示您将从远程实例中提取数据。如果连接在远程进程组上结束,则显示的端口将是远程组的输入端口,因为这意味着您将数据推送到远程实例。
传输协议:在远程进程组创建或配置对话框中,您可以选择用于站点到站点通信的传输协议,如下图所示:
默认情况下,它设置为RAW,它使用专用端口使用原始套接字通信。如果远程NiFi实例位于仅允许通过HTTP(S)协议进行访问或仅可从特定HTTP代理服务器访问的受限网络中,则HTTP传输协议特别有用。对于通过HTTP代理服务器进行访问,支持BASIC和DIGEST身份验证。
本地网络接口:在某些情况下,可能需要优先选择一个网络接口而不是另一个网络接口。例如,如果存在有线接口和无线接口,则有线接口可能是优选的。可以通过指定要在此框中使用的网络接口的名称来配置。如果输入的值无效,则远程进程组将无效,并且在解决此问题之前不会与其他NiFi实例通信。
配置站点到站点服务器NiFi实例
检索站点到站点详细信息:如果您的NiFi正在安全运行,为了让另一个NiFi实例从您的实例中检索信息,需要将其添加到Global Access“检索站点到站点详细信息”策略。这将允许另一个实例查询您的实例以获取详细信息,例如名称,描述,可用对等体(群集时的节点),统计信息,OS端口信息以及可用的输入和输出端口。在安全实例中使用输入和输出端口需要额外的策略配置,如下所述。
输入端口:为了允许另一个NiFi实例将数据推送到本地实例,您只需将输入端口拖到画布的根进程组即可。输入端口名称后,它将添加到您的流程中。您现在可以右键单击“输入端口”并选择“配置”,以便调整用于端口的名称和并发任务数。
如果将站点到站点配置为安全运行,则需要管理端口的“通过站点到站点接收数据”组件访问策略。只有已添加到策略的用户才能与端口通信。
输出端口:与输入端口类似,DataFlow Manager可以选择将输出端口添加到根进程组。输出端口允许授权的NiFi实例远程连接到您的实例并从输出端口提取数据。配置输出端口和管理端口的访问策略将再次允许DFM控制允许的并发任务数,以及授权哪些用户从正在配置的实例中提取数据。
除了NiFi的其他实例之外,一些其他应用程序可以使用站点到站点客户端来将数据推送到NiFi实例或从NiFi实例接收数据。例如,NiFi提供Apache Storm spout和Apache Spark Receiver,它们能够从NiFi的根组输出端口提取数据。
示例数据流
本节介绍了构建数据流所需的步骤。现在,把它们放在一起。以下示例数据流仅包含两个处理器:GenerateFlowFile和LogAttribute。这些处理器通常用于测试,但它们也可用于构建快速流程以用于演示目的,并查看NiFi的运行情况。
将GenerateFlowFile和LogAttribute处理器拖到画布并连接它们(使用上面提供的指南)后,按如下所示进行配置:
生成FlowFile:
在“调度”选项卡上,将“运行计划”设置为:5秒。请注意,GenerateFlowFile处理器可以非常快速地创建许多FlowFiles; 这就是为什么设置运行计划很重要,这样这个流程就不会让NiFi运行的系统不堪重负。
在“属性”选项卡上,将“文件大小”设置为:10 KB
日志属性:
在“设置”选项卡上的“自动终止关系”下,选中“成功”旁边的复选框。这将在此处理器成功处理后终止FlowFiles。
同样在“设置”选项卡上,将“公告”级别设置为“信息”。这样,当数据流运行时,此处理器将显示公告图标(请参阅处理器剖析),用户可以使用鼠标将鼠标悬停在其上以查看处理器正在记录的属性。
数据流应如下所示: