简介

ACAL Lynxus 是一个基于流式编程概念的数据流系统。它支持强大且可扩展的数据路由、转换和系统调解逻辑的有向图。Lynxus 提供了一个基于 Web 的用户界面,用于数据流的设计、控制、反馈和监控。它在多个服务质量维度上具有高度可配置性,例如容忍丢失与保证传递、低延迟与高吞吐量以及基于优先级的排队。Lynxus 为所有接收、分叉、合并、克隆、修改、发送以及最终在达到配置终止状态时被丢弃的数据提供细粒度的数据溯源。

请参阅 系统管理员指南 了解有关系统要求、安装和配置的信息。安装 Lynxus 后,使用受支持的 Web 浏览器查看 UI。

浏览器支持

浏览器 版本

Chrome

当前版本及前一版本

FireFox

当前版本及前一版本

Edge

当前版本及前一版本

Safari

当前版本及前一版本

"当前版本及前一版本"表示 UI 支持该浏览器的当前稳定版本及前一版本。例如,如果当前稳定版本为 45.X,则官方支持的版本为 45.X 和 44.X。

对于 Safari,由于其主版本发布频率较低,"当前版本及前一版本" simply 代表最新的两个版本。

支持的浏览器版本由 UI 所使用的功能和依赖决定。UI 功能将针对受支持的浏览器进行开发和测试。使用受支持浏览器时遇到的任何问题都应报告给 ACAL Lynxus。

不受支持的浏览器

虽然 UI 可能在不支持的浏览器中正常运行,但不会主动对其进行测试。此外,UI 设计为桌面体验,目前不支持移动浏览器。

在不同尺寸浏览器中查看 UI

在大多数环境中,UI 的所有内容都在浏览器中可见。但是,UI 采用响应式设计,在较小的浏览器或平板环境中,您可以根据需要滚动浏览屏幕。

在浏览器宽度小于 800 像素且高度小于 600 像素的环境中,部分 UI 可能无法使用。

术语

数据流管理器:数据流管理器 (DFM) 是一个 Lynxus 用户,具有添加、删除和修改 Lynxus 数据流组件的权限。

FlowFile:FlowFile 代表 Lynxus 中的单个数据片段。FlowFile 由两个组件组成: FlowFile 属性和 FlowFile 内容。 内容是 FlowFile 所代表的数据。属性是提供有关数据的信息或上下文的特征;它们由键值对组成。 所有 FlowFile 都具有以下标准属性:

  • uuid:通用唯一标识符,用于区分 FlowFile 与系统中的其他 FlowFile。

  • filename:人工可读的文件名,在将数据存储到磁盘或外部服务时可能使用

  • path:分层结构化的值,在将数据存储到磁盘或外部服务时可以使用,以便数据不会存储在单个目录中

处理器:处理器是 Lynxus 中用于监听传入数据、从外部来源拉取数据、向外部来源发布数据以及对 FlowFile 进行路由、转换或提取信息的组件。

关系:每个处理器都定义了零个或多个关系。这些关系通过命名来指示处理 FlowFile 的结果。 处理器完成处理 FlowFile 后,会将(或"传输")FlowFile 路由到其中一个关系。 然后,DFM 可以将每个关系连接到其他组件,以指定在每个可能的处理结果下 FlowFile 应前往的位置。

连接:DFM 通过将组件从 Lynxus 工具栏的组件部分拖到画布上,然后通过连接将组件连接在一起来创建自动化数据流。每个连接由一个或多个关系组成。 对于绘制的每个连接,DFM 可以确定连接应使用哪些关系。 这允许根据数据的处理结果以不同方式路由数据。每个连接都包含一个 FlowFile 队列。 当 FlowFile 被传输到特定关系时,它会被添加到关联连接的队列中。

控制器服务:控制器服务是扩展点,由 DFM 在用户界面中添加和配置后,将在 Lynxus 启动时启动,并为其他组件(如处理器或其他控制器服务)提供信息。多个组件使用的常见控制器服务是 StandardSSLContextService。它提供了一次配置密钥库和/或信任库属性并在整个应用程序中重用该配置的能力。其理念是,无需在每个可能需要此信息的处理器中配置,控制器服务会在任何处理器需要时提供这些信息。

报告任务:报告任务在后台运行,提供有关 Lynxus 实例中正在发生的情况的统计报告。DFM 可以根据需要在用户界面中添加和配置报告任务。常见的报告任务包括 ControllerStatusReportingTask、MonitorDiskUsage 报告任务和 MonitorMemory 报告任务。

流分析规则:流分析规则可以分析组件或数据流(的部分)。它们可能产生规则违规,有助于调整或维持最佳数据流设计。DFM 可以根据需要在用户界面中添加和配置流分析规则。

参数提供程序:参数提供程序可以从外部来源向参数上下文提供参数。参数提供程序的参数可以被获取并应用于所有引用参数上下文。

漏斗:漏斗是一个 Lynxus 组件,用于将多个连接中的数据合并到单个连接中。

进程组:当数据流变得复杂时,通常在更高层次、更抽象的层面上思考数据流是有益的。 Lynxus 允许将多个组件(如处理器)分组到一个进程组中。 然后,Lynxus 用户界面使 DFM 可以轻松地将多个进程组连接成逻辑数据流, 并允许 DFM 进入进程组以查看和操作进程组内的组件。

端口:使用一个或多个进程组构建的数据流需要一种将进程组连接到其他数据流组件的方式。 这是通过使用端口来实现的。DFM 可以向进程组添加任意数量的输入端口和输出端口,并适当命名这些端口。

远程进程组:正如数据被传入和传出进程组一样,有时需要将数据从一个 Lynxus 实例传输到另一个实例。 虽然 Lynxus 提供了许多不同的机制来将数据从一个系统传输到另一个系统,但如果要将数据传输到另一个 Lynxus 实例,远程进程组通常是最简单的方法。

公告:Lynxus 用户界面提供了大量有关应用程序当前状态的监控和反馈。 除了每个组件提供的滚动统计信息和当前状态外,组件还能够报告公告。 每当组件报告公告时,该组件上会显示公告图标。系统级公告显示在页面顶部的状态栏上。 使用鼠标悬停在该图标上将显示工具提示,其中显示公告的时间和严重性(调试、信息、警告、错误)以及公告消息。 所有组件的公告也可以在公告板页面中查看和过滤,该页面在全局菜单中可用。

flow.xml.gz:数据流管理器在 Lynxus 用户界面画布上放置的所有内容都会实时写入一个名为 flow.xml.gz 的文件。该文件默认位于 lynxus/conf 目录中。 画布上的任何更改都会自动保存到此文件中,无需用户点击"保存"按钮。 此外,Lynxus 会在更新时自动在归档目录中创建此文件的备份副本。 您可以使用这些归档文件回滚流程配置。为此,停止 Lynxus,将 flow.xml.gz 替换为所需的备份副本,然后重新启动 Lynxus。在集群环境中,停止整个 Lynxus 集群,替换其中一个节点的 flow.xml.gz,然后重新启动该节点。删除其他节点上的 flow.xml.gz。 确认该节点作为单节点集群启动成功后,再启动其他节点。替换后的流配置将在整个集群中同步。 flow.xml.gz 的名称和位置以及自动归档行为均可配置。详见系统管理员指南。

Lynxus 用户界面

Lynxus 用户界面提供了创建自动化数据流的机制,同时也支持对这些数据流进行可视化、编辑、监控和管理。该界面可以划分为几个部分,每个部分负责应用程序的不同功能。本节提供应用程序的截图,并突出显示界面的各个组成部分。每个部分将在文档后续内容中进行详细讨论。

启动应用程序后,用户可以通过 Web 浏览器访问默认地址 https://localhost:8443/lynxus 来进入用户界面。默认配置会生成一个具有完整系统管理权限的用户名和密码。有关系统安全配置的信息,请参阅系统管理员指南。

当数据流管理器首次进入用户界面时,将看到一个空白画布,可以在其上构建数据流:

Lynxus 组件工具栏

组件工具栏位于屏幕左上方。它由可以拖放到画布上的组件组成,用于构建数据流。每个组件在构建数据流中有详细描述。

状态栏位于组件工具栏下方。状态栏提供以下信息:当前流中活跃的线程数、流中当前的数据量、画布上各状态下远程进程组的数量(传输中、未传输)、画布上各状态下处理器的数量(已停止、运行中、无效、已禁用)、各状态下版本化进程组的数量(最新、本地已修改、过时、本地已修改且过时、同步失败)以及这些信息的最后刷新时间戳。此外,如果 Lynxus 实例是集群模式,状态栏还会显示集群中的节点数量以及当前已连接的节点数量。

操作面板位于屏幕左侧。它由数据流管理器用于管理流的按钮组成,管理员也可以使用它来管理用户访问权限并配置系统属性,例如应为应用程序分配多少系统资源。

画布右侧是搜索和全局菜单。有关搜索的更多信息,请参阅在数据流中搜索组件。全局菜单包含允许您操作画布上现有组件的选项:

Lynxus 全局菜单

此外,该界面还提供了一些功能,让您可以在画布上轻松导航。您可以使用导航面板在画布上平移和缩放。数据流的"鸟瞰图"提供了数据流的高层视图,允许您在数据流的大范围区域上平移。您还可以在屏幕底部找到面包屑导航。当您进入和退出进程组时,面包屑会显示流中的深度以及您为到达此深度所进入的每个进程组。面包屑中列出的每个进程组都是一个链接,可以将您带回流中的该层级。

Lynxus 导航

使用多租户授权访问 UI

多租户授权使多组用户(租户)能够以不同的授权级别来命令、控制和观察数据流的不同部分。当已认证用户尝试查看或修改 Lynxus 资源时,系统会检查该用户是否有执行该操作的权限。这些权限由您可以应用于整个系统或单个组件的策略定义。从数据流管理器的角度来看,这意味着一旦您获得了 Lynxus 画布的访问权限,一系列功能的可见性和可用性取决于分配给您的权限。

可用的全局访问策略如下:[options="header"]

策略

权限

查看 UI

允许用户查看 UI

访问控制器

允许用户查看和修改控制器,包括管理控制器服务、报告任务、流分析规则、注册客户端、参数提供程序和集群中的节点

查询溯源

允许用户提交溯源搜索并请求事件血缘

访问受限组件

允许用户创建/修改受限组件(假设其他权限足够)。受限组件可能会指示需要哪些具体权限。可以为特定限制授予权限,也可以不考虑限制而授予权限。如果不考虑限制授予权限,用户可以创建/修改所有受限组件。

访问所有策略

允许用户查看所有组件的策略并进行修改

访问用户/组

允许用户查看和修改用户及用户组

检索站点到站点详情

允许其他 Lynxus 实例检索站点到站点详情

查看系统诊断

允许用户查看系统诊断

代理用户请求

允许代理机器代表他人发送请求

访问计数器

允许用户查看和修改计数器

可用的组件级访问策略如下:

策略 权限

查看组件

允许用户查看组件配置详情

修改组件

允许用户修改组件配置详情

查看溯源

允许用户查看此组件生成的溯源事件

查看数据

允许用户在出站连接的 FlowFile 队列中以及通过溯源事件查看此组件的元数据和内容

修改数据

允许用户清空出站连接中的 FlowFile 队列并通过溯源事件提交重放

查看策略

允许用户查看可以查看和修改组件的用户列表

修改策略

允许用户修改可以查看和修改组件的用户列表

通过站点到站点接收数据

允许端口从 Lynxus 实例接收数据

通过站点到站点发送数据

允许端口从 Lynxus 实例发送数据

如果您无法查看或修改 Lynxus 资源,请联系系统管理员或参阅系统管理员指南中的"配置用户和访问策略"部分获取更多信息。

登录

如果 Lynxus 配置为安全运行,用户将能够请求访问数据流。有关配置 Lynxus 安全运行的信息,请参阅系统管理员指南。如果 Lynxus 支持匿名访问,用户将根据情况获得访问权限,并被提供登录选项。

点击"登录"链接将打开登录页面。如果用户使用用户名/密码登录,将显示一个登录表单。如果 Lynxus 未配置为支持匿名访问且用户使用用户名/密码登录,他们将直接被跳转到登录表单,跳过画布。

登录

构建数据流

数据流管理器可以使用 Lynxus 用户界面构建自动化数据流。只需将组件从工具栏拖放到画布上,根据特定需求配置组件,然后将组件连接在一起。

将组件添加到画布

用户界面部分概述了界面的各个组成部分并指出了组件工具栏。本节查看工具栏中的每个组件:

组件

处理器:处理器是最常用的组件,负责数据的接入、输出、路由和操作。有许多不同类型的处理器。事实上,这是 Lynxus 中非常常见的扩展点,意味着许多供应商可以实现自己的处理器来执行其用例所需的任何功能。当将处理器拖放到画布上时,用户会看到一个对话框来选择要使用的处理器类型:

添加处理器对话框

在右上角,用户可以根据处理器类型或与处理器关联的标签来筛选列表。处理器开发者可以为他们的处理器添加标签。这些标签在此对话框中用于筛选,并显示在左侧的标签云中。拥有特定标签的处理器越多,该标签在标签云中显示得越大。点击标签云中的标签将筛选可用的处理器,仅显示包含该标签的处理器。如果选择了多个标签,则仅显示包含所有标签的处理器。例如,如果我们只想显示允许我们接入文件的处理器,可以同时选择 files 标签和 ingest 标签:

使用标签云添加处理器

受限组件将在其名称旁边标记有受限图标。这些组件可用于执行通过 Lynxus REST API/UI 提供的任意未经审查的代码,或可用于使用 Lynxus 操作系统凭据在 Lynxus 主机系统上获取或修改数据。这些组件可能被已授权的 Lynxus 用户用于超越应用程序的预期用途、提升权限,或可能暴露有关 Lynxus 进程内部或主机系统的数据。所有这些功能都应被视为特权功能,管理员应了解这些功能并为受信任的用户子集显式启用它们。在允许用户创建和修改受限组件之前,必须授予其访问权限。将鼠标悬停在 受限 图标上将显示受限组件所需的特定权限。可以不考虑限制而分配权限。在这种情况下,用户将有权访问所有受限组件。或者,可以为用户分配对特定限制的访问权限。如果用户已被授予访问组件所需的所有限制,则他们将有权访问该组件(假设其他权限足够)。有关更多信息,请参阅使用多租户授权访问 UI和版本化流程中的受限组件。

点击"添加"按钮或双击处理器类型将把选定的处理器添加到画布上的拖放位置。

对于添加到画布上的任何组件,都可以用鼠标选择它并在画布上任意移动。此外,可以通过按住 Shift 键并选择每个项目,或者按住 Shift 键并拖动选择框来一次选择多个项目。

将处理器拖放到画布上后,可以通过右键点击处理器并从上下文菜单中选择选项来与之交互。上下文菜单中可用的选项因您的权限而异。

处理器菜单

虽然上下文菜单中可用的选项各有不同,但在拥有完整处理器操作权限时,通常可以使用以下选项:

  • 配置:此选项允许用户建立或更改处理器的配置(参见配置处理器)。

对于处理器、端口、远程进程组、连接和标签,可以通过双击所需组件来打开配置对话框。
  • 启动*或*停止:此选项允许用户启动或停止处理器;该选项将是启动或停止,取决于处理器的当前状态。

  • 运行一次:此选项允许用户精确运行所选处理器一次。如果处理器无法执行(例如,没有传入的 FlowFile 或出站连接已应用反压),处理器将不会被触发。*执行*设置生效(即*主节点*和*所有节点*设置将分别导致仅在主节点上运行一次或在每个节点上运行一次)。仅适用于*定时器驱动*和*CRON 驱动*调度策略。

  • 启用*或*禁用:此选项允许用户启用或禁用处理器;该选项将是启用或禁用,取决于处理器的当前状态。

  • 查看数据溯源:此选项显示 Lynxus 数据溯源表,包含通过该处理器路由的 FlowFile 的数据溯源事件信息(参见数据溯源)。

  • 重放最后一个事件:此选项将重放最后一个溯源事件,有效地将处理器处理的最后一个 FlowFile 重新排队(参见重放 FlowFile)。

  • 查看状态历史:此选项打开处理器统计信息随时间变化的图形表示。

  • 查看积压:对于支持报告外部系统积压的处理器(如队列或主题),此选项显示当前积压信息。由于计算积压可能需要查询外部系统,此操作需要*修改组件*访问权限,而不仅仅是*查看组件*访问权限。

  • 查看用法:此选项将用户引导到处理器的用法文档。

  • 查看连接→上游:此选项允许用户查看并"跳转到"进入处理器的上游连接。当处理器连接进出其他进程组时,此功能特别有用。

  • 查看连接→下游:此选项允许用户查看并"跳转到"从处理器出去的下游连接。当处理器连接进出其他进程组时,此功能特别有用。

  • 居中显示:此选项将画布视图以给定处理器为中心。

  • 更改颜色:此选项允许用户更改处理器的颜色,从而使大型流的可视化管理更容易。

  • 复制:此选项将所选处理器的副本放到剪贴板上,以便可以通过右键点击画布并选择粘贴将其粘贴到画布的其他位置。复制/粘贴操作也可以使用 Ctrl-C (Command-C) 和 Ctrl-V (Command-V) 快捷键完成。

  • 删除:此选项允许数据流管理器从画布上删除处理器。

输入端口 输入端口:输入端口提供将数据传输到进程组的机制。当将输入端口拖放到画布上时,数据流管理器会被提示命名端口。进程组内的所有端口必须具有唯一名称。

所有组件仅存在于进程组内。当用户首次进入 Lynxus 页面时,用户被放置在根进程组中。如果将输入端口拖放到根进程组上,输入端口提供了一种通过站点到站点从远程 Lynxus 实例接收数据的机制。在这种情况下,如果 Lynxus 配置为安全运行,可以配置输入端口以限制对适当用户的访问。有关配置 Lynxus 安全运行的信息,请参阅系统管理员指南。

输出端口 输出端口:输出端口提供将数据从进程组传输到进程组外部目标的机制。当将输出端口拖放到画布上时,数据流管理器会被提示命名端口。进程组内的所有端口必须具有唯一名称。

如果将输出端口拖放到根进程组上,输出端口提供了一种通过站点到站点向远程 Lynxus 实例发送数据的机制。在这种情况下,端口充当队列。当远程 Lynxus 实例从端口拉取数据时,该数据将从传入连接的队列中移除。如果 Lynxus 配置为安全运行,可以配置输出端口以限制对适当用户的访问。有关配置 Lynxus 安全运行的信息,请参阅系统管理员指南。

进程组 进程组:进程组可用于逻辑上对一组组件进行分组,使数据流更易于理解和维护。此外,进程组作为一种机制,将组件分组在一起,使它们作为一个更内聚的单元协同工作。例如,通过配置执行引擎或 FlowFile 出站策略。

当将进程组拖放到画布上时,数据流管理器会被提示命名进程组。然后该进程组将嵌套在父组内。

将进程组拖放到画布上后,可以通过右键点击进程组并从上下文菜单中选择选项来与之交互。上下文菜单中可用的选项因您的权限而异。

进程组菜单

虽然上下文菜单中可用的选项各有不同,但在拥有完整进程组操作权限时,通常可以使用以下选项:

  • 配置:此选项允许用户建立或更改进程组的配置。

  • 进入组:此选项允许用户进入进程组。

也可以通过双击进程组来进入。
  • 启动:此选项允许用户启动进程组。

  • 停止:此选项允许用户停止进程组。

  • 启用:此选项允许用户启用进程组中的所有处理器。

  • 禁用:此选项允许用户禁用进程组中的所有处理器。

  • 查看状态历史:此选项打开进程组统计信息随时间变化的图形表示。

  • 查看连接→上游:此选项允许用户查看并"跳转到"进入进程组的上游连接。

  • 查看连接→下游:此选项允许用户查看并"跳转到"从进程组出去的下游连接。

  • 居中显示:此选项将画布视图以给定进程组为中心。

  • 分组:此选项允许用户创建一个新的进程组,包含所选进程组以及画布上选择的其他组件。

  • 下载流定义:此选项允许用户将进程组的流定义下载为 JSON 文件。该文件可用作备份,或使用Lynxus CLI导入到 Lynxus Registry 中。下载流定义时有两个选项:

    • → 不包含外部服务:所选进程组引用但在其范围之外的控制器服务(例如,父组中的服务)不会 作为服务包含在流定义中。

    • → 包含外部服务:所选进程组引用但在其范围之外的控制器服务(例如,父组中的服务)将 包含在流定义中。

  • 复制:此选项将所选进程组的副本放到剪贴板上,以便可以通过右键点击画布并选择粘贴将其粘贴到画布的其他位置。复制/粘贴操作也可以使用 Ctrl-C (Command-C) 和 Ctrl-V (Command-V) 快捷键完成。

  • 清空所有队列:此选项允许用户清空所选进程组中的所有队列。请求时所有连接中等待的所有 FlowFile 将被移除。

  • 删除:此选项允许数据流管理器删除进程组。

(注意:如果对版本化进程组选择"下载流定义",下载中没有版本控制信息。换句话说,无论进程组是否版本化,JSON 文件的内容是相同的。)

远程流程组 远程进程组:远程进程组的外观和行为与进程组类似。但是,远程进程组(RPG)引用的是远程 Lynxus 实例。当将 RPG 拖放到画布上时,不会被提示输入名称,而是被提示输入远程 Lynxus 实例的 URL。如果远程 Lynxus 是集群实例,建议添加两个或更多集群节点 URL,以便即使其中一个节点不可用也能建立初始连接。多个 URL 可以用逗号分隔的格式指定。

当通过 RPG 将数据传输到 Lynxus 集群实例时,RPG 将首先连接到配置了 URL 的远程实例,以确定集群中有哪些节点以及每个节点的繁忙程度。然后使用此信息对推送到每个节点的数据进行负载均衡。远程实例会定期被查询,以确定有关从集群中删除或添加到集群中的任何节点的信息,并根据每个节点的负载重新计算负载均衡。有关更多信息,请参阅站点到站点部分。

将远程进程组拖放到画布上后,可以通过右键点击远程进程组并从上下文菜单中选择选项来与之交互。菜单中可用的选项因您的权限而异。

远程流程组菜单

在拥有远程进程组完整操作权限时,通常可以使用以下选项:

  • 配置:此选项允许用户建立或更改远程进程组的配置。

  • 启用传输:激活 Lynxus 实例之间的数据传输(参见远程进程组传输)。

  • 禁用传输:禁用 Lynxus 实例之间的数据传输。

  • 查看状态历史:此选项打开远程进程组统计信息随时间变化的图形表示。

  • 查看连接→上游:此选项允许用户查看并"跳转到"进入远程进程组的上游连接。

  • 查看连接→下游:此选项允许用户查看并"跳转到"从远程进程组出去的下游连接。

  • 刷新远程:此选项刷新远程 Lynxus 实例状态的视图。

  • 管理远程端口:此选项允许用户查看远程进程组所连接的远程 Lynxus 实例上存在的输入端口和/或输出端口。注意,如果站点到站点配置是安全的,则仅显示连接 Lynxus 已被授权访问的端口。

  • 居中显示:此选项将画布视图以给定远程进程组为中心。

  • 前往:此选项在浏览器的新标签页中打开远程 Lynxus 实例的视图。注意,如果站点到站点配置是安全的,用户必须具有远程 Lynxus 实例的访问权限才能查看。

  • 分组:此选项允许用户创建一个新的进程组,包含所选远程进程组以及画布上选择的其他组件。

  • 复制:此选项将所选进程组的副本放到剪贴板上,以便可以通过右键点击画布并选择粘贴将其粘贴到画布的其他位置。复制/粘贴操作也可以使用 Ctrl-C (Command-C) 和 Ctrl-V (Command-V) 快捷键完成。

  • 删除:此选项允许数据流管理器从画布上删除远程进程组。

漏斗 漏斗:漏斗用于将多个连接的数据合并到单个连接中。这有两个优点。首先,如果创建了多个具有相同目标的连接,当这些连接必须跨越很大空间时,画布可能会变得混乱。通过将这些连接汇入单个连接,该单个连接可以跨越那个大空间。其次,连接可以配置 FlowFile 优先级排序器。可以将多个连接的数据汇入单个连接,从而提供对该单个连接上所有数据进行优先级排序的能力,而不是独立地对每个连接上的数据进行优先级排序。

标签 标签:标签用于为数据流的部分提供文档说明。当将标签拖放到画布上时,会以默认大小创建。然后可以通过拖动右下角的控制柄来调整标签的大小。标签在初始创建时没有文本。可以通过右键点击标签并选择"配置"来添加标签文本。

组件版本

您可以访问有关处理器、控制器服务、报告任务和流分析规则版本的信息。这在具有多个 Lynxus 实例运行不同版本组件的集群环境中工作,或者升级到更新版本的处理器时特别有用。添加处理器、添加控制器服务、添加报告任务和添加流分析规则对话框包括一个标识组件版本的列,以及组件名称、创建组件的组织或组以及包含组件的 NAR 包。

添加处理器版本示例

画布上显示的每个组件也包含此信息。

处理器版本信息示例

排序和筛选组件

添加组件时,可以按版本号排序或按来源筛选。

按版本排序时,点击版本列以按升序或降序显示。

按来源组筛选时,点击添加组件对话框左上角的来源下拉菜单,选择要查看的组。

添加处理器版本排序和筛选

更改组件版本

要更改组件版本,请执行以下步骤。

  1. 右键点击画布上的组件以显示配置选项。2. 选择更改版本。+ image::processor-change-version.png["处理器更改版本"]3. 在组件版本对话框中,从版本下拉菜单中选择要运行的版本。+ image::component-version-dialog.png["组件版本"]

理解版本依赖关系

配置组件时,还可以查看版本依赖关系的信息。

  1. 右键点击组件并选择配置以显示组件的配置对话框。

  2. 点击属性选项卡。

  3. 点击信息图标查看版本依赖关系信息。

配置版本要求

在以下示例中,MyProcessor 1.0 版本与控制器服务 StandardMyService 1.0 版本正确配置:

处理器与控制器服务版本匹配

如果将 MyProcessor 的版本更改为不兼容的版本(MyProcessor 2.0),处理器上将显示验证错误:

处理器与控制器服务版本不匹配警告

并且由于服务不再有效,处理器的控制器服务配置中将显示错误消息:

处理器与控制器服务版本不匹配属性

配置处理器

要配置处理器,右键点击处理器并从上下文菜单中选择"配置"选项。或者,直接双击处理器。配置对话框将打开,包含四个不同的选项卡,下面将分别介绍。完成配置后,点击"应用"保存更改,或点击"取消"放弃所有更改。

注意,处理器启动后,处理器的上下文菜单不再显示"配置"选项,而是显示"查看配置"选项。处理器运行时无法更改其配置。必须首先停止处理器并等待其所有活动任务完成,然后才能再次配置。

注意,不支持输入某些控制字符,输入时会自动过滤。以下字符及任何未配对的 Unicode 代理代码点不会保留在任何配置中:

[#x0], [#x1], [#x2], [#x3], [#x4], [#x5], [#x6], [#x7], [#x8], [#xB], [#xC], [#xE], [#xF], [#x10], [#x11], [#x12], [#x13], [#x14], [#x15], [#x16], [#x17], [#x18], [#x19], [#x1A], [#x1B], [#x1C], [#x1D], [#x1E], [#x1F], [#xFFFE], [#xFFFF]

设置选项卡

处理器配置对话框中的第一个选项卡是“设置”选项卡:

设置选项卡

此选项卡包含多个不同的配置项。首先,它允许数据流管理员更改处理器的名称。处理器的名称默认与处理器类型相同。处理器名称旁边有一个复选框,指示处理器是否已启用。将处理器添加到画布时,它处于启用状态。如果处理器被禁用,则无法启动。禁用状态用于指示当一组处理器启动时,例如当数据流管理员启动整个流程组时,应排除此(已禁用的)处理器。

在名称配置下方,显示处理器的唯一标识符以及处理器的类型和 NAR 包。这些值无法修改。

接下来是两个用于配置“惩罚时长”和“让出时长”的对话框。在正常处理数据(FlowFile)的过程中,可能会发生某个事件表明此时无法处理该数据,但该数据可能在稍后可以处理。当这种情况发生时,处理器可以选择惩罚 FlowFile。这将阻止 FlowFile 在一段时间内被处理。例如,如果处理器要将数据推送到远程服务,但远程服务已经存在与处理器指定的文件名同名的文件,处理器可以惩罚 FlowFile。“惩罚时长”允许数据流管理员指定FlowFile 应被惩罚多长时间。默认值为 30 秒。

类似地,处理器可能会确定存在某种情况,使得处理器无法继续取得任何进展,无论它正在处理什么数据。例如,如果处理器要将数据推送到远程服务,而该服务没有响应,处理器就无法取得任何进展。因此,处理器应该“让出”,这将阻止处理器在一段时间内被调度运行。该时间段通过设置“让出时长”来指定。默认值为 1 秒。

设置选项卡左侧最后一个可配置选项是公告级别。每当处理器写入日志时,处理器还会生成一个公告。此设置指示应在用户界面中显示的最低公告级别。默认情况下,公告级别设置为 WARN,这意味着它将显示所有警告和错误级别的公告。

调度选项卡

处理器配置对话框中的第二个选项卡是“调度”选项卡:

调度选项卡
调度策略

第一个配置选项是调度策略。调度组件有三种可能的选项:

定时器驱动:这是默认模式。处理器将按固定时间间隔调度运行。处理器 运行的间隔由“运行计划”选项定义(见下文)。

CRON 驱动:使用 CRON 驱动调度模式时,处理器按计划周期运行,类似于 定时器驱动调度模式。但是,CRON 驱动模式以 增加配置复杂性为代价提供了显著更多的灵活性。CRON 驱动调度值是一个由六个必填字段和一个 可选字段组成的字符串,各字段之间以空格分隔。这些字段是:

字段 有效值

秒

0-59

分钟

0-59

小时

0-23

月中第几天

1-31

月份

1-12 or JAN-DEC

星期几

0-7 或 SUN-SAT(0 或 7 表示星期日)

通常通过以下方式之一指定值:

  • 数字:指定一个或多个有效值。可以使用逗号分隔的列表输入多个值。

  • 范围:使用 <数字>-<数字> 语法指定范围。

  • 增量:使用 <起始值>/<增量> 语法指定增量。例如,在分钟字段中,0/15 表示第 0、15、30 和 45 分钟。

还应了解以下几个有效的特殊字符:

  • *  — 表示该字段的所有值都有效。

  • ?  — 表示未指定特定值。此特殊字符在月中第几天和星期几字段中有效。

  • L  — 可以在星期几的值后追加 L,以指定该月的最后一次出现。例如,1L 表示该月的最后一个星期日。

例如:

  • 字符串 0 0 13 * * * 表示要将处理器调度为每天下午 1:00 运行。

  • 字符串 0 20 14 ? * MON-FRI 表示要将处理器调度为每周一至周五下午 2:20 运行。

并发任务

接下来,调度选项卡提供了一个名为“并发任务”的配置选项。这控制处理器将使用多少个线程。换句话说,这控制此处理器同时应处理多少个 FlowFile。增加此值通常允许处理器在相同时间内处理更多数据。但是,这是通过使用系统资源来实现的,这些资源随后不能被其他处理器使用。这实质上提供了处理器的相对权重 — 它控制应将多少系统资源分配给此处理器而不是其他处理器。此字段适用于大多数处理器。但是,有些类型的处理器只能调度单个并发任务。

运行计划

“运行计划”决定处理器应多久调度运行一次。此字段的有效值取决于所选的调度策略(见上文)。使用定时器驱动调度策略时,此值是一个时间长度,由数字后跟时间单位指定。例如,1 second 或 5 mins。默认值 0 sec 表示处理器应尽可能频繁地运行,只要有数据需要处理。对于任何为 0 的时间长度都是如此,无论时间单位是什么(例如,0 sec、0 mins、0 days)。有关适用于 CRON 驱动调度策略的值的说明,请参阅CRON 驱动调度策略本身的描述。

执行

执行设置用于确定处理器将在哪些节点上调度执行。选择“所有节点”将导致此处理器在集群中的每个节点上调度。选择“主节点”将导致此处理器仅在主节点上调度。已配置为“主节点”执行的处理器通过处理器图标旁边的“P”标识:

主节点处理器

要快速识别“主节点”处理器,“P”图标也显示在摘要页面的处理器选项卡中:

摘要页面中的主节点处理器
运行时长

调度选项卡的右侧包含一个用于选择“运行时长”的滑块。这控制处理器每次被触发时应运行多长时间。滑块的左侧标记为“较低延迟”,而右侧标记为“较高吞吐量”。当处理器完成运行时,它必须更新存储库以便将 FlowFile 传输到下一个连接。更新存储库的开销很大,因此在更新存储库之前可以一次完成的工作越多,处理器可以处理的工作就越多(较高吞吐量)。但是,这意味着下一个处理器在前一个处理器更新此存储库之前无法开始处理这些 FlowFile。因此,延迟会更长(从头到尾处理FlowFile 所需的时间会更长)。因此,该滑块提供了一个范围,数据流管理员可以选择偏向较低延迟或较高吞吐量。

属性选项卡

属性选项卡提供了一种配置处理器特定行为的机制。没有默认属性。每种类型的处理器必须定义哪些属性适用于其用例。下面,我们看到 RouteOnAttribute 处理器的属性选项卡:

属性选项卡

此处理器默认只有一个属性:“路由策略”。默认值为“路由到属性名”。此属性名称旁边有一个小问号符号(信息)。此帮助符号在用户界面的其他位置也可以看到,它表示有更多信息可用。将鼠标悬停在此符号上将提供有关该属性和默认值的更多详细信息,以及已为该属性设置的历史值。

单击属性的值将允许数据流管理员更改该值。根据属性允许的值,用户将获得一个下拉列表以从中选择值,或者获得一个文本区域以输入值:

使用下拉菜单编辑属性

选项卡的右上角有一个用于添加新属性的按钮。单击此按钮将向数据流管理员提供一个对话框,用于输入新属性的名称和值。并非所有处理器都允许用户自定义属性。在不允许用户自定义属性的处理器中,应用用户自定义属性时处理器将变为无效。

选定的处理器支持用户自定义属性的可配置敏感值状态。处理器必须指示支持可配置敏感值状态,否则“添加属性”对话框中的敏感值选择将被禁用。

添加具有敏感值状态的属性

为敏感值设置选择 Yes 将指示 Lynxus 将属性值作为敏感值处理,用于配置持久化和框架操作。Lynxus 在存储流程配置时加密敏感值,并且不在导出的流程定义中包含敏感值。

RouteOnAttribute 允许用户自定义属性,在用户添加属性之前将处于无效状态。

使用文本区域编辑属性

请注意,添加用户自定义属性后,该行右侧将出现一个图标(删除图标)。单击它将删除处理器中的用户自定义属性。

某些处理器还内置了高级用户界面(UI)。例如,UpdateAttribute 处理器具有高级 UI。要访问高级 UI,请单击“配置处理器”窗口底部显示的“高级”按钮。只有具有高级 UI 的处理器才会有此按钮。

某些处理器具有引用其他组件的属性,例如控制器服务,这些组件也需要配置。例如,GetHTTP 处理器具有一个 SSLContextService 属性,该属性引用 StandardSSLContextService 控制器服务。当数据流管理员想要配置此属性但尚未创建和配置控制器服务时,他们可以选择立即创建该服务,如下图所示。有关配置控制器服务的更多信息,请参阅 控制器服务 部分。

创建服务

关系选项卡

关系选项卡包含一个“自动终止/重试关系”部分。此处列出了处理器定义的每个关系及其描述。

关系选项卡
自动终止

要使处理器被视为有效且能够运行,处理器定义的每个关系必须连接到下游组件或自动终止。如果关系被自动终止,则路由到该关系的任何 FlowFile 将从流程中删除,其处理被视为完成。已连接到下游组件的任何关系都无法自动终止。必须先从使用该关系的任何连接中删除该关系。此外,对于选择自动终止的任何关系,如果该关系被添加到连接中,自动终止状态将被清除(关闭)。

自动重试

用户还可以配置是否应重试路由到给定关系的 FlowFile。如果 FlowFile 被路由到配置为重试的任何关系,FlowFile 将被重新排队,处理器将尝试再次处理它。如果处理器再次将 FlowFile 路由到可重试的关系(相同的关系或配置为重试的另一个关系),它将被重新排队,最多达到用户指定的次数。如果处理器在指定重试次数之后将 FlowFile 路由到可重试的关系,FlowFile 将被传输到包含该关系的连接 — 或根据配置自动终止。如果处理器将 FlowFile 路由到未配置为重试的任何关系,它将立即被路由到该关系。

例如,考虑一个具有两个关系的处理器:success 和 failure。用户将 failure 关系配置为重试 10 次,并配置为自动终止。在这种情况下,如果传入的 FlowFile 被路由到 failure 关系,它将最多重试 10 次。10 次尝试后,如果再次路由到 failure,它将被自动终止。但是,如果在任何时候它被路由到 success,它将立即被传输到包含 success 关系的连接,不再重试。

重试次数

对于设置为重试的关系,此数字表示 FlowFile 在被路由到其他位置之前将尝试重新处理的次数。

重试退避策略

当 FlowFile 要重试时,用户可以配置退避策略,有两个选项:

  • 惩罚 - 重试将按时进行,但处理器将继续处理其他 FlowFile。处理器将继续运行, 处理可用的 FlowFile。

  • 让出 - 处理器在一段时间内不会被调度再次运行(由“设置”选项卡中配置的“让出时长”决定)。当 需要维护队列中数据的顺序,在第一个 FlowFile 被处理之前不处理后续 FlowFile,或者当将数据路由到配置的 关系表明进一步处理其他数据不会成功时,应使用此选项。

重试最大退避时间

初始重试基于“设置”选项卡中指定的惩罚/让出时长。每次后续重试尝试的持续时间都会翻倍。此数字表示在另一次重试尝试发生之前的最大允许时间段。

如果同时选择了终止和重试,将先执行重试逻辑,然后执行自动终止。

注释选项卡

处理器配置对话框中的最后一个选项卡是“注释”选项卡。此选项卡仅为用户提供一个区域,用于输入适合此组件的任何注释。使用“注释”选项卡是可选的:

注释选项卡

更多帮助

您可以通过右键点击处理器并从上下文菜单中选择“用法”来访问有关每个处理器用法的其他文档。或者,从 UI 右上角的全局菜单中选择帮助,以显示包含所有文档的帮助页面,包括所有可用处理器的用法文档。单击所需的处理器以查看用法文档。

配置进程组

要配置流程组,请右键点击流程组并从上下文菜单中选择 配置 选项。配置对话框将打开两个选项卡:常规和控制器服务。

配置进程组

常规选项卡

此选项卡包含多个不同的配置项。首先是流程组名称。这是显示在画布上流程组顶部以及 UI 底部面包屑中的名称。对于根流程组(即最高级别的组),这也是显示为浏览器选项卡标题的名称。请注意,此信息对远程连接到此实例的任何其他 Lynxus 实例(使用远程流程组,即 站点到站点)可见。

下一个配置元素是流程组参数上下文,用于为流程组件提供参数。从此下拉列表中,用户可以选择应将哪个参数上下文绑定到此流程组,并可以选择创建一个新参数上下文绑定到流程组。有关更多信息,请参阅 参数 和 参数上下文。

下一部分提供用于确定流程组应如何调度运行的配置元素。Lynxus支持两种不同的执行引擎:传统执行引擎和无状态执行引擎。此外,执行引擎可以从父流程组继承,这是默认行为。有关更多信息,请参阅 执行引擎。

接下来两个元素——流程组 FlowFile 并发和流程组出站策略——将在以下部分中介绍。

FlowFile 并发

FlowFile 并发用于控制如何将数据引入流程组。有三个可用选项:

  • 无限制(默认)

  • 每个节点单个 FlowFile

  • 每个节点单个批次

当 FlowFile 并发设置为“无限制”时,流程组中的输入端口将尽快摄取数据,前提是反压不会阻止它们这样做。

当 FlowFile 并发配置为“每个节点单个 FlowFile”时,输入端口一次只允许一个 FlowFile 通过。一旦该 FlowFile 进入流程组,在所有 FlowFile 离开流程组之前(通过从系统中删除/自动终止,或通过输出端口退出),不会引入额外的 FlowFile。这通常会导致性能降低,因为它减少了Lynxus 用于处理数据的并行化。但是,用户可能有几个原因想要使用这种方法。一个常见的用例是每个传入的 FlowFile 包含对多个其他数据项的引用,例如目录中的文件列表。用户可能希望在允许任何其他数据进入流程组之前处理整个列表。

当 FlowFile 并发配置为“每个节点单个批次”时,输入端口的行为类似于“每个节点单个 FlowFile”模式下的行为,但当 FlowFile 被摄取时,输入端口将继续摄取所有数据,直到为输入端口提供数据的所有队列都已清空。此时,在所有数据处理完成并离开流程组之前,它们不会将更多数据引入流程组(请参阅 连接面向批处理的进程组)。

FlowFile 并发仅控制何时从输入端口将数据拉入流程组。它不会阻止流程组内的处理器从 Lynxus 外部摄取数据。
出站策略

FlowFile 并发决定如何将数据引入流程组,而出站策略控制数据流出流程组的方式。有两个可用选项:

  • 可用时流式传输(默认)

  • 批量输出

当出站策略配置为“可用时流式传输”时,到达输出端口的数据会立即传输出流程组,前提是没有施加反压。

当出站策略配置为“批量输出”时,输出端口不会将数据传输出流程组,直到流程组中的所有数据都在输出端口排队(即,在所有数据处理完成之前,没有数据离开流程组)。数据是全部在同一个输出端口排队,还是一些数据在输出端口 A 排队而另一些数据在输出端口 B 排队,这并不重要。就 FlowFile 处理完成而言,这两种情况被视为相同。

使用“批量输出”的出站策略以及“每个节点单个 FlowFile”的 FlowFile 并发,允许用户轻松摄取单个 FlowFile(其本身可能代表一批数据),然后等待该 FlowFile 的所有处理完成,然后继续下一步在数据流中(即流程组外部的下一个组件)。此外,使用此模式时,从流程组传输出的每个 FlowFile都将被赋予一系列名为“batch.output.<端口名称>”的属性,对应流程组中的每个输出端口。该值将等于为此批次数据路由到该输出端口的 FlowFile 数量。例如,考虑一个情况,单个 FlowFile 被拆分为 5 个 FlowFile:两个 FlowFile 转到输出端口 A,一个转到输出端口 B,两个转到输出端口 C,没有 FlowFile 转到输出端口 D。在这种情况下,每个 FlowFile 将具有属性 batch.output.A = 2、batch.output.B = 1、batch.output.C = 2、batch.output.D = 0。

当与“无限制”的 FlowFile 并发结合使用时,“批量输出”的出站策略不提供任何优势。因此,如果 FlowFile 并发设置为“无限制”,则出站策略将被忽略。

连接面向批处理的进程组

Lynxus 中的一个常见用例是执行一些面向批处理的流程,并且仅在该流程完成后,对同一批数据执行另一个流程。

Lynxus 通过将每个流程封装在各自的流程组中来实现这一点。第一个流程组的出站策略应配置为“批量输出”,而 FlowFile 并发应为“每个节点单个 FlowFile”或“每个节点单个批次”。使用此配置,第一个流程组将处理整批数据(根据 FlowFile 并发,可以是单个 FlowFile 或多个 FlowFile)作为一个连贯的数据批次。当该批数据的处理完成后,数据将被保留,直到所有 FlowFile 都处理完毕并准备离开流程组。此时,数据可以作为批次传输出流程组。此配置——当流程组配置了“批量输出”的出站策略,并且输出端口直接连接到 FlowFile 并发为“每个节点单个批次”的流程组的输入端口时——被视为稍微特殊的情况。接收流程组不仅会在输入队列为空之前摄取数据,而且在队列为空并且源流程组已将该批次中的所有数据传输出流程组之前不会停止。这允许 FlowFile 集合作为单个数据批次在流程组之间传输,即使这些 FlowFile分布在多个端口上。

注意事项

使用“每个节点单个 FlowFile”的 FlowFile 并发时,有几个注意事项需要考虑。

首先,如果同一节点上的流程组中没有排队的数据,输入端口可以自由地将数据引入流程组。这意味着在 5 节点集群中,例如,可能有多达 5 个传入的 FlowFile 同时被处理。此外,如果连接配置为使用 负载均衡,它可能会将数据传输到集群中的另一个节点,从而允许数据在该 FlowFile 仍在处理时进入流程组。因此,不建议在未配置为“无限制” FlowFile 并发的流程组内使用负载均衡连接。

使用“批量输出”的出站策略时,考虑反压很重要。考虑一种情况,在所有数据处理完成之前,不会将任何数据传输出流程组。还要考虑到输出端口 A 的连接的反压阈值为10,000 个 FlowFile(默认值)。如果该队列达到 10,000 的阈值,上游处理器将不再被触发。因此,数据将无法完成处理,流程将陷入死锁,因为输出端口在处理完成之前不会运行,而处理器在输出端口运行之前不会运行。为避免这种情况,如果预计从单个输入 FlowFile 生成大量 FlowFile,建议以允许最大预期 FlowFile 数量的方式配置以输出端口结尾的连接的背压,或者完全禁用这些连接的背压(通过将背压阈值设置为 0)。有关更多信息,请参阅 反压。

连接的默认设置

流程组配置对话框中的最后三个元素是默认 FlowFile 过期、默认反压对象阈值和默认反压数据大小阈值。这些设置在创建新连接时配置默认值。每个连接代表一个队列,每个队列都有 FlowFile 过期、反压对象计数和反压数据大小的设置。此处指定的设置将影响在流程组内创建的所有新连接的默认值;它不会影响现有连接。在已配置的流程组内创建的子流程组将继承默认设置。同样,现有流程组不会受到影响。如果未使用这些选项覆盖,则根流程组从 lynxus.properties 获取其默认反压设置,并且默认 FlowFile 过期时间为“0 秒”(即不过期)。

将默认 FlowFile 过期时间设置为非零值可能会导致数据丢失,因为 FlowFile 会在达到时间限制时过期。

配置对话框中的最后一个元素是流程组注释。这提供了一种添加有关流程组的任何有用信息的机制。

控制器服务

流程组配置对话框中的控制器服务选项卡在 为数据流添加控制器服务 中介绍。

参数

流程中的属性值(包括敏感属性)可以使用参数进行参数化。参数在 Lynxus UI 中创建和配置。任何属性都可以配置为引用参数,但有以下条件:

  • 敏感属性只能引用敏感参数

  • 非敏感属性只能引用非敏感参数

  • 引用控制器服务的属性不能使用参数

  • 参数不能在报告任务、流程分析规则或管理控制器服务中引用

UI 会指示参数是否可以用于属性值。

表达式语言和参数帮助文本

参数上下文

参数在参数上下文中创建。参数上下文是对 Lynxus 实例全局定义/可访问的。可以将访问策略应用于参数上下文,以确定哪些用户可以创建它们。创建后,还可以应用读取和写入特定参数上下文的策略(有关更多信息,请参阅 访问参数)。

创建参数上下文

要创建参数上下文,请从全局菜单中选择参数上下文:

全局菜单 - 参数上下文

在参数上下文窗口中,点击右上角的 + 按钮,将打开添加参数上下文窗口。该窗口有两个选项卡:设置和参数。

参数上下文 - 设置

在“设置”选项卡上,为参数上下文添加名称和描述(如果需要)。选择“应用”保存参数上下文,或选择“参数”选项卡向上下文添加参数。

向参数上下文添加参数

可以在参数上下文创建期间添加参数,也可以添加到现有参数上下文。

在参数上下文创建期间,选择“参数”选项卡。单击 + 按钮打开添加参数窗口。

添加参数

要向现有参数上下文添加参数,请打开参数上下文窗口并单击所需参数上下文行中的编辑按钮(编辑)。

编辑参数上下文

在“参数”选项卡上,单击 + 按钮打开添加参数窗口。

添加参数窗口具有以下设置:

  • 名称 - 用于表示参数的名称。仅允许字母数字字符(a-z、A-Z、0-9)、连字符(-)、下划线(_)、句点(.)和空格。

  • 值 - 引用参数时将使用的值。如果参数使用了表达式语言,需要注意的是表达式语言将在 引用参数的组件的上下文中进行计算。请参阅下面的 参数 and Expression Language 部分以获取更多信息。

  • 设置空字符串 - 选中以将参数的值显式设置为空字符串。默认不选中。(注意:如果选中但设置了值,则忽略复选框。)

  • 敏感值 - 如果参数的值应被视为敏感值,则设置为“是”。如果为敏感值,应用后参数的值将不会在 UI 中显示。默认设置为“否”。敏感参数只能被敏感属性引用,非敏感参数只能被非敏感属性引用。参数创建后,其敏感标志无法更改。

  • 描述 - 解释参数是什么、如何使用等的描述。此字段是可选的。

配置这些设置后,选择“应用”。“引用组件”列出当前选定参数引用的组件。添加其他参数或编辑任何现有参数。

更新参数上下文

要完成该过程,请从参数上下文窗口中选择“应用”。将执行以下操作来验证引用已添加或修改参数的所有组件:停止/重新启动受影响的处理器、禁用/重新启用受影响的控制器服务、更新参数上下文。

验证受影响的组件

“引用组件”部分现在列出了按流程组组织的已添加/编辑/删除的参数集引用的所有组件的汇总。

参数 and Expression Language

添加使用表达式语言的参数时,了解表达式语言将在哪个上下文中进行计算非常重要。表达式始终在引用参数的处理器或控制器服务的上下文中进行计算。例如,考虑一个场景,添加一个名为 Time 的参数,其值为 ${now()}。表达式语言会在计算时调用以确定系统时间。当作为参数添加时,系统时间不会在添加参数时计算,而是在处理器或控制器服务计算表达式时计算。也就是说,如果处理器有一个属性值设置为 #{Time},它的功能将与属性的值设置为 ${now()} 完全相同。每次引用该属性时,都会产生不同的时间戳。

此外,某些属性不允许使用表达式语言,而其他属性允许使用表达式语言但不对 FlowFile 属性进行表达式计算。为了帮助理解其工作原理,考虑一个名为 File 的参数,其值为 ${filename}。然后考虑三个不同的属性,每个属性具有不同的表达式语言范围和一个文件名为`test.txt` 的 FlowFile。如果每个属性都设置为 #{File},则下表说明了结果值。

配置的属性值 表达式语言范围 有效属性值 说明

#{File}

FlowFile 属性

test.txt

通过查看 filename 属性来解析文件名。

#{File}

环境

空字符串

FlowFile 属性不在范围内,并且我们假设在 JVM 级别没有定义名为“filename”的系统属性或环境变量

#{File}

无

${filename}

字面文本“${filename}”将不会被计算。

将参数上下文分配给进程组

要使组件引用参数,必须首先为其流程组分配一个参数上下文。分配后,该流程组内的处理器和控制器服务只能引用该参数上下文中的参数。

一个流程组只能分配一个参数上下文,而一个参数上下文可以分配给多个流程组。

用户只能将流程组的参数上下文设置为用户具有查看策略的参数上下文之一。此外,要设置参数上下文,用户必须具有流程组的修改策略。有关更多信息,请参阅 访问参数。

要将参数上下文分配给流程组,请从操作面板或流程组上下文菜单中单击“配置”。

配置进程组参数上下文

在流程配置窗口中,选择“常规”选项卡。从流程组参数上下文下拉菜单中,选择现有的参数上下文或创建一个新的。

进程组参数上下文菜单

选择“应用”保存配置更改。流程组上下文菜单现在包含“参数”选项,允许快速访问已分配参数上下文的更新参数上下文窗口。

上下文菜单参数选项

如果流程组的参数上下文发生更改,所有引用该流程组中任何参数的组件将被停止、验证并重新启动,前提是这些组件之前正在运行且仍然有效。

如果从流程组中取消设置参数上下文,它*不会*从父流程组继承参数上下文。相反,不能引用任何参数。任何已引用参数的组件将变为无效。

引用参数

参数引用语法

要配置符合条件的属性以引用参数,请使用 # 符号作为开头,参数名称用大括号括起来:

#{Parameter.Name}

这可以通过在开头使用额外的 # 字符来转义。为了说明这一点,假设参数 abc 的值为 xxx,参数 def 的值为 yyy。那么,以下用户定义的属性值将计算为这些有效值:

用户输入的字面属性值

有效属性值

说明

#{abc}

xxx

简单替换

#{abc}/data

xxx/data

带有额外字面数据的简单替换

#{abc}/#{def}

xxx/yyy

带有额外字面数据的多次替换

#{abc

#{abc

没有用于参数替换的 { }

#abc

#abc

没有用于参数替换的 { }

##{abc}

#{abc}

转义 # 用于字面解释

###{abc}

#xxx

转义 # 用于字面解释,后跟简单替换

####{abc}

##{abc}

转义 # 用于字面解释,两次

#####{abc}

##xxx

转义 # 用于字面解释,两次,后跟简单替换

#{abc/data}

属性设置操作时抛出异常

/ 不是有效的参数名称字符

在 表达式语言 中引用参数时,参数引用会首先被计算。例如,要将 abc 参数中的 xxx 替换为 zzz:

${ #{abc}:replace('xxx', 'zzz') }

在组件配置期间引用和创建参数

在配置流程中的组件时,可以轻松引用或创建参数。例如,假设一个流程组已分配了参数上下文“Kafka 设置”。“Kafka 设置”包含参数 kafka.broker 和 kafka.topic1。

现有参数

要将 kafka.broker 引用为 PublishKafka 处理器中“Kafka Brokers”属性的值,请清除默认值并以起始分隔符 #{ 开始新条目。接下来使用按键 control+space 显示可用参数列表:

自动补全参数示例

选择 kafka.broker 并用右大括号 } 完成输入。

已选择现有参数

将鼠标悬停在表达式语言和参数资格指示器上时,会显示描述此过程的帮助文本。

表达式语言和参数帮助文本

也可以即时创建参数。例如,要为“主题名称”属性创建参数,请单击该属性行中的“转换为参数”图标(转换为参数)。仅当用户具有修改参数上下文的适当权限时,此图标才可用(有关更多信息,请参阅 访问参数)。

将属性转换为参数

将打开添加参数对话框。根据需要配置新参数。

即时配置参数

选择“应用”。流程组的参数上下文将被更新,新参数将被该属性引用,并自动应用正确的语法。

新参数被引用

可选择值的属性也可以引用参数。除了应用前面描述的“转换为参数”方法外,值下拉菜单中还提供“引用参数…​”选项。

引用参数选项

选择“引用参数…​”将显示可用参数的下拉列表,由分配给组件流程组的参数上下文和用户的访问策略决定。

引用参数可用参数

将鼠标悬停在问号图标(信息)上将显示参数的描述。

将参数与敏感属性一起使用

敏感属性只能引用敏感参数。这对于 版本化流程 很重要。敏感参数本身的值不会发送到流程注册表,只有该属性引用了敏感参数这一事实会被发送。有关更多信息,请参阅 版本化流程中的参数。

敏感属性的值必须设置为单个参数引用。例如,不允许使用 #{password}123 和 #{password}#{suffix} 的值。发送 #{password}123 会导致暴露敏感属性值的一部分。这与非敏感属性不同,非敏感属性中 #{path}/child/file.txt 这样的值是有效的。

参数值引用

参数的*值*本身可以是对另一个参数的引用。当参数的值恰好为 #{otherParameter}(或对于包含在未加引号引用中不允许的字符(如空格)的名称为 #{'Other Parameter'})时,引用参数被视为被引用参数的一对一别名:在解析时,别名的有效值将被替换为被引用参数的值。

这仅是一对一别名。参数的值必须是单个引用,不包含其他内容:与字面文本组合的引用(jdbc://#{db_host}:3306)或多个引用(#{a}#{b})将保持原样,不被视为别名。

被引用参数可以是绑定参数上下文有效范围内可见的任何参数:在同一上下文中定义的参数、从另一个参数上下文继承的参数、或从 参数提供程序 获取的参数。引用参数和被引用参数必须具有相同的敏感性;否则引用将保持未解析状态。

解析仅执行一层 — 不跟踪别名的别名。例如,如果参数 A 的值为 #{B},参数 B 的值为 #{C},则 A 解析为字面值 #{C},而不是 C 的值。

更新被引用参数的值会透明地级联:配置了别名的组件被识别为受影响的组件,并在参数上下文更新期间被停止、验证和重新启动,就像它们直接引用了底层参数一样。

举例说明,假设参数上下文 Shared 定义了 db_host,其值为 myserver.example.com,参数上下文 App 继承自 Shared 并定义了别名 host,其值为 #{db_host}。绑定到 App 并配置了 #{host} 的处理器将解析为 myserver.example.com。

别名参数(在 App 中)

被引用参数(在 Shared 中)

有效属性值

host = #{db_host}

db_host = myserver.example.com

myserver.example.com

password = #{secret_value}(敏感)

secret_value = s3cr3t(敏感)

s3cr3t

url = jdbc://#{db_host}:3306

db_host = myserver.example.com

jdbc://#{db_host}:3306(不是别名 - 字面文本加引用)

参数提供程序

参数提供程序允许将参数存储在 Lynxus 外部的来源中(例如 HashiCorp Vault)。可以获取参数提供程序的参数并将其应用于所有引用的参数上下文。

要添加参数提供程序,请从全局菜单中选择控制器设置。

全局菜单 - 控制器设置

这将显示 Lynxus 设置窗口。选择参数提供程序选项卡并点击右上角的 + 按钮以创建新的参数提供程序。

参数提供者选项卡

将打开添加参数提供程序窗口。此窗口类似于添加处理器窗口。它在右侧提供可用参数提供程序的列表,在左侧显示标签云,显示用于参数提供程序的最常见类别标签。数据流管理员可以单击标签云中的任何标签,以将参数提供程序列表缩小到符合所需类别的那些。数据流管理员还可以使用窗口右上角的筛选字段搜索所需的参数提供程序,或使用左上角的来源下拉列表按创建者组筛选列表。从列表中选择参数提供程序后,数据流管理员可以在下方看到该提供程序的描述。选择所需的参数提供程序并单击添加,或简单地双击提供程序名称以添加它。

添加参数提供者窗口

添加参数提供程序后,数据流管理员可以通过单击最右列中的“编辑”按钮来配置它。此列中的其他按钮包括“获取参数”、“删除”和“访问策略”。

参数提供者编辑按钮

您可以通过单击左列中的“查看详细信息”、“用法”和“警报”按钮来获取有关参数提供程序的信息。

参数提供者信息按钮

当数据流管理员单击“编辑”按钮时,将打开配置参数提供程序窗口。它有三个选项卡:设置、属性和注释。此窗口类似于配置处理器窗口。“设置”选项卡为数据流管理员提供了一个为参数提供程序指定唯一名称的位置(如果需要)。它还列出了提供程序的 UUID、类型和包信息,并显示引用该参数提供程序的其他组件(例如参数上下文)的列表。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个设置的更多信息。

配置参数提供者设置

“属性”选项卡列出了可以为参数提供程序配置的各种属性。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个属性的更多信息。

配置参数提供者属性

“注释”选项卡只是一个开放文本字段,数据流管理员可以在其中包含有关提供程序的注释。配置参数提供程序后,单击“应用”保存配置并关闭窗口,或单击“取消”放弃更改并关闭窗口。

当要从参数提供程序获取参数时,单击“获取”按钮(获取按钮)。

访问参数

用户对参数的权限通过以下级别的访问策略进行管理:

  • Parameter Context(参数上下文)

  • Process Group(进程组)

  • Component(组件)

有关如何配置访问策略的更多信息,请参阅系统管理员指南中的 访问策略 部分。
参数上下文访问策略

要让用户查看参数上下文,必须将其添加到“访问控制器”查看策略或“访问参数上下文”查看策略中。要让用户修改参数上下文,还必须将其添加到相应的修改策略中。这些策略通过全局菜单中的“策略”访问。有关更多信息,请参阅系统管理员指南中的 全局访问策略 部分。

“访问参数上下文”策略继承自“访问控制器”策略,除非被覆盖。

还可以在单个参数上下文上设置查看和修改策略,以确定哪些用户可以查看参数上下文或向其中添加参数。从全局菜单中选择“参数上下文”。选择所需参数上下文行中的“访问策略”按钮(访问策略)来管理这些策略。

单个参数上下文策略

有关更多信息,请参阅系统管理员指南中的 组件级别访问策略 部分。

进程组访问策略

用户只能将流程组的参数上下文设置为用户具有查看策略的参数上下文之一。此外,要设置参数上下文,用户必须具有流程组的修改策略。流程组访问策略可以通过选中流程组并从操作面板中选择“访问策略”按钮(访问策略)来管理。

组件访问策略

要引用参数或将组件中的属性转换为参数,用户需要具有该组件的查看和修改策略。如果用户具有组件流程组的查看和修改策略,则这些策略会被继承,但这些策略可以在组件级别被覆盖。

要修改参数,用户必须具有引用该参数的所有组件的查看和修改策略。这是必需的,因为更改参数需要停止/启动组件,并且通过执行该操作,用户正在修改组件的行为。

有关更多信息,请参阅系统管理员指南中的 组件级别访问策略 部分。

将自定义属性与表达式语言配合使用

您可以使用 Lynxus 表达式语言引用 FlowFile 属性、将它们与其他值进行比较,以及在创建和配置数据流时操作它们的值。有关表达式语言的更多信息,请参阅 表达式语言指南。

除了在表达式语言中使用 FlowFile 属性、系统属性和环境属性外,您还可以定义自定义属性供表达式语言使用。定义自定义属性为您在处理和处理数据流方面提供了更大的灵活性。您还可以为连接、服务器和服务属性创建自定义属性,以便于数据流配置。

Lynxus 属性具有解析优先级,在创建自定义属性时您应注意:


  • 处理器特定属性

  • FlowFile 属性


  • FlowFile 属性


  • 环境(系统属性和操作系统环境变量)

控制器服务

控制器服务是共享服务,可供报告任务、流程分析规则、处理器和其他服务用于配置或任务执行。

在控制器级别定义的控制器服务仅限于在那里定义的报告任务、流程分析规则和其他服务。供数据流中处理器使用的控制器服务必须在根流程组或子流程组的配置中定义,它们将在这些流程组中使用。
如果您的 Lynxus 实例是安全的,您查看和添加控制器服务的能力取决于分配给您的权限。如果您无权访问一个或多个控制器服务,则无法在 UI 中看到或访问它们。可以在全局或控制器服务特定的基础上分配访问权限(有关更多信息,请参阅 使用多租户授权访问 UI)。

添加管理控制器服务

要添加管理控制器服务,请从全局菜单中选择控制器设置。

全局菜单 - 控制器设置

这将显示 Lynxus 设置窗口。该窗口有六个选项卡:常规、管理控制器服务、报告任务、流程分析规则、注册表客户端和参数提供程序。“常规”选项卡提供实例整体最大线程数的设置。

控制器设置常规选项卡

“常规”选项卡右侧是“管理控制器服务”选项卡。从此选项卡中,数据流管理员可以点击右上角的 + 按钮来创建新的控制器服务。

控制器服务选项卡

将打开添加控制器服务窗口。此窗口类似于添加处理器窗口。它在右侧提供可用控制器服务的列表,在左侧显示标签云,显示用于控制器服务的最常见类别标签。数据流管理员可以单击标签云中的任何标签,以将控制器服务列表缩小到符合所需类别的那些。数据流管理员还可以使用窗口右上角的筛选字段搜索所需的控制器服务,或使用左上角的来源下拉列表按创建者组筛选列表。从列表中选择控制器服务后,数据流管理员可以在下方看到该服务的描述。选择所需的控制器服务并单击添加,或简单地双击服务名称以添加它。

添加控制器服务窗口

添加控制器服务后,可以通过单击最右列中的“配置”按钮来配置它。此列中的其他按钮包括“启用”、“删除”和“访问策略”。

控制器服务按钮

您可以通过单击左列中的“用法”、“注释”和“警报”按钮来获取有关控制器服务的信息。

控制器服务信息按钮

当数据流管理员单击“配置”按钮时,将打开配置控制器服务窗口。它有三个选项卡:设置、属性和注释。此窗口类似于配置处理器窗口。

“设置”选项卡为数据流管理员提供了一个为控制器服务指定唯一名称的位置(如果需要)。它还列出了服务的 UUID、类型、包和支持信息,并提供了引用该服务的其他组件(报告任务或其他控制器服务)的列表。

最后,可以修改公告级别。每当控制器服务写入其日志时,控制器服务还会生成一个公告。此设置指示应在用户界面中显示的最低公告级别。默认情况下,公告级别设置为 WARN,这意味着它将显示所有警告和错误级别的公告。

配置控制器服务设置

“属性”选项卡列出了适用于特定控制器服务的各种属性。与配置处理器一样,数据流管理员可以将鼠标悬停在问号图标上以查看有关每个属性的更多信息。

配置控制器服务属性

“注释”选项卡只是一个开放文本字段,数据流管理员可以在其中包含有关服务的注释。配置控制器服务后,单击“应用”保存配置并关闭窗口,或单击“取消”放弃更改并关闭窗口。

为数据流添加控制器服务

要为数据流添加控制器服务,您可以右键点击流程组并选择配置,或从操作面板中单击配置。

进程组配置选项

当您在画布上未选择任何内容时从操作面板中单击配置时,您将为根流程组添加控制器服务。然后,该控制器服务可用于数据流中所有嵌套的流程组。当您在画布上选择一个流程组,然后从操作面板或流程组上下文菜单中单击配置时,该服务将可用于该流程组及其以下定义的所有处理器和控制器服务。

进程组控制器服务范围

使用以下步骤添加控制器服务:

  1. 从操作面板或流程组上下文菜单中单击配置。这将显示流程组配置窗口。该窗口有两个选项卡:常规和控制器服务。常规选项卡 用于与流程组常规信息相关的设置。+ image::process-group-configuration-window.png["进程组配置窗口"]2. 从流程组配置页面中,选择控制器服务选项卡。3. 单击 + 按钮以显示添加控制器服务对话框。4. 选择所需的控制器服务,然后单击添加。5. 通过单击右列中的配置图标(配置)执行任何必要的控制器服务配置任务。

启用/禁用控制器服务

配置控制器服务后,必须启用它才能运行。使用控制器服务选项卡最右列中的“启用”按钮(启用按钮)执行此操作。要修改现有/正在运行的控制器服务,数据流管理员需要停止/禁用它(以及所有引用的报告任务和控制器服务)。使用“禁用”按钮(禁用按钮)执行此操作。数据流管理员不必逐个查找该控制器服务引用的每个组件,而是在禁用相关控制器服务时可以停止/禁用它们。启用控制器服务时,数据流管理员可以选择启动/启用控制器服务及所有引用组件,或者仅启动/启用控制器服务本身。

启用控制器服务范围

报告任务

报告任务在后台运行,以提供有关 Lynxus 实例中正在发生什么的统计报告。数据流管理员添加和配置报告任务的过程类似于控制器服务。要添加报告任务,请从全局菜单中选择控制器设置。

全局菜单 - 控制器设置

这将显示 Lynxus 设置窗口。选择报告任务选项卡并点击右上角的 + 按钮以创建新的报告任务。

报告任务选项卡

将打开添加报告任务窗口。此窗口类似于添加处理器窗口。它在右侧提供可用报告任务的列表,在左侧显示标签云,显示用于报告任务的最常见类别标签。数据流管理员可以单击标签云中的任何标签,以将报告任务列表缩小到符合所需类别的那些。数据流管理员还可以使用窗口右上角的筛选字段搜索所需的报告任务,或使用左上角的来源下拉列表按创建者组筛选列表。从列表中选择报告任务后,数据流管理员可以在下方看到该任务的描述。选择所需的报告任务并单击添加,或简单地双击服务名称以添加它。

添加报告任务窗口

添加报告任务后,数据流管理员可以通过单击最右列中的“编辑”按钮来配置它。此列中的其他按钮包括“启动”、“删除”、“状态”和“访问策略”。

报告任务编辑按钮

您可以通过单击左列中的“查看详细信息”、“用法”、“注释”和“警报”按钮来获取有关报告任务的信息。

报告任务信息按钮

当数据流管理员单击“编辑”按钮时,将打开配置报告任务窗口。它有三个选项卡:设置、属性和注释。此窗口类似于配置处理器窗口。“设置”选项卡为数据流管理员提供了一个为报告任务指定唯一名称的位置(如果需要)。它还列出了任务的 UUID、类型和包信息,并提供任务的调度策略和运行计划设置(类似于处理器中的相同设置)。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个设置的更多信息。

配置报告任务设置

“属性”选项卡列出了可以为任务配置的各种属性。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个属性的更多信息。

配置报告任务属性

“注释”选项卡只是一个开放文本字段,数据流管理员可以在其中包含有关任务的注释。配置报告任务后,单击“应用”保存配置并关闭窗口,或单击“取消”放弃更改并关闭窗口。

当要运行报告任务时,单击“启动”按钮(启动按钮)。

流分析规则

流程分析规则可以分析组件或流程的(部分)。它们可能产生规则违反,可以帮助调整或维持最佳流程设计。每个规则可以是建议或策略,可以在配置流程分析规则窗口上设置。建议类型规则的规则违反可以被报告和稍后查看,但对功能没有影响。策略类型规则的规则违反也可以被报告和稍后查看,但还会影响功能:违反策略的组件将变为无效并一直保持直到规则违反被解决。数据流管理员添加和配置流程分析规则的过程类似于控制器服务。要添加流程分析规则,请从全局菜单中选择控制器设置。

全局菜单 - 控制器设置

这将显示 Lynxus 设置窗口。选择流程分析规则选项卡并点击右上角的 + 按钮以创建新的流程分析规则。

流分析规则选项卡

将打开添加流程分析规则窗口。此窗口类似于添加处理器窗口。它在右侧提供可用流程分析规则的列表,在左侧显示标签云,显示用于流程分析规则的最常见类别标签。数据流管理员可以单击标签云中的任何标签,以将流程分析规则列表缩小到符合所需类别的那些。数据流管理员还可以使用窗口右上角的筛选字段搜索所需的流程分析规则,或使用左上角的来源下拉列表按创建者组筛选列表。从列表中选择流程分析规则后,数据流管理员可以在下方看到该规则的描述。选择所需的流程分析规则并单击添加,或简单地双击服务名称以添加它。

添加流分析规则窗口

添加流程分析规则后,数据流管理员可以通过单击最右列中的“配置”按钮来配置它(当规则被禁用时)。此列中的其他按钮包括“启用”、“禁用”、“查看配置”、“删除”、“状态”和“访问策略”。

流分析规则配置按钮

您可以通过单击左列中的“查看详细信息”、“用法”和“警报”按钮来获取有关流程分析规则的信息。

流分析规则信息按钮

当数据流管理员单击“配置”按钮时,将打开配置流程分析规则窗口。它有三个选项卡:设置、属性和注释。此窗口类似于配置处理器窗口。“设置”选项卡为数据流管理员提供了一个为流程分析规则指定唯一名称的位置(如果需要)。它还列出了规则的 UUID、类型和包信息,并提供其类型(建议或策略)的设置。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个设置的更多信息。

配置流分析规则设置

“属性”选项卡列出了可以为规则配置的各种属性。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个属性的更多信息。

配置流分析规则属性

“注释”选项卡只是一个开放文本字段,数据流管理员可以在其中包含有关规则的注释。配置流程分析规则后,单击“应用”保存配置并关闭窗口,或单击“取消”放弃更改并关闭窗口。

当要使流程分析规则生效时,单击“启用”按钮(启用按钮)。

当要使流程分析规则失效时,单击“禁用”按钮(禁用按钮)。禁用规则还会使所有相应的违反无效。

连接组件

将处理器和其他组件添加到画布并配置后,下一步是将它们相互连接,以便 Lynxus 知道在每个 FlowFile 处理后应如何处理。这是通过在每个组件之间创建连接来实现的。当用户将鼠标悬停在组件中心时,会出现一个新的连接图标(连接气泡):

带连接气泡的处理器

用户将连接气泡从一个组件拖到另一个组件,直到第二个组件被高亮显示。当用户释放鼠标时,会出现“创建连接”对话框。此对话框由两个选项卡组成:“详细信息”和“设置”。它们在下面详细讨论。请注意,可以绘制一个连接使其回到同一个处理器。如果数据流管理员希望处理器在 FlowFile 进入失败关系时尝试重新处理,这可能很有用。要创建这种类型的循环连接,只需将连接气泡拖开,然后拖回同一个处理器直到它被高亮显示。然后释放鼠标,相同的“创建连接”对话框将出现。

详情选项卡

“创建连接”对话框的“详细信息”选项卡提供有关源组件和目标组件的信息,包括组件名称、组件类型以及组件所在的流程组:

创建连接

此外,此选项卡提供了选择此连接中应包含哪些关系的能力。必须选择至少一个关系。如果只有一个关系可用,则会自动选择它。

如果使用相同的关系添加多个连接,则路由到该关系的任何 FlowFile 都将自动被“克隆”,并将副本发送到每个连接。

设置

“设置”选项卡提供了配置连接名称、FlowFile 过期、反压阈值、负载均衡策略和优先化的能力:

连接设置

连接名称是可选的。如果未指定,连接显示的名称将是对连接活动的关系的名称。

FlowFile 过期

FlowFile 过期是指无法及时处理的数据可以从流程中自动删除的概念。例如,当预计数据量超过可以发送到远程站点的量时,这很有用。在这种情况下,过期可以与优先化器结合使用,以确保最高优先级的数据被首先处理,然后在一定时间段内(例如一小时)无法处理的任何数据可以被丢弃。过期时间段基于数据进入 Lynxus 实例的时间。换句话说,如果给定连接上的文件过期设置为“1 小时”,并且在 Lynxus 实例中已存在一小时的文件到达该连接,它将过期。默认值`0 sec` 表示数据永远不会过期。当设置了“0 sec”以外的文件过期时间时,连接标签上会出现一个小时钟图标,因此数据流管理员在查看画布上的流程时可以一目了然地看到它。

文件过期指示器

反压

Lynxus 提供两个反压配置元素。这些阈值指示在连接源组件不再被调度运行之前,队列中应允许存在多少数据。这允许系统避免被数据淹没。提供的第一个选项是“反压对象阈值”。这是在应用反压之前队列中可以存在的 FlowFile 数量。第二个配置选项是“反压数据大小阈值”。这指定在应用反压之前应排队的最大数据量(按大小)。通过输入一个数字后跟数据大小来配置此值(B 表示字节,KB 表示千字节,MB 表示兆字节,GB 表示千兆字节,或 TB 表示太字节)。

默认情况下,每个新添加的连接将具有 10,000 个对象 的默认反压对象阈值和 1 GB 的默认反压数据大小阈值。这些默认值可以通过修改 lynxus.properties 文件中的相应属性来更改。

启用反压后,连接标签上会出现小进度条,因此数据流管理员在查看画布上的流程时可以一目了然地看到它。进度条根据队列百分比改变颜色:绿色(0-60%)、黄色(61-85%)和红色(86-100%)。

反压指示条

将鼠标悬停在进度条上会显示精确的百分比。

反压指示器悬停文本

当队列完全满时,连接将以红色高亮显示。

反压队列已满

负载均衡
负载均衡策略

要将流程中的数据分布到集群中的节点上,Lynxus 提供以下负载均衡策略:

  • 不负载均衡:不在集群节点之间负载均衡 FlowFile。这是默认设置。

  • 按属性分区:根据用户指定的 FlowFile 属性值确定将给定 FlowFile 发送到哪个节点。所有具有相同属性值的 FlowFile 将发送到集群中的同一节点。如果目标节点与集群断开连接或无法通信,数据不会故障转移到另一个节点。数据将排队等待节点再次可用。此外,如果节点加入或离开集群需要重新平衡数据,则应用一致性哈希以避免重新分发所有数据。

  • 轮询:FlowFile 将以轮询方式分布到集群中的节点。如果节点与集群断开连接或无法与节点通信,为该节点排队的数据将自动重新分发到另一个节点。如果节点接收数据的速度不如集群中的其他节点快,该节点也可能会在一个或多个迭代中被跳过,以最大化跨集群数据分发的吞吐量。

  • 单节点:所有 FlowFile 将发送到集群中的单个节点。发送到哪个节点不可配置。如果节点与集群断开连接或无法与节点通信,为该节点排队的数据将保持排队状态,直到节点再次可用。

除了 UI 设置之外,还有与负载均衡相关的 集群节点属性 需要在 lynxus.properties 中配置。
Lynxus 会在重启时保留集群中的节点。这可以防止在所有节点连接之前重新分配数据。如果集群关闭且某个节点不打算再次启动,用户有责任通过 UI 中的“集群”对话框从集群中移除该节点(有关更多信息,请参阅 管理节点)。
负载均衡压缩

选择负载均衡策略后,用户可以配置在集群节点之间传输数据时是否应压缩数据。

负载均衡压缩选项

以下压缩选项可用:

  • 不压缩:FlowFile 不会被压缩。这是默认设置。

  • 仅压缩属性:FlowFile 属性将被压缩,但 FlowFile 内容不会。

  • 压缩属性和内容:FlowFile 属性和内容将被压缩。

负载均衡指示器

当为连接实施了负载均衡策略时,连接上将显示负载均衡指示器(负载均衡图标):

配置了负载均衡策略的连接

将鼠标悬停在图标上将显示连接的负载均衡策略和压缩配置。此状态下的图标还表示连接中的所有数据已分布到集群中。

分布式负载均衡连接

当数据在集群节点之间主动传输时,负载均衡指示器将改变方向和颜色:

活跃负载均衡连接

集群连接摘要

要查看数据在集群节点中的分布位置,请从全局菜单中选择摘要。然后选择“连接”选项卡和源的“查看连接详细信息”图标:

Lynxus 摘要连接

这将打开集群连接摘要对话框,显示集群中每个节点上的数据:

集群连接摘要对话框

优先级排序

选项卡的右侧提供了对队列中的数据进行优先排序的能力,以便更高优先级的数据被首先处理。可以将优先化器从顶部(“可用优先化器”)拖到底部(“已选优先化器”)。可以选择多个优先化器。位于“已选优先化器”列表顶部的优先化器具有最高优先级。如果两个 FlowFile 根据此优先化器具有相同的值,则第二个优先化器将决定哪个FlowFile 首先处理,依此类推。如果不再需要某个优先化器,可以将其从“已选优先化器”列表拖到“可用优先化器”列表。

以下优先化器可用:

  • FirstInFirstOutPrioritizer:给定两个 FlowFile,先到达连接的将被先处理。

  • NewestFlowFileFirstPrioritizer:给定两个 FlowFile,数据流中最新的将被先处理。

  • OldestFlowFileFirstPrioritizer:给定两个 FlowFile,数据流中最旧的将被先处理。

  • PriorityAttributePrioritizer:给定两个 FlowFile,将提取一个名为“priority”的属性。具有最低优先级值的将被先处理。

    • 请注意,应使用 UpdateAttribute 处理器在 FlowFile 到达设置了此优先化器的连接之前将“priority”属性添加到 FlowFile。

    • 如果只有一个具有该属性,它将先处理。

    • “priority”属性的值可以是字母数字,其中“a”在“z”之前,“1”在“9”之前

    • 如果"priority"属性无法解析为 long 类型,则将使用 Unicode 字符串排序顺序。例如:"99"和"100"会被排序为 FlowFile 的"99"在前,但"A-99"和"A-100"会被排序为 FlowFile 的"A-100"在前。

如果未选择优先化器或所选优先化器无法区分比较的 FlowFile,则处理顺序不做进一步指定,而是 Lynxus 版本之间可能更改的实现细节。

配置 负载均衡策略 后,连接除本地队列外还为每个节点提供一个队列。优先化器将独立地对每个队列中的数据进行排序。
当连接中的 FlowFile 数量超过 lynxus.queue.swap.threshold 时,到达该连接的新 FlowFile不会与活动队列一起排序,而是直接发送到交换区。它们将在被重新加载到内存时进行排序。

更改配置和上下文菜单选项

在两个组件之间绘制连接后,可以更改连接的配置,也可以将连接移动到新目标;但是,在进行配置或目标更改之前,必须停止连接两侧的处理器。

连接

要更改连接的配置或以其他方式与连接交互,请右键点击连接以打开连接上下文菜单。

连接菜单

以下选项可用:

  • 配置:此选项允许用户更改连接的配置。

  • 查看状态历史:此选项打开连接统计信息随时间变化的图形表示。

  • 列出队列:此选项列出可能等待处理的 FlowFile 队列。

  • 转到源:如果连接的源组件和目标组件在画布上距离很远,此选项可能很有用。单击此选项,画布的视图将跳转到连接的源。

  • 转到目标:与“转到源”选项类似,此选项将视图更改为画布上的目标组件,如果两个连接组件之间距离很远,则可能很有用。

  • 置于最前:如果有其他内容(如另一个连接)与之重叠,此选项将连接置于画布的最前面。

  • 清空队列:此选项允许数据流管理员清除可能等待处理的 FlowFile 队列。此选项在测试期间特别有用,当数据流管理员不关心从队列中删除数据时。选择此选项时,用户必须确认要删除队列中的数据。

  • 删除:此选项允许数据流管理员删除两个组件之间的连接。请注意,连接两侧的组件必须停止,并且连接必须为空才能删除。

弯曲连接

要向现有连接添加弯曲点(或弯头),只需在希望弯曲点所在的位置双击连接。然后,您可以使用鼠标抓住弯曲点并拖动它,使连接以所需方式弯曲。您可以添加任意数量的弯曲点。您还可以使用鼠标将连接上的标签拖动并移动到任何现有弯曲点。要删除弯曲点,只需再次双击它。

连接弯曲点

处理器验证

在尝试启动处理器之前,确保处理器的配置有效很重要。处理器左上角显示一个状态指示器。如果处理器无效,指示器将显示一个带有感叹号的黄色警告指示器,表示存在问题:

无效处理器

在这种情况下,将鼠标悬停在指示器图标上将提供一个工具提示,显示处理器的所有验证错误。解决所有验证错误后,状态指示器将更改为停止图标,表示处理器有效且已准备好启动但当前未运行:

有效处理器

站点到站点

将数据从一个 Lynxus 实例发送到另一个实例时,可以使用许多不同的协议。但是,首选协议是 Lynxus 站点到站点协议。站点到站点使得安全可靠地将数据传输到/从一个 Lynxus 实例或数据生产应用程序的节点到另一个 Lynxus 实例或其他消费应用程序的节点变得简单高效。

使用站点到站点提供以下优势:

  • 易于配置

    • 输入远程 Lynxus 实例/集群的 URL 后,可用的端口(端点)会自动发现并在下拉列表中提供。

  • 安全

    • 站点到站点可选择地使用证书来加密数据并提供身份验证和授权。每个端口都可以配置 为仅允许特定用户访问,只有这些用户才能看到该端口的存在。有关配置证书的信息, 请参阅安全配置章节(属于系统管理员指南)。

  • 可扩展

    • 当远程集群中的节点发生变化时,这些变化会被自动检测到,数据会在集群的所有节点之间分布。

  • 高效

    • 站点到站点允许一次发送批量的 FlowFile,以避免建立连接和在对等方之间进行多次 往返请求的开销。

  • 可靠

    • 发送方和接收方都会自动生成校验和并在数据传输后进行比较,以 确保没有发生损坏。如果校验和不匹配,事务将被取消并重试。

  • 自动负载均衡

    • 当节点上线或从远程集群中离开,或节点的负载变重或变轻时,定向 到该节点的数据量会自动调整。

  • FlowFile 保留属性

    • 当 FlowFile 通过此协议传输时,FlowFile 的所有属性 都会自动随之传输。这在许多情况下可能非常有益,因为一个 Lynxus 实例确定的所有上下文和丰富信息 都随数据一起传输,便于数据路由并允许用户 轻松检查数据。

  • 可适应

    • 随着新技术和新思想的出现,处理站点到站点通信的协议能够随之变化。当连接到 远程 Lynxus 实例时,会执行握手协议以协商将使用哪个协议和哪个协议版本。 这允许添加新功能,同时仍保持与所有旧实例的向后兼容性。此外,如果在协议中发现漏洞或 缺陷,它允许较新版本的 Lynxus 禁止通过受损的协议版本进行通信。

站点到站点是在两个 Lynxus 实例之间传输数据的协议。两端都可以是独立的 Lynxus 或 Lynxus 集群。在本节中,发起通信的 Lynxus 实例称为 站点到站点客户端 Lynxus 实例,另一端称为 站点到站点服务端 Lynxus 实例,以阐明每个 Lynxus 实例上需要什么配置。

Lynxus 实例可以同时是站点到站点协议的客户端和服务端,但是,它在特定的站点到站点通信中只能是客户端或服务端。例如,如果有三个 Lynxus 实例 A、B 和 C。A 将数据推送到 B,B 从 C 拉取数据。A — push → B ← pull — C。那么 B 不仅是 A 和 B 之间通信中的 服务端,还是 B 和 C 之间的 客户端。

了解哪个 Lynxus 实例将是客户端或服务端对于设计数据流和相应配置每个实例很重要。以下是基于数据流方向在哪些组件在哪些端运行的摘要:

  • 推送:客户端 发送 数据到远程流程组,服务端通过输入端口 接收 数据

  • 拉取:客户端从远程流程组 接收 数据,服务端通过输出端口 发送 数据

配置站点到站点客户端 Lynxus 实例

远程流程组:要通过站点到站点与远程 Lynxus 实例通信,只需将 远程流程组 拖动到画布上并输入远程 Lynxus 实例的 URL(有关远程流程组组件的更多信息,请参见本指南的 远程流程组传输 部分。)该 URL 与您用于访问该实例用户界面的 URL 相同,对于集群,则为集群节点的 URL。此时,您可以以与拖动处理器或本地进程组连接相同的方式拖动到远程流程组或从其拖动连接。拖动连接时,您将有机会选择要连接的端口。请注意,远程流程组可能需要最多一分钟来确定哪些端口可用。

如果从远程流程组开始拖动连接,显示的端口将是远程组的输出端口,因为这表示您将从远程实例拉取数据。如果连接改为在远程流程组结束,显示的端口将是远程组的输入端口,因为这表示您将向远程实例推送数据。

如果远程实例配置为使用安全数据传输,您将只看到您有权通信的端口。有关配置 Lynxus 安全运行的信息,请参阅系统管理员指南。

传输协议:在远程流程组创建或配置对话框中,您可以选择用于站点到站点通信的传输协议,如以下图所示:

配置远程流程组

默认情况下,它设置为 RAW,使用专用端口的原始套接字通信。如果远程Lynxus 实例在仅允许通过 HTTP(S) 协议访问或只能从特定 HTTP 代理服务器访问的受限网络中,HTTP 传输协议特别有用。对于通过 HTTP 代理服务器访问,支持 BASIC 和 DIGEST 身份验证。

本地网络接口:在某些情况下,可能希望优先使用某个网络接口而不是另一个。例如,如果有线接口和无线 接口同时存在,可能希望优先使用有线接口。这可以通过在此框中指定要使用的网络接口名称来配置。如果输入的值无效,远程流程组将无效,并且在解决此问题之前不会与其他 Lynxus 实例通信。

配置站点到站点服务端 Lynxus 实例

检索站点到站点详情:如果您的 Lynxus 安全运行,为了允许另一个 Lynxus 实例从您的实例检索信息,需要将其添加到全局访问的“检索站点到站点详情”策略中。这将允许另一个实例查询您的实例以获取名称、描述、可用对等方(集群中的节点)、统计信息、操作系统端口信息以及可用的输入和输出端口等详情。在安全实例中使用输入和输出端口需要额外的策略配置,如下所述。

输入端口:为了允许另一个 Lynxus 实例向您的本地实例推送数据,您可以简单地将 输入端口 拖动到画布的根进程组上。输入端口名称后,它将被添加到您的流程中。现在,您可以右键点击输入端口并选择“配置”以调整名称和用于该端口的并发任务数。

要在子流程组中为站点到站点创建输入端口,请输入端口名称并从接收自下拉菜单中选择“远程连接(站点到站点)”。

添加站点到站点输入端口

如果站点到站点配置为安全运行,您将需要管理输入端口的“通过站点到站点接收数据”组件访问策略。只有已添加到策略中的用户才能与该端口通信。

输出端口:与输入端口类似,数据流管理员可以选择将 输出端口 添加到根进程组。输出端口允许经过授权的 Lynxus 实例远程连接到您的实例并从输出端口拉取数据。将输出端口拖动到画布后,右键点击并选择“配置”以调整名称和允许的并发任务数。管理输出端口的“通过站点到站点接收数据”组件访问策略以控制哪些用户有权从正在配置的实例拉取数据。

要在子进程组中创建用于站点到站点的输出端口,请输入端口名称并从“发送到”下拉菜单中选择“远程连接(站点到站点)”。

添加站点到站点输出端口

除了其他 Lynxus 实例之外,某些其他应用程序也可以使用站点到站点客户端来向 Lynxus 实例推送数据或从其接收数据。

有关如何在 Lynxus 实例上启用和配置站点到站点的信息,请参阅站点到站点属性章节(属于系统管理员指南)。
有关如何配置访问策略的信息,请参阅访问策略章节(属于系统管理员指南)。

示例数据流

本节描述了构建数据流所需的步骤。现在,将它们组合在一起。以下示例数据流仅由两个处理器组成:GenerateFlowFile 和 LogAttribute。这些处理器通常用于测试,但也可以用于构建快速流程以进行演示并观察 Lynxus 的实际运行。

将 GenerateFlowFile 和 LogAttribute 处理器拖动到画布并连接它们之后(使用上面提供的指南),按如下方式配置它们:

  • Generate FlowFile

    • 在“调度”选项卡上,将运行调度设置为:5 秒。请注意,GenerateFlowFile 处理器可以非常快速地创建许多 FlowFile;因此设置运行调度很重要,以免此流程压倒 Lynxus 运行所在的系统。

    • 在“属性”选项卡上,将文件大小设置为:10 KB

  • Log Attribute

    • 在“设置”选项卡上,在“自动终止关系”下,选择 Success 旁边的复选框。这将在此处理器成功处理 FlowFile 后终止它们。

    • 同样在“设置”选项卡上,将公报级别设置为 Info。这样,当数据流运行时,此处理器将显示公报图标(请参见 处理器剖析),用户可以将鼠标悬停在其上方以查看处理器正在记录的属性。

数据流应如下所示:

简单流程

现在请参阅下一节了解如何启动和停止数据流。当数据流运行时,请注意每个处理器表面显示的统计信息(请参见 处理器剖析)。

执行引擎

Lynxus 支持两种不同的执行引擎:传统引擎和无状态引擎。

执行引擎决定了给定进程组内组件的执行方式。两种执行引擎在许多方面有所不同。每种引擎都有其自身的优点和缺点,因此 Lynxus 允许流开发者为单个进程组配置使用哪种执行引擎。本节将突出显示两种模型之间的差异。

传统执行引擎

传统执行引擎是默认引擎。使用传统引擎,进程组内的每个组件都是独立调度的。队列用于在处理器之间缓冲数据,每个处理器独立于其他处理器对其队列中的数据进行操作。给定队列中的数据会持久化到 Lynxus 的存储库中,这样如果 Lynxus 重新启动,数据将恢复到重启前所在的队列中。

无状态执行引擎

当进程组配置为使用无状态执行引擎时,整个进程组的功能更像是一个处理器。进程组被给定一个指定的并发任务数。每个并发任务负责执行整个流。源处理器(即进程组内没有传入连接的处理器)将被触发运行一次。如果进程组有任何输入端口,它们也将有机会运行并引入单个 FlowFile。此时,流将一直运行到完成(如果可能*),然后才会将额外数据引入流中。

* 在某些场景下,数据流无法在不引入额外数据的情况下完成。例如,MergeContent 处理器可能需要额外输入才能继续。在这种情况下,源组件将被允许再次触发,直到该组件能够继续。

无状态组内队列中的数据不会持久化。因此,如果 Lynxus 重新启动,数据不会恢复到重启前所在的队列中。相反,无状态组正在处理的数据将丢失。这提供了一些有趣的机会,将在下面的何时使用无状态与标准执行引擎中讨论。

对比分析

现在我们已经对两种执行引擎的角色有了整体了解,我们将比较和对比两种执行引擎在每个重要功能方面的差异。

调度

传统引擎单独调度每个处理器。一个处理器可以配置为每五分钟运行一次,而另一个处理器被调度为尽可能快地运行,使用八个并发任务。处理器之间队列的主要工作是允许处理器以不同的速率运行。如果源运行速度比目标快,它将排队数据直到达到配置的反压阈值。然后,源将停止生成数据,以便目标有机会赶上。如果排队了太多 FlowFile,FlowFile(即属性等)将被交换到磁盘,以避免耗尽 Java 堆。这种方法使流程开发人员能够非常精细地控制在整个管道中为每个处理步骤分配多少资源。

相比之下,无状态引擎使用单个线程从头到尾运行整个流程。首先触发源组件以将数据引入流程。如果 FlowFile 被引入流程,则触发数据所在队列的目标,直到它处理完所有数据。大多数时候,这是处理器的单次调用。然后触发流程中的下一个处理器运行,依此类推。为队列配置的任何反压都将被忽略。FlowFile 永远不会交换到磁盘。但是,这通常不是问题,因为流程中通常一次只处理一个 FlowFile。

但是,在配置用于流程组的执行引擎时,流程开发人员能够指定用于无状态引擎的最大并发任务数。如果值设置为 N(大于 1),将有 N 个无状态流程副本并发运行。对于每个流程副本,将触发源组件,然后触发下一个处理器,依此类推。需要注意的是,如果 N 大于 1,则流程中的每个处理器将有 N 个副本用于处理数据。因此,如果处理器需要在内部存储对象,例如 MergeContent,则每个流程副本都有该内部状态的单独副本。因此,如果 MergeContent 配置为需要至少 1,000 个 FlowFile 才能合并,并且流程以 8 个并发任务运行,则 8 个流程中的每一个可能有多达 999 个 FlowFile,总计 7,992 个 FlowFile,而不会合并任何数据。因此,流程设计人员在使用无状态引擎与必须等待某些条件才能继续的处理器时应谨慎。

无状态流程还可能包含不需要持续运行的源处理器。例如,GetFile 处理器可能是流程中的第一个处理器。可能希望每 5 分钟只运行一次处理器。这可能会使事情复杂化,因为处理器不是单独调度的。为此,会检查所有源处理器以确定它们应多久被调度一次。具有最小运行计划(即调度最快)的组件将决定无状态流程应多久调度一次。例如,如果有一个配置为每小时运行一次的 ListFile 处理器和一个配置为每分钟运行一次的 ListS3 处理器,两个源处理器都将被触发每分钟运行一次。

使用无状态引擎时,始终使用定时器驱动调度器。目前无状态流程不支持 CRON 调度。如果需要 CRON 调度,通常足以对 CRON 驱动的处理器使用传统引擎,然后将其连接到无状态流程组。

传统引擎允许为每个处理器配置运行时长。这通常极大地提高了性能。使用无状态流程时不可用此功能。对于无状态流程,这会根据流程中使用的处理器自动为您管理。如果流程中的任何处理器需要串行触发,无状态流程将不会使用大于单次调用的运行时长。否则,它将运行最多 100 毫秒。如果任何调用产生失败,运行时长将被缩短。

事务性

事务性可能是传统引擎和无状态引擎之间最显著的区别。对于传统引擎,处理器是事务边界。也就是说,处理器对 FlowFile 执行某些操作,然后事务完成。FlowFile 被传输到流程中的下一个处理器,而第一个处理器执行任何类型的清理。

例如,考虑一个从 JMS 队列消费的处理器。使用传统引擎,处理器将从 JMS 消费消息。然后,它将基于JMS 消息创建一个 FlowFile,并将 FlowFile 传输到 success 关系并提交会话。此时,框架将确保数据已持久化到底层存储库并将 FlowFile 添加到出站队列。最后,JMS 消费者将获得确认收到消息的机会。

此时,FlowFile 可能发生各种情况。它可能被丢弃。它可能被转换。它可能被推送到两个不同的目标。或者它可能留在流程中,因为某个下游系统(如数据库)已关闭。但是,消息已被确认,不会被重新传递。因此,Lynxus 持久化该数据很重要,这样在重新启动时它可以完成数据的处理。

这种范式的一个强大优势是源不需要是持久化或事务性的。例如,客户端可以向 Lynxus 发送 HTTP POST 请求以提供数据。只要Lynxus 以“200 OK”或“201 Created”或类似消息响应,就可以假设消息将按照流程处理。

另一方面,如果数据源实际上是事务性的,例如 JMS 队列,这可能不太理想。如果 Lynxus 被关闭,可能是由于硬件故障,已确认的数据将不会被重新传递。Lynxus 实例拥有该数据,必须重新启动才能完成数据的处理。

但是,当使用无状态引擎时,语义会发生变化。事务边界不再是处理器,而是整个流程组。当使用无状态引擎运行相同的流程时,JMS 消费者仍然接收 JMS 消息并从中创建 FlowFile。它仍然将 FlowFile 传输到 `success`关系并提交会话。但是,使用无状态引擎时,不是将数据持久化到底层存储库并给予 JMS 消费者确认收到消息的机会,而是将 FlowFile 传递给下一个处理器。然后该处理器处理 FlowFile 并传递它。在 FlowFile 成功运行完整个流程之前,JMS 消费者不会获得确认消息的机会。

现在,这提供了一种关于如何构建流程的完全不同的思维方式。它还提供了一些重要的新功能。例如,我们现在可以让后续处理器指示数据处理失败。为此,可以将输出端口配置为“失败端口”。

故障端口

现在,如果任何 FlowFile 被路由到此端口,整个事务将被回滚。流程中的任何 FlowFile 将被丢弃。JMS 消费者不会确认消息,而是发送回“否定确认”,即 NAK。因此,JMS 代理将在稍后重新传递消息。这种方法的主要好处是,如果 Lynxus 实例被关闭(例如,由于硬件故障或将 Lynxus 实例重新调度到云环境中的其他位置运行),另一个 Lynxus 实例(或完全不同的其他软件)可以消费 JMS 消息并处理它。无需确保 Lynxus 实例能够重新启动。

此外,与失败概念相关的是使用无状态引擎时的超时概念。流程组的配置选项之一是“无状态流程超时”。这允许我们确保数据在预期的时间内被处理,如果没有则回滚整个事务。默认情况下,超时设置为 1 分钟。任何被引入无状态流程的数据必须在 1 分钟内完成处理,否则将发生超时,整个事务将被回滚。传统引擎没有数据流超时的概念。

我们还必须考虑无状态流程以输入端口启动时使用的事务性。例如,我们可能使用使用传统引擎的流程组从任意数量的来源消费数据。然后,我们可能使用无状态流程处理数据。在这种情况下,如果任何数据被路由到失败端口,整个事务将被回滚,并且原始输入 FlowFile 将被传输到失败端口——而不是触发失败的 FlowFile。如果发生超时,原始 FlowFile 将被惩罚并传输回其原始队列,以便可以再次处理。

数据持久性

Lynxus 的一个关键优势是其数据持久性。虽然许多 ETL 产品和数据移动工具提供内存处理,但 Lynxus 提供的是数据持久性。所有数据都持久化到底层存储库。重新启动后,Lynxus 从上次中断的地方继续处理数据。这意味着它几乎可以可靠地处理任何协议,即使是接收方不发送回应用程序级别确认的协议(如直接 TCP 连接)。

但是,虽然这对传统引擎成立,但对无状态引擎不成立。相反,无状态引擎在设计上会在重新启动时丢弃数据。这意味着如果必须由 Lynxus 持久化数据,无状态引擎不是安全的选择。但是,对于提供应用程序级别确认的协议(如 JMS、Apache Kafka、Amazon Kinesis 等),它是一个很好的选择。此外,对于 HTTP 等协议,Lynxus 提供了能够接收数据、执行一些处理然后发送确认的处理器。因此,即使 Lynxus 负责接受传入连接也是安全的。这里的关键是从 Lynxus 发送的应用程序级别确认消息。

数据排序

Lynxus 提供了通过使用 FlowFile 优先化器对每个队列中的数据进行排序的能力。这允许数据流开发人员确定特定数据最为重要并确保其首先被处理和/或发送到目的地。这在通信介质不太可靠的场所被证明特别强大,在这些场所通信通道可能间歇性中断,当通道恢复时需要尽快利用以发送最重要的数据。

然而,无状态引擎旨在以更高程度的事务性处理数据,通常不会在目标不可达时缓冲大量数据。因此,它会忽略配置的优先化器,始终使用先进先出(FIFO)队列处理数据。

数据溯源

在正常情况下,使用无状态引擎的流程产生的数据溯源会持久化到与传统引擎相同的底层溯源存储库中,因此溯源数据的显示方式相同。但是,由于无状态引擎可能会在失败时回滚事务,我们需要考虑这对数据溯源的影响。否则,我们可能会显示内容已被修改,然后属性被修改,数据被克隆——但重新启动后数据仍然会排队在无状态引擎外部,这会让我们误以为 FlowFile 的内容与实际不同。

因此,在无状态流程的事务完成之前,溯源事件不会存储到溯源存储库中。如果 FlowFile 被路由到故障端口,或者调用超时,溯源事件将被丢弃。但是,此规则有两个例外:SEND 和 REMOTE_INVOCATION 事件。即使事务被回滚,数据已发送或某个远程调用已发生的事实也无法回滚。因此,溯源存储库仍会被更新以记录这些事件的发生。

站点到站点

Lynxus 的站点到站点机制提供了一种以高效、可靠和安全的方式发送 FlowFile(包括其属性)从一个 Lynxus 实例到另一个的方法。这需要一个 Lynxus 实例使用远程流程组,该流程组充当客户端并建立到另一个 Lynxus 实例的套接字连接。使用传统引擎时,两个 Lynxus 实例都可以充当客户端或服务器。也就是说,它既可以使用远程流程组,也可以使用允许远程连接的输入端口。使用无状态引擎时,Lynxus 实例可以使用远程流程组并充当客户端来推送或拉取数据。但是,它不能使用允许远程连接的输入端口,因此不能充当服务器。

处理器内部状态

当使用无状态引擎且并发任务数设置为大于 1 的值时,每个并发任务都使用每个处理器的不同副本运行。因此,需要保持内部状态的处理器不会在流程副本之间共享该状态。例如,如果流程有一个 MergeContent 处理器必须在合并数据之前累积 1,000 个 FlowFile,并且并发任务数设置为 3,则每个并发任务可能有多达 999 个 FlowFile,总计2,997 个 FlowFile 而数据未被合并。在设计需要处理器内部状态的流程时,请记住这一点。

此外,因此,任何包含调度为仅在主节点上运行的处理器的流程都仅限于使用单个并发任务。将值设置为大于 1 将在启动时记录警告,并且无论配置值如何,都将使用值 1。

无状态流故障处理

使用传统引擎处理故障非常直接。例如,数据被路由到 failure 关系,并相应地处理。虽然这很直接,但并不总是期望的结果。无状态引擎处理故障的方式截然不同。

故障端口

无状态引擎允许将输出端口配置为"故障端口",这意味着如果任何 FlowFile 到达该输出端口,整个事务将失败。此输出端口可以位于流程组层次结构的任何级别。如果发生这种情况,整个事务将被回滚。也就是说,当前在该事务中处理的任何 FlowFile 将被丢弃。如果事务的源是输入端口,则通过该输入端口引入的 FlowFile 将被传输到给定的故障输出端口。如果事务的源是处理器,则该处理器将有机会发送否定确认("NAK")或根据需要清理任何资源。

超时

如果无状态流程未在配置的超时时间内完成,事务也将被回滚,方式与 FlowFile 被路由到故障端口时非常相似。但是,有一个非常显著的区别。故障端口指示将传入的 FlowFile 路由到哪里,而超时没有指定这样的输出。相反,输入 FlowFile(如果存在)将被惩罚并添加回其输入队列,以便在延迟一段时间后可以重试。

无状态流设计注意事项

单源单目标

由于无状态事务可能会被回滚,通常最佳实践是让流程由单个源和单个目标组成。考虑从单个源接收 FlowFile 的情况。然后将其发送到三个不同的目标。在成功发送到三个目标中的两个后,由于第三个目标因定期维护而关闭,发送到第三个目标失败。结果,事务被回滚。然后数据被第二次拉取。它再次成功发送到前两个目标,并再次无法推送到第三个目标。它再次被回滚。这可能会发生多次,每次数据都被发送到前两个目标。或者有时它只被发送到第一个目标而第二个失败。

在这种情况下,当前两个目标是幂等的时,流程充其量效率很低。最坏的情况下,第一个和第二个目标不是幂等的,并且存在非常大量的、不受控制的数据重复。

如果流程由多个目标组成,这个问题会更加复杂。例如,考虑一个流程,它有两个处理器,每个负责从不同的源消费数据。然后将这些数据合并到一个 FlowFile 中,再推送到三个目标。现在,如果数据被回滚,源处理器可能会从每个源拉取不同的数据。因此,发布的数据不可能是幂等的,因为每次都由不同的数据组成,而且来自每个源的数据配对每次都不同。

因此,建议将无状态流程保持为单个源和单个目标。至少,除最后一个之外的目标应该是幂等的。

合并时需谨慎

由于每个并发任务运行无状态流程的单独副本,重要的是要记住合并所需的最小传入 FlowFile 数量(通过 MergeContent或 MergeRecord)可能会随着并发任务数量的倍数而增加。因此,可能需要大量时间才能积累这么多数据。此外,无状态流程有超时限制其运行时间。因此,在配置这些类型处理器的限制时需要谨慎。

始终建议将最大 Bin 时长设置为小于无状态流程的超时时间,以确保数据流不会不断超时。虽然不断导致回滚事务的超时不应阻止正确的数据传递,但如果事务不断被回滚,它可能会导致不必要的延迟并使用大量计算资源。

因此,建议如果使用将多个 FlowFile 合并在一起的处理器,应将最小限制保持得足够小,使事务不会不断超时,或者为此类处理器配置最大 Bin 时长或等效设置,以便即使没有大量数据也能成功继续。还值得注意的是,如果需要更大的输出 FlowFile,使用较少的并发任务更有可能产生更大的输出,因为传入数据将分布在较少的流程副本上。

何时使用无状态与标准执行引擎

到目前为止,我们已经讨论了两种执行引擎之间的区别。重要的是通过强调何时使用一种执行引擎或另一种执行引擎是有意义的来完善讨论。

通常,当满足三个条件时可能首选无状态引擎:源是事务性的,有一个目标,并且希望将跨多个处理器处理给定 FlowFile 视为单个事务。

首先,源应该是事务性的。这意味着 Lynxus 必须有某种机制来指示它已接收到数据,并且数据源必须有一种机制在未收到确认时重新发送数据。大多数队列协议都是如此,如 JMS、Kafka、Amazon SQS 和 Kinesis。HTTP 请求或 RPC 类型的请求也是如此。但是,对于没有更高级别协议的低级协议(如直接 TCP 连接),情况并非如此。

其次,应该有一个目标。如上面 单源单目标 部分所讨论的,无状态流程通常应该有单个源和单个目标。

第三,应该希望将整个流程视为单个事务。如果传入 FlowFile 的任何部分处理失败,整个事务都会失败。如果这不是期望的行为,则应使用传统引擎。

一般来说,传统引擎会提供更好的性能,仅仅是因为它允许在处理器之间排队大量 FlowFile 并为单个处理器分配更多资源。此外,如果目标关闭,传统引擎允许数据排队并定期重试,直到目标再次可用。将数据转换为可发送状态所需的所有转换和处理都不需要执行多次,因为 Lynxus 会排队数据并在流程的适当步骤恢复它。此外,如果单个 FlowFile 必须传递到多个目标,传统引擎使这变得微不足道,而无状态引擎则使事情复杂化。

虽然对于每种情况可能都需要考虑其他因素,但这些通常是需要考虑的最重要概念。

数据流的命令与控制

当组件被添加到 Lynxus 画布时,它处于停止状态。要触发组件,必须启动它。启动后,组件可以随时停止。从停止状态,组件可以被配置、启动或禁用。

启动组件

要启动组件,必须满足以下条件:

  • 组件的配置必须有效。

  • 组件定义的所有关系必须连接到另一个组件或自动终止。

  • 组件必须处于停止状态。

  • 组件必须已启用。

  • 组件必须没有活跃任务。有关活跃任务的更多信息,请参阅数据流监控下的"…​剖析"部分(处理器剖析、进程组剖析、远程进程组剖析)。

可以通过选择所有要启动的组件,然后点击操作面板中的"启动"按钮(启动),或者右键点击单个组件并从上下文菜单中选择启动来启动组件。

如果启动进程组,该进程组内的所有组件(包括子进程组)都将被启动,但无效或禁用的组件除外。

启动后,处理器的状态指示器将变为播放符号(运行)。

停止组件

组件在运行时可以随时停止。可以通过右键点击组件并从上下文菜单中点击停止,或者选择组件并点击操作面板中的"停止"按钮(停止)来停止组件。

如果停止进程组,进程组内的所有组件(包括子进程组)都将被停止。

停止后,组件的状态指示器将变为停止符号(停止)。

停止组件不会中断其当前运行的任务。相反,它会停止调度新任务。活跃任务的数量显示在处理器的右上角(有关更多信息,请参阅处理器剖析)。有关如何终止运行任务的信息,请参阅终止组件的任务。

终止组件的任务

当组件停止时,它不会中断当前运行的任务。这允许当前执行完成,同时不再调度新任务,这在许多情况下是期望的行为。在某些情况下,特别是当任务挂起不再响应时,或在开发新流时,需要终止正在运行的任务。

要能够终止正在运行的任务,必须首先停止组件(参见 停止组件)。一旦组件处于已停止状态,仅当仍有任务在运行时,"终止"选项才会变为可用(参见 处理器剖析)。"终止"选项(终止)可以在选中组件时通过上下文菜单或操作面板访问。

正在被终止的任务数量将显示在活跃任务数量旁边的括号中(已终止线程)。例如,如果在选择终止时有一个活跃任务,这将显示"0 (1)"——表示0 个活跃任务和 1 个正在被终止的任务。

任务可能不会立即终止,因为不同的组件可能对终止命令的响应方式不同。但是,无论是否有任务仍处于终止状态,都可以重新配置和启动/停止组件。

启用/禁用组件

当组件启用时,它可以被启动。例如,当用户正在组装数据流时,可以选择禁用组件。通常,如果不打算运行某个组件,应该禁用它,而不是让它处于停止状态。这有助于区分故意不运行的组件和那些可能临时停止(例如,为了更改组件的配置)但无意中从未重新启动的组件。

当需要重新启用组件时,可以通过选择组件并点击操作面板中的"启用"按钮(启用)来启用。这仅在所选组件被禁用时可用。或者,可以通过在处理器配置对话框的"设置"选项卡或端口配置对话框中选中"已启用"选项旁边的复选框来启用组件。

启用后,组件的状态指示器将变为"无效"(无效)或"已停止"(已停止),具体取决于组件是否有效。

然后通过选择组件并点击操作面板中的"禁用"按钮(禁用)来禁用组件,或者通过清除处理器配置对话框的"设置"选项卡或端口配置对话框中"已启用"选项旁边的复选框来禁用。

只有端口和处理器可以被启用和禁用。

远程进程组传输

远程流程组提供了一种向远程 Lynxus 实例发送数据或从远程实例检索数据的机制。当将远程流程组(RPG)添加到画布时,它以传输禁用状态添加,如左上角的图标(传输已禁用)所示。当传输被禁用时,可以通过右键点击 RPG 并点击"启用传输"菜单项来启用。这将导致所有有连接的所有端口开始传输数据。这将使状态指示器变为传输启用图标(传输已启用)。

如果与远程流程组通信出现问题,左上角可能会显示警告指示器(警告)。将鼠标悬停在此警告指示器上将提供有关问题的更多信息。

单独端口传输

有时数据流管理员可能希望仅启用或禁用远程流程组中特定端口的传输。这可以通过右键点击远程流程组并选择"管理远程端口"菜单项来实现。这将提供一个配置对话框,从中可以配置端口:

远程流程组端口

左侧列出了远程 Lynxus 实例允许向其发送数据的所有输入端口。右侧列出了此实例能够从中拉取数据的所有输出端口。如果远程实例使用安全通信(Lynxus 实例的 URL 以 https:// 开头,而不是 http://),则远程实例未向此实例开放的任何端口都不会显示。

如果预期显示的端口未在此对话框中显示,请确保实例具有适当的权限并且远程流程组的流是最新的。这可以通过关闭远程流程组端口对话框并查看远程流程组的左下角来检查。此处显示流上次刷新的日期和时间。如果流似乎已过时,可以通过右键点击远程流程组并选择"刷新远程"来更新。(有关更多信息,请参见 远程进程组剖析)。

每个端口都显示其名称、描述、配置的并发任务数以及发送到此端口的数据是否将被压缩。此外,还显示端口配置的批处理设置(计数、大小和时长)。此信息左侧是一个用于打开或关闭端口的切换开关。没有连接的端口显示为灰色:

远程端口状态

开/关切换开关提供了一种独立启用和禁用远程流程组中每个端口传输的机制。那些已连接但当前未传输的端口可以通过点击开/关切换开关下方的铅笔图标(编辑)来配置。点击此图标将允许数据流管理员更改并发任务数、在向此端口发送或从该端口接收数据时是否应使用压缩,以及批处理设置。

对于输入端口,批处理设置控制 Lynxus 如何在事务中向远程输入端口发送数据。Lynxus 将传输 FlowFile,当它们在传入关系中排队时,直到达到任何限制(计数、大小、时长)。如果未配置任何设置,则默认使用 500 毫秒的批处理时长。

对于输出端口,批处理设置告诉远程 Lynxus,Lynxus 希望在事务中如何从远程输出端口接收数据。远程 Lynxus 将使用指定的设置(计数、大小、时长)来控制 FlowFile 的传输。如果未配置任何设置,则默认使用 5 秒的批处理时长。

Lynxus 提供了多种机制来在数据流中导航。Lynxus 用户界面部分描述了在 Lynxus 画布上导航的各种方式;但是,一旦画布上存在流,就有额外的方法从一个组件移动到另一个组件。当流中存在多个进程组时,面包屑会出现在屏幕底部,提供在它们之间导航的方式。此外,要进入画布上当前可见的进程组,只需双击它,即"钻取"进入。要离开进程组有多种方式:通过右键点击画布打开的上下文菜单;通过"导航"面板上的"离开组"按钮;如果没有模态框或上下文菜单打开,可以使用 'esc' 键。连接还提供了在流中从一个位置跳转到另一个位置的方式。右键点击连接并选择"转到源"或"转到目标"以跳转到连接的一端或另一端。这在大型复杂数据流中非常有用,因为连接线可能很长并跨越画布的大范围区域。最后,所有组件都提供了在流中向前或向后跳转的能力。右键点击任何组件(例如,处理器、进程组、端口等),然后选择"上游连接"或"下游连接"。将打开一个对话框窗口,显示用户可以跳转到的可用上游或下游连接。这在尝试向后跟踪数据流时特别有用。通常,从开始到结束跟踪数据流的路径很容易,可以钻取到嵌套的进程组中;但是,向另一个方向跟踪数据流可能更困难。

组件链接

可以使用超链接直接导航到 Lynxus 画布上的组件。这在配置了多租户授权时特别有用。例如,可以将 URL 提供给用户,以引导他们到具有权限的特定进程组。

Lynxus 实例的默认 URL 是 https://localhost:8443/lynxus,指向根进程组。当在画布上选择组件时,URL 会更新为组件的进程组 ID 和组件 ID,格式为 https://localhost:8443/lynxus/?processGroupId=<UUID>&componentIds=<UUIDs>;。在以下截图中,进程组 PG1 中的 GenerateFlowFile 处理器是所选组件:

组件链接处理器示例
支持链接到画布上的多个组件,但 URL 长度不能超过 2000 个字符。

组件对齐

Lynxus 画布上的组件可以对齐以更精确地排列数据流。为此,首先选择要对齐的所有组件。然后右键点击查看上下文菜单,并根据期望结果选择"垂直对齐"或"水平对齐"。

垂直对齐

以下是在画布上垂直对齐组件的示例。选中/高亮显示所有组件后,右键点击:

垂直对齐示例(之前)

然后选择"垂直对齐"以达到以下效果:

垂直对齐示例(之后)

水平对齐

以下是在画布上水平对齐组件的示例。选中/高亮显示所有组件后,右键点击:

水平对齐示例(之前)

然后选择"水平对齐"以达到以下效果:

水平对齐示例(之前)

Lynxus UI 提供搜索功能,以帮助轻松找到画布上的组件。您可以使用搜索按名称、类型、标识符、包、配置属性和配置值查找组件。搜索还支持使用筛选器和关键字根据特定条件细化和缩小搜索结果。

Example 1: 结果将包含匹配"processor1"的组件。

processor1

筛选条件

筛选器可以作为键值对添加到搜索框中,其中键是预定义的,并根据给定值检查特定条件。语法为"键:值"。

Example 2: 搜索将在名称或 ID 中包含字符串"myGroup"的流程组(直接或通过包含的流程组)下执行。结果将包含匹配"processor1"的组件。

group:myGroup processor1

筛选器可以与其他搜索词一起使用,也可以使用多个筛选器。唯一的约束是搜索必须以筛选器开头。未知筛选器或具有未知值的已知筛选器将被忽略。如果同一筛选器键出现多次,将使用第一个。不同筛选器的顺序对结果没有影响。

Example 3: 搜索将限制在当前活动的流程组(及其中包含的流程组)内。结果将包含匹配"import"的组件,但将排除属性匹配。

scope:here properties:exclude import

支持的筛选器如下:

scope:此筛选器根据用户当前活动的流程组缩小搜索范围。唯一有效的值是"here"。此筛选器的用法类似于"scope:here"。任何其他值都被视为无效,因此在搜索期间将忽略该筛选器。

group:此筛选器根据提供的流程组名称或 ID 缩小搜索范围。搜索将限制在名称或 ID 与筛选器值匹配的组(及其组件——包括子组及其组件)内。如果没有组与筛选器匹配,结果列表将为空。

properties:使用此筛选器,用户可以阻止属性匹配出现在搜索结果中。有效值为:"no"、"none"、"false"、"exclude"和"0"。

关键词

用户可以在搜索框中使用预定义的(不区分大小写)关键词,这些关键词将检查特定条件。

Example 4: "disabled"将被同时视为关键词和普通搜索词。结果将包含已禁用的端口和处理器,以及所有以任何方式匹配"disabled"的其他组件。

disabled

关键词可以与筛选器一起使用(见下文),但不能与其他搜索词一起使用(否则它们不会被当作关键词处理),并且一次只能使用一个关键词。但请注意,关键词也将同时被视为通用搜索词。

Example 5: 搜索将限制在当前选定的流程组(及其子流程组)内。此处的"invalid"(因为它在筛选器之后单独存在)将被同时视为关键词和普通搜索词。结果将包含无效的处理器和端口,以及所有以任何方式匹配"invalid"的其他组件。

scope:here invalid

支持的关键词如下:

  • 调度状态

    • disabled:将已禁用的端口和处理器添加到结果列表中。

    • invalid:将组件无效的端口和处理器添加到结果列表中。

    • running:将正在运行的端口和处理器添加到结果列表中。

    • stopped:将已停止的端口和处理器添加到结果列表中。

    • validating:将当前正在验证的处理器添加到结果列表中。

  • 调度策略

    • timer:将调度策略为"定时器驱动"的处理器添加到结果列表中。

    • cron:将调度策略为"CRON 驱动"的处理器添加到结果列表中。

  • 执行

    • primary:将设置为仅在主节点上运行的处理器添加到结果列表中(无论处理器当前是否正在运行)。

  • 反压

    • back pressure:将当前正在施加反压的连接添加到结果列表中。

    • pressure:参见"back pressure"。

  • 过期

    • expiration:将包含已过期 FlowFile 的连接添加到结果列表中。

    • expires:参见"expiration"。

  • 传输

    • not transmitting:将当前未传输数据的远程流程组添加到结果列表中。

    • transmitting:将当前正在传输数据的远程流程组添加到结果列表中。

    • transmission disabled:参见"not transmitting"。

    • transmitting enabled:参见"transmitting"。

数据流监控

Lynxus 提供大量有关数据流的信息,以监控其健康和状态。状态栏提供有关整体系统健康的信息(参见Lynxus 用户界面)。处理器、进程组和远程进程组提供有关其操作的细粒度详情。连接和进程组提供有关其队列中数据量的信息。摘要页面以表格格式提供画布上所有组件的信息,并提供系统诊断,包括磁盘使用情况、CPU 利用率以及 Java 堆和垃圾回收信息。在集群环境中,此信息可以按节点或作为整个集群的聚合提供。我们将在下面探讨每个监控构件。

处理器剖析

Lynxus 提供有关画布上每个处理器的大量信息。下图显示了处理器的剖析:

处理器剖析

该图概述了以下元素:

  • 处理器类型:Lynxus 提供多种不同类型的处理器,以允许执行广泛的任务。每种类型的处理器都设计为执行一个特定任务。处理器类型(在此示例中为 PutFile)描述了此处理器执行的任务。在这种情况下,处理器将 FlowFile 写入磁盘——即"将 FlowFile 放入文件"。

  • 公告指示器:当处理器记录某个事件已发生时,它会生成一个公告来通知通过用户界面监控 Lynxus 的人员。数据流管理器可以通过更新处理器配置对话框中"设置"选项卡中的"公告级别"字段来配置应在用户界面中显示哪些公告。默认值为 WARN,这意味着只有警告和错误将显示在 UI 中。除非存在此处理器的公告,否则不会显示此图标。当存在时,将鼠标悬停在图标上将提供一个工具提示,解释处理器提供的消息以及公告级别。如果 Lynxus 实例是集群模式,它还将显示发出公告的节点。公告在五分钟后自动过期。

  • 状态指示器:显示处理器的当前状态。可能的指示器如下:

    • 运行 运行:处理器当前正在运行。

    • 已停止 已停止:处理器有效且已启用但未运行。

    • 无效 无效:处理器已启用但当前无效,无法启动。将鼠标悬停在此图标上将提供一个工具提示,指示处理器无效的原因。

    • 已禁用 已禁用:处理器未运行,在启用之前无法启动。此状态不指示处理器是否有效。

  • 处理器名称:这是用户定义的处理器名称。默认情况下,处理器名称与处理器类型相同。在示例中,此值为"Copy to /review"。

  • 活跃任务:此处理器当前正在执行的任务数。此数量受处理器配置对话框中"调度"选项卡中的"并发任务"设置的约束。在此,我们可以看到处理器当前正在执行一个任务。如果 Lynxus 实例是集群模式,此值表示集群中所有节点当前正在执行的任务数。

  • 5 分钟统计信息:处理器以表格形式显示多种不同的统计信息。每个统计信息代表过去五分钟内执行的工作量。如果 Lynxus 实例是集群模式,这些值表示所有节点在过去五分钟内完成的工作量总和。这些指标包括:

    • 输入:处理器从其传入连接队列中拉取的数据量。此值表示为 <计数> (<大小>),其中 <计数> 是从队列中拉取的 FlowFile 数量,<大小> 是这些 FlowFile 内容的总大小。

    • 读/写:处理器从磁盘读取和写入磁盘的 FlowFile 内容总大小。这提供了有关此处理器所需的 I/O 性能的宝贵信息。

    • 输出:处理器传输到其出站连接的数据量。这不包括处理器自身移除的 FlowFile 或路由到自动终止连接的 FlowFile。

    • 任务/时间:此处理器在过去 5 分钟内被触发运行的次数,以及执行这些任务所花费的时间。时间格式为 <小时>:<分钟>:<秒>。

进程组剖析

流程组提供了一种将组件分组到逻辑结构中的机制,以便从更高层次使数据流更易于理解。以下图片突出了构成流程组剖析的不同元素:

进程组剖析

流程组由以下元素组成:

  • 名称:这是用户定义的流程组名称。此名称在流程组 添加到画布时设置。之后可以通过右键点击流程组并点击 "配置"菜单选项来更改名称。在此示例中,流程组的名称是"Process Group ABC"。

  • 公告指示器:当流程组的子组件发出公告时,该公告也会传播到 组件的父流程组。当任何组件有活跃的公告时,此指示器将出现, 允许用户将鼠标悬停在图标上查看公告。

  • 活跃任务:此流程组内组件当前正在执行的任务数。在此,我们可以看到 流程组当前正在执行两个任务。如果 Lynxus 实例是集群模式, 此值表示集群中所有节点当前正在执行的任务数。

  • 统计信息:流程组提供有关流程组在过去 5 分钟内处理的数据量以及当前在流程组内排队的数据量的统计信息。以下元素 构成流程组的"统计信息"部分:

    • 已排队:当前在流程组内排队的 FlowFile 数量。 此字段表示为 <计数> (<大小>),其中 <计数> 是当前在流程组中排队的 FlowFile 数量, <大小> 是这些 FlowFile 内容的总大小。在此示例中, 流程组当前有 26 个 FlowFile 排队,总大小为 12.7 兆字节(MB)。

    • 输入:在过去 5 分钟内通过所有输入端口传输到流程组中的 FlowFile 数量。 此字段表示为 <计数> / <大小> → <端口>,其中 <计数> 是在过去 5 分钟内进入流程组的 FlowFile 数量,<大小> 是这些 FlowFile 内容的总大小,<端口> 是输入端口的数量。在此示例中,8 个 FlowFile 进入了流程组,总大小为 800 KB,存在两个输入端口。

    • 读/写:流程组内组件从磁盘读取和写入磁盘的 FlowFile 内容总大小。 这提供了有关此流程组所需的 I/O 性能的宝贵信息。在此示例中, 我们看到在过去五分钟内,此流程组内的组件已读取 14.72 MB 的 FlowFile 内容 并写入了 14.8 MB。

    • 输出:在过去 5 分钟内通过输出端口从流程组传输出去的 FlowFile 数量。 此字段表示为 <端口> → <计数> (<大小>),其中 <端口> 是输出端口的数量,<计数> 是在过去 5 分钟内离开流程组的 FlowFile 数量,<大小> 是这些 FlowFile 内容的总大小。在此示例中,有三个输出端口,16 个 FlowFile 离开了流程组,总大小为 78.57 KB。

  • 组件计数:组件计数元素提供有关流程组内每种类型存在多少组件的信息。 以下提供有关每个图标及其含义的信息:

    • 传输中端口 传输中端口:当前配置为向远程 Lynxus 实例传输数据或从远程 Lynxus 实例拉取数据的远程流程组端口数量。

    • 传输未激活 未传输端口:当前连接到此流程组内组件但当前传输被禁用的远程流程组端口数量。

    • 运行中 运行中组件:此流程组内当前正在运行的处理器、输入端口和输出端口的数量。

    • 已停止组件 已停止组件:当前未运行但有效且已启用的处理器、输入端口和输出端口的数量。 这些组件已准备好启动。

    • 无效组件 无效组件:已启用但当前处于无效状态的处理器、输入端口和输出端口的数量。 这可能是由于属性配置错误或关系缺失。

    • 已禁用组件 已禁用组件:当前被禁用的处理器、输入端口和输出端口的数量。 这些组件可能有效也可能无效。如果流程组启动,这些组件不会导致任何错误 但不会被启动。

  • 版本状态计数:版本状态计数元素提供有关流程组内有多少版本化流程组的信息。有关更多信息,请参见 版本状态。

  • 注释:当流程组添加到画布时,用户可以选择指定注释以提供有关流程组的信息。之后可以通过右键点击流程组并点击"配置"菜单选项来更改注释。

远程进程组剖析

创建数据流时,通常需要在一个 Lynxus 实例和另一个实例之间传输数据。在这种情况下,远程 Lynxus 实例可以被视为一个流程组。因此,Lynxus提供了远程流程组的概念。从用户界面来看,远程流程组看起来类似于流程组。但是,远程流程组显示的不是关于其内部工作原理和状态(如队列大小)的信息,而是关于此 Lynxus 实例与远程实例之间交互的信息。

远程流程组剖析

上图显示了构成远程流程组的不同元素。在此,我们提供图标的说明和所提供信息的详细信息。

  • 传输状态:传输状态指示此 Lynxus 实例与远程实例之间的数据传输当前是否已启用。 如果任何输入端口或输出端口当前配置为传输,则显示的图标将是 传输启用图标(传输已激活 );如果所有当前连接的输入端口和输出端口都已停止,则显示传输 禁用图标(传输未激活 )。

  • 远程实例名称:这是远程实例报告的 Lynxus 实例名称。 当首次创建远程流程组时,在获取此信息之前,此处将显示远程实例的 URL。

  • 远程实例 URL:这是远程流程组指向的远程实例的 URL。 此 URL 在将远程流程组添加到画布时输入,且无法更改。

  • 安全指示器:此图标指示与远程 Lynxus 实例的通信是否安全。 如果与远程实例的通信是安全的,将由"已锁定"图标(安全 )指示。如果通信不安全,则由"未锁定"图标(不安全 )指示。如果通信是安全的,在远程实例的管理员授予访问权限之前, 此 Lynxus 实例将无法与远程实例通信。每当远程流程组 添加到画布时,这将自动发起请求,在远程实例上为此 Lynxus 实例创建用户。 在远程实例的管理员将用户添加到系统并为其分配"Lynxus"角色之前, 此实例将无法与远程实例通信。 如果通信不安全,远程流程组能够从任何人接收数据, 并且数据在 Lynxus 实例之间传输时不会加密。

  • 5 分钟统计信息:远程流程组显示两个统计信息:已发送*和*已接收。两者都采用 <计数> (<大小>) 格式,其中 <计数> 是在前五分钟内心已发送或接收的 FlowFile 数量, <大小> 是这些 FlowFile 内容的总大小。

  • 上次刷新时间:从远程实例拉取并显示在用户界面中远程流程组上的信息 会在后台定期刷新。此元素指示上次刷新的时间, 或者如果信息已经很长时间未刷新,该值将变为 远程流未更新。可以通过右键点击远程流程组并选择"刷新远程"菜单项来触发 Lynxus 刷新此信息。

队列交互

连接中排队的 FlowFile 可以在需要时查看。队列列表通过连接上下文菜单中的`List queue`打开。列表将根据配置的优先级返回活跃队列中的前 100 个 FlowFile。即使源和目标正在活跃运行,也可以执行列表操作。

此外,可以通过点击最左列中的"详情"按钮(详情)查看列表中 FlowFile 的详细信息。从这里可以查看 FlowFile 的详细信息和属性,以及下载或查看内容的按钮。如果连接的源或目标正在活跃运行,所需的 FlowFile 可能已不在活跃队列中。

连接中排队的 FlowFile 也可以在需要时删除。FlowFile 的删除通过连接上下文菜单中的`Empty queue`发起。即使源和目标正在活跃运行,也可以执行此操作。

如果启用了分析预测功能,将鼠标悬停在队列上还将显示预测统计信息,指示队列何时可能遇到反压(由于对象计数或内容大小达到当前阈值设置)。仅当 Lynxus 的内部存储库中有足够的数据且其模型足够准确以广播预测时,预测才可用。有关更多信息,请参见系统管理员指南中的 分析框架 部分。

摘要页面

虽然 Lynxus 画布有助于了解配置的数据流如何布局,但在试图辨别系统状态时,此视图并不总是最佳的。为了帮助用户从更高层次了解数据流如何运行,Lynxus 提供了摘要页面。此页面位于用户界面右上角的全局菜单中。有关此工具栏位置的更多信息,请参见 Lynxus 用户界面 部分。

通过从全局菜单中选择"摘要"来打开摘要页面。这将打开摘要表对话框:

摘要表

此对话框提供了有关画布上每个组件的大量信息。下面,我们已注释了对话框内的不同元素,以便更轻松地讨论对话框。

摘要表标注

摘要页面主要由一个表格组成,提供有关画布上每个组件的信息。在此表格上方有一组五个选项卡,可用于查看不同类型的组件。表格中提供的信息与画布上每个组件提供的信息相同。表格中的每一列都可以通过点击列标题进行排序。有关显示的更多信息类型,请参见上面的 处理器剖析、进程组剖析 和 远程进程组剖析 部分。

摘要页面还包括以下元素:

  • 公告指示器:与用户界面中的其他位置一样,当此图标存在时,将鼠标悬停在图标上将 提供有关已生成公告的信息,包括消息、严重级别、 生成公告的时间以及(在集群环境中)生成公告的节点。与摘要表格中的所有列一样, 显示公告的此列也可以通过点击标题进行排序, 以便将所有当前存在的公告显示在列表顶部。

  • 详情:点击详情图标将向用户提供该组件的详细信息。此对话框与 用户右键点击组件并选择"查看配置"菜单项时提供的对话框相同。

  • 转到:点击此按钮将关闭摘要页面并直接带用户到 Lynxus 画布上的组件。这 可能会更改用户当前所在的流程组。如果摘要页面已在新浏览器选项卡或窗口中打开 (通过点击"弹出"按钮,如下所述),则此图标不可用。

  • 状态历史:点击状态历史图标将打开一个新对话框,显示为此组件呈现的统计信息的历史视图。 有关更多信息,请参见 组件的历史统计 部分。

  • 刷新:"刷新"按钮允许用户刷新显示的信息,而无需关闭对话框并重新打开。 信息上次刷新的时间显示在"刷新"按钮的右侧。 页面上的信息不会自动刷新。

  • 筛选器:筛选器元素允许用户通过输入部分或全部条件来筛选摘要表格的内容, 例如处理器类型或处理器名称。可用的筛选器类型根据所选选项卡而不同。 例如,如果查看处理器选项卡,用户可以按名称或类型筛选。 查看连接选项卡时,用户可以按源、名称或目标名称筛选。 当文本框的内容更改时,筛选器会自动应用。 文本框下方有一个指示器,显示表格中有多少条目与筛选器匹配以及表格中有多少条目。

  • 弹出:在监控数据流时,能够在单独的浏览器选项卡或窗口中打开摘要表格会很有帮助。 "关闭"按钮旁边的"弹出"按钮将使整个摘要对话框在新的浏览器选项卡或窗口中打开 (取决于浏览器的配置)。页面"弹出"后,对话框将在原始浏览器选项卡/窗口中关闭。 在新的选项卡/窗口中,"弹出"按钮和"转到"按钮将不再可用。

  • 系统诊断:系统诊断窗口提供有关系统在系统资源利用方面性能的信息。 虽然这主要面向管理员,但在此视图中提供是因为它确实提供了系统的摘要。 此对话框显示 CPU 利用率、磁盘满度以及 Java 特定指标(如内存大小和利用率) 以及垃圾回收信息等信息。

组件的历史统计

虽然摘要表格和画布显示与组件在过去五分钟内的性能相关的数字统计信息,但通常也有必要查看历史统计信息。此信息可通过右键点击组件并选择"查看状态历史"菜单选项或在摘要页面中点击状态历史来获取(有关更多信息,请参见 摘要页面)。

存储的历史信息量可在 Lynxus 属性中配置,默认为 24 hours。有关具体配置信息,请参考 系统管理员指南 中的组件状态存储库。打开状态历史对话框后,它会提供历史统计信息的图表:

状态历史

对话框的左侧提供有关统计信息对应的组件的信息,以及正在绘制的统计信息的文本表示。左侧提供以下信息:

  • Id:显示统计信息的组件的 ID。

  • Group Id:组件所在的流程组的 ID。

  • Name:显示统计信息的组件的名称。

  • 组件特定条目:为每种不同类型的组件显示信息。例如,对于处理器,显示处理器的类型。 对于连接,显示源和目标名称及 ID。

  • 开始:图表上显示的最早时间。这是一个可选值,提供用户对多少历史数据感兴趣的常见选项。 随着数据的支持,选项变为可用,但"全部"选项始终可用。当选择"全部"时,它指定图表中的最早时间将是所有可用数据的开始。 其他选项仅在数据可用时提供,指定过去 N 时间量 (5 分钟、10 分钟、30 分钟、1 小时)。

  • 结束:图表上显示的最晚时间。

  • 最小/最大/平均:显示最小值、最大值和平均值(算术平均值)。这些值仅基于 所选的时间范围(如果选择了任何时间范围)。如果此 Lynxus 实例是集群模式, 这些值将显示整个集群以及每个单独节点的值。在集群环境中,每个节点以不同颜色显示。 这也作为图表的图例,显示图表中每个节点的颜色。 将鼠标悬停在图例中的集群或某个节点上也会使图表中相应的节点加粗。

对话框的右侧提供一个下拉列表,用于选择要在下方图表中呈现的不同类型的指标。顶部图表较大,以便提供更易于阅读的信息呈现。在此图表的右下角有一个小手柄(调整大小),可以拖动来调整图表大小。对话框的空白区域也可以拖动以移动整个对话框。

底部图表较短,提供选择时间范围的功能。在此处选择时间范围将使顶部图表仅显示所选的时间范围,但以更详细的方式显示。此外,这将导致左侧的最小/最大/平均值被重新计算。通过在图表上拖动矩形创建选择后,双击所选部分将使选择在垂直方向上完全展开(即,它将选择此时间范围内的所有值)。在底部图表上点击而不拖动将移除选择。

数据流版本控制

当 Lynxus 连接到 Lynxus Registry 时,可以在进程组级别对数据流进行版本控制。有关 Lynxus Registry 使用和配置的更多信息,请参阅文档:https://lynxus.acal.org.cn/docs/lynxus-registry-docs/index.html。

连接到 Lynxus Registry

要将 Lynxus 连接到注册表,请从全局菜单中选择"控制器设置"。

全局菜单 - 控制器设置

这将显示 Lynxus 设置窗口。选择"注册表客户端"选项卡,然后点击右上角的 + 按钮以注册新的注册表客户端。

注册表客户端选项卡

在"添加注册表客户端"窗口中,提供名称、选择类型并添加描述(如果需要)。

添加注册表客户端对话框

点击"添加"。

注册表客户端已添加

添加注册表客户端后,数据流管理员可以通过点击最右列中的"编辑"按钮(编辑按钮)来配置它。当数据流管理员点击"编辑"按钮时,将打开编辑注册表客户端窗口。它有两个选项卡:设置和属性。"设置"选项卡提供了一个编辑注册表客户端名称的位置。它还列出了 UUID、类型,并提供了一个开放文本字段来编辑或添加描述。

注册表客户端设置

"属性"选项卡列出了可以为客户端配置的各种属性。数据流管理员可以将鼠标悬停在问号图标上以查看有关每个属性的更多信息。

配置注册表客户端属性

配置注册表客户端后,点击"更新"保存配置并关闭窗口,或点击"取消"放弃更改并关闭窗口。

版本化流程存储在注册表存储桶中并由其组织。由注册表管理员配置的存储桶策略和特殊权限决定了用户可以从哪些存储桶导入版本化流程以及可以将版本化流程保存到哪些存储桶。有关存储桶策略和特殊权限的信息可以在 Lynxus 注册表用户指南中找到(https://lynxus.acal.org.cn/docs/lynxus-registry-docs/html/user-guide.html)。

版本状态

版本化进程组存在以下状态:

  • 最新 最新:流版本是最新的。

  • 本地已修改 本地已修改:已进行本地更改。

  • 过时 过时:有更新版本的流可用。

  • 本地已修改且过时 本地已修改且过时:已进行本地更改,并且有更新版本的流可用。

  • 同步失败 同步失败:无法与注册表同步流。

版本状态信息显示在以下位置:

  1. 流程组名称旁边,用于版本化流程组本身。将鼠标悬停在状态图标上会显示有关版本化流程的附加信息。2. 流程组底部,用于流程组中包含的版本化流程。3. UI 顶部的状态栏中,用于根流程组中包含的版本化流程。

版本状态显示

版本状态信息也显示在摘要页面的"进程组"选项卡中。

摘要页面中的版本状态
要查看最新的版本状态,可能需要右键点击 Lynxus 画布并从上下文菜单中选择’刷新'。

导入版本化流程

当 Lynxus 实例连接到注册表时,"导入"链接将出现在"添加进程组"对话框中。

导入进程组

选择该链接将打开"导入版本"对话框。

导入版本对话框

已连接的注册表将作为选项出现在"注册表"下拉菜单中。对于所选注册表,用户有权访问的存储桶将作为选项出现在"存储桶"下拉菜单中。所选存储桶中的流程名称将作为选项出现在"名称"下拉菜单中。选择要导入的流程的所需版本,然后选择"导入"以将数据流放置在画布上。

导入还提供基于名称保留或替换现有参数上下文的选项。保留参数上下文(这是默认行为)将在同名上下文已存在时使用现有上下文,从而在多个导入之间共享参数集。

取消选中"保留现有参数上下文"复选框将为导入创建一组新的参数上下文,使其完全独立于现有导入。这些新上下文的参数值将根据注册表快照的内容设置。

版本化流程已导入

由于此示例中导入的版本是最新版本(MySQL CDC,版本 3),版本化流程组的状态为"最新"(最新图标)。如果导入的是较早版本,状态将为"过时"(过时图标)。

启动版本控制

要将流程组置于版本控制之下,右键点击流程组,然后在上下文菜单中选择"版本→启动版本控制"。

启动版本控制

在"保存流程版本"窗口中,选择注册表和存储桶,并为流程输入名称。如果需要,为描述和备注字段添加内容。

保存流程版本对话框

选择"保存",流程的版本 1 即被保存。

版本化进程组

作为流程的第一个和最新版本,版本化流程组的状态为"最新"(最新图标)。

根流程组不能置于版本控制之下。

管理本地更改

当对版本化流程组进行更改时,组件的状态更新为"本地已修改"(本地已修改图标)。数据流管理员可以显示、还原或提交本地更改。右键点击流程组时,这些选项可在上下文菜单中选择:

本地更改 - 已选择进程组

或在流程组内部的画布上右键点击时:

进程组内部的本地更改

以下操作不被视为本地更改:

  • 停止/启动处理器

  • 修改敏感属性值

  • 修改远程流程组 URL

  • 将引用不存在控制器服务的处理器更新为引用外部可用的控制器服务

  • 分配、创建、修改或删除参数上下文

分配或创建参数上下文不会触发本地更改,因为分配或创建参数上下文本身并未更改流程处理的内容。必须创建或修改使用参数上下文中参数的组件,才会触发本地更改。修改参数上下文不会触发本地更改,因为参数旨在在每个环境中不同。当导入版本化流程时,假设需要一次性操作来设置特定于给定环境的参数。删除参数上下文不会触发本地更改,因为引用该参数上下文中参数的任何组件都需要修改,这将触发本地更改。

显示本地更改

可以通过从上下文菜单中选择"版本→显示本地更改"在"显示本地更改"对话框中查看对版本化流程组所做的本地更改。

显示本地更改对话框

您可以通过选择行中的"转到"图标(转到)导航到组件。

如 管理本地更改 部分所述,哪些操作是可审查的本地更改存在例外情况。此外,对同一属性的多次更改在列表中只会显示为一个更改,因为更改是通过比较流程组的当前状态和"显示本地更改"对话框中记录的保存版本来确定的。

还原本地更改

通过从上下文菜单中选择"版本→还原本地更改"来还原对版本化流程组所做的本地更改。"还原本地更改"对话框显示本地更改列表,供数据流管理员在启动还原之前审查和考虑。选择"还原"以移除所有更改。

还原本地更改对话框

您可以通过选择行中的"转到"图标(转到)导航到组件。

如 管理本地更改 部分所述,哪些操作是可还原的本地更改存在例外情况。此外,对同一属性的多次更改在列表中只会显示为一个更改,因为更改是通过比较流程组的当前状态和"还原本地更改"对话框中记录的保存版本来确定的。

提交本地更改

要提交并保存流程版本,请从上下文菜单中选择"版本→提交本地更改"。在"保存流程版本"对话框中,如果需要,添加备注并选择"保存"。

保存流程版本提交

如果已修改的版本不是最新版本,则无法提交本地更改。在这种情况下,版本状态为"本地已修改且过时"(本地已修改且过时)。

更改版本

要更改流程的版本,右键点击版本化流程组并选择"版本→更改版本"。

更改版本

在"更改版本"对话框中,选择所需版本并选择"更改":

更改版本对话框

流程的版本被更改:

流程版本已更改

在所示示例中,版本化流程从较旧版本升级到较新的最新版本。但是,版本化流程也可以回滚到较旧版本。

要使"更改版本"成为可用选择,需要先还原对流程组的本地更改。

停止版本控制

要停止流程的版本控制,右键点击版本化流程组并选择"版本→停止版本控制":

停止版本控制

在"停止版本控制"对话框中,选择"断开连接"。

停止版本控制对话框

确认将流程组从版本控制中移除。

断开连接确认对话框

进程组上的版本控制已停止

嵌套版本化流程

版本化流程组可以包含其他版本化流程组。但是,如果父流程组包含也有本地更改的子流程组,则无法还原或保存父流程组的本地更改。必须先还原子流程组或提交其更改,然后才能对父流程组执行这些操作。

版本化流程中的参数

当将版本化流程导出到 Flow 注册表时,会发送每个存储的流程组的参数上下文名称。参数(名称、描述、值、是否敏感)也会与流程一起存储。但是,敏感参数值不会被存储。

当导入版本化流程时,将为 Lynxus 实例中不存在的每个参数上下文创建一个。当从 Flow 注册表导入版本化流程时,如果 Lynxus 有同名的参数上下文,则值将被合并,如以下示例所述:

一个流程有一个参数上下文"PC1",其中包含以下参数:

PC1 参数

该流程被导出并保存到 Flow 注册表。

一个 Lynxus 实例有一个同样名为"PC1"的参数上下文,其中包含以下参数:

Lynxus PC1 参数

版本化流程被导入到 Lynxus 实例中。参数上下文"PC1"现在具有以下参数:

新的 Lynxus PC1 参数

"Letters"参数在 Lynxus 实例中不存在,被添加了。"Numbers"参数在版本化流程和 Lynxus 实例中都存在且值相同,因此未做任何更改。"Password"是一个 Lynxus 实例中缺少的敏感参数,因此被添加但没有值。"Port"在 Lynxus 实例中存在但值与版本化流程不同,因此其值保持不变。

更改流程版本时,参数上下文的处理方式类似。请考虑以下两个示例:

如果将前面引用的版本化流程更改为另一个版本(版本 2),并且版本 2 的参数上下文"PC1"有一个"Colors"参数,则"Colors"将被添加到 Lynxus 实例中的"PC1"。

流程的版本 1 没有关联的参数上下文。新版本(版本 2)有。当流程从版本 1 更改为版本 2 时,会发生以下情况之一:

  • 如果参数上下文不存在,则创建新的参数上下文

  • 将现有参数上下文按名称分配给流程组,并合并参数上下文的值

版本化流程中的受限组件

要导入版本化流程或还原版本化流程中的本地更改,用户必须有权访问版本化流程中的所有组件。因此,如果要在版本化流程中使用受限组件,建议在根流程组级别创建它们。让我们通过一些示例来说明此配置的好处。假设以下条件:

  • 有两个用户"sys_admin"和"test_user",他们有权查看和修改根流程组。

  • "sys_admin"有权访问所有受限组件。

    系统管理员受限组件访问策略
  • "test_user"有权访问需要"read filesystem"和"write filesystem"的受限组件。

    image::test_user-restricted-component-read-filesystem.png["测试用户受限组件读取文件系统"]+ image::test_user-restricted-component-write-filesystem.png["测试用户受限组件写入文件系统"]

在根进程组中创建的受限控制器服务

在第一个示例中,sys_admin 在根流程组级别创建了一个 KeytabCredentialsService 控制器服务。

KeytabCredentialsService 控制器服务 RPG 级别

KeytabCredentialService 控制器服务是一个需要"access keytab"权限的受限组件:

KeytabCredentialService 所需权限

Sys_admin 创建了一个包含 GetFile 和 PutHDFS 处理器的流程的进程组 ABC:

受限组件流程

GetFile 处理器是一个需要"write filesystem"和"read filesystem"权限的受限组件:

GetFile 所需权限

PutHDFS 是一个需要"write filesystem"权限的受限组件:

PutHDFS 所需权限

PutHDFS 处理器配置为使用根流程组级别的 KeytabCredentialsService 控制器服务:

PutHDFS 属性

Sys_admin 将流程组保存为版本化流程:

ABC 版本化流程

Test_user 通过移除 KeytabCredentialsService 控制器服务来更改流程:

PutHDFS 无 Kerberos CS

如果 test_user 选择还原此更改:

Test_user 还原本地更改

还原本成功:

还原本地更改成功

此外,如果 test_user 选择导入 ABC 版本化流程:

测试用户导入流程

导入成功:

测试用户导入成功

在进程组中创建的受限控制器服务

现在,考虑第二种场景,其中控制器服务在流程组级别创建。

Sys_admin 创建了一个进程组 XYZ:

XYZ 进程组

Sys_admin 在流程组级别创建了一个 KeytabCredentialsService 控制器服务:

KeytabCredentialsService 控制器服务 PG 级别

在流程组中创建了相同的 GetFile 和 PutHDFS 流程:

XYZ 版本化流程

但是,PutHDFS 现在引用流程组级别的控制器服务:

PutHDFS 属性

Sys_admin 将流程组保存为版本化流程。

Test_user 通过移除 KeytabCredentialsService 控制器服务来更改流程。但是,使用此配置,如果 test_user 尝试还原此更改:

测试用户还原本地更改

还原不成功,因为 test_user 没有 KeytabCredentialService 控制器服务所需的"access keytab"权限:

还原本地更改失败

类似地,如果 test_user 尝试导入 XYZ 版本化流程:

测试用户导入流程

导入失败:

XYZ 导入失败

数据溯源

在监控数据流时,用户经常需要一种方法来确定特定数据对象(FlowFile)发生了什么。Lynxus 的数据溯源页面提供了该信息。因为 Lynxus 在对象流经系统时记录和索引数据溯源详情,用户可以执行搜索、进行故障排除并实时评估数据流合规性和优化等事项。默认情况下,Lynxus 每五分钟更新一次此信息,但这是可配置的。

要访问数据溯源页面,请从全局菜单中选择"数据溯源"。这将打开一个对话框窗口,允许用户查看最新的可用数据溯源信息、搜索特定项目以及筛选搜索结果。还可以打开额外的对话框窗口来查看事件详情、在数据流内的任意点重放数据,以及查看数据血缘(即数据在流中的路径)的图形表示。(这些功能在下方有详细描述。)

当启用授权时,访问数据溯源信息需要"查询溯源"全局策略以及生成事件的组件的"查看溯源"组件策略。此外,访问包含 FlowFile 属性和内容的事件详情需要生成事件的组件的"查看数据"组件策略。

溯源表

溯源事件

数据流中 FlowFile 以某种方式被处理的每个点都被视为一个"溯源事件"。根据数据流设计,会发生各种类型的溯源事件。例如,当数据被引入流时,会发生 RECEIVE 事件;当数据被发送出流时,会发生 SEND 事件。还可能发生其他类型的处理事件,例如数据被克隆(CLONE 事件)、路由(ROUTE 事件)、修改(CONTENT_MODIFIED 或 ATTRIBUTES_MODIFIED 事件)、拆分(FORK 事件)、与其他数据对象合并(JOIN 事件),以及最终从流中移除(DROP 事件)。

溯源事件类型如下:

溯源事件 描述

ADDINFO

指示添加额外信息(如新的 URI 或 UUID 链接)时的溯源事件

ATTRIBUTES_MODIFIED

指示 FlowFile 的属性以某种方式被修改

CLONE

指示 FlowFile 是其父 FlowFile 的精确副本

CONTENT_MODIFIED

指示 FlowFile 的内容以某种方式被修改

CREATE

指示 FlowFile 是从未从远程系统或外部进程接收的数据生成的

DOWNLOAD

指示 FlowFile 的内容被用户或外部实体下载

DROP

指示对象生命周期结束的溯源事件,原因不是对象过期

EXPIRE

指示对象因未及时被处理而导致生命周期结束的溯源事件

FETCH

指示 FlowFile 的内容被某个外部资源的内容覆盖

FORK

指示一个或多个 FlowFile 从父 FlowFile 派生

JOIN

指示单个 FlowFile 从多个父 FlowFile 合并而来

RECEIVE

指示从外部进程接收数据的溯源事件

REMOTE_INVOCATION

指示向外部端点请求了远程调用(例如,删除远程资源)

REPLAY

指示重放 FlowFile 的溯源事件

ROUTE

指示 FlowFile 被路由到指定关系,并提供有关 FlowFile 为何被路由到该关系的信息

SEND

指示向外部进程发送数据的溯源事件

UPLOAD

指示将外部数据上传到外部系统的溯源事件

UNKNOWN

指示溯源事件类型未知,因为尝试访问事件的用户无权知道该类型

搜索事件

在数据溯源页面最常见的任务之一是搜索给定的 FlowFile 以确定发生了什么。要执行此操作,请点击数据溯源页面右上角的"搜索"按钮。这将打开一个对话框窗口,其中包含用户可以定义的搜索参数。参数包括感兴趣的处理事件、关于 FlowFile 或生成事件的组件的特征、搜索的时间范围以及 FlowFile 的大小。

搜索事件

例如,要确定是否收到了特定 FlowFile,请搜索"RECEIVE"的事件类型并包含FlowFile 的标识符(如其 uuid 或文件名)。星号(*)可用作任意数量字符的通配符。因此,要确定文件名中任何位置包含"ABC"的 FlowFile 是否在 2016 年 7 月 29 日的任何时间被接收,可以执行以下图片中显示的搜索:

搜索 RECEIVE 事件

如果需要所有文件名中不包含"ABC"的文件名,请在执行搜索之前点击此条目下方标有"从搜索结果中排除"的复选框。

事件详情

在数据溯源页面的最左列,每个事件都有一个"查看详情"图标(详情)。点击此按钮将打开一个包含三个选项卡的对话框窗口:详情、属性和内容。

事件详情

"详情"选项卡显示有关事件的各种详细信息,如何时发生、事件类型以及生成事件的组件。显示的信息将根据事件类型而有所不同。此选项卡还显示有关已处理 FlowFile 的信息。除了显示在"详情"选项卡左侧的 FlowFile 的 UUID 之外,与该 FlowFile 相关的任何父 FlowFile 或子 FlowFile 的 UUID显示在"详情"选项卡的右侧。

"属性"选项卡显示在流程中该时间点 FlowFile 上存在的属性。为了仅查看由于处理事件而修改的属性,用户可以选择"属性"选项卡右上角的"仅显示已修改"旁边的复选框。

事件属性

重放 FlowFile

数据流管理员可能需要在数据流的某个时刻检查 FlowFile 的内容,以确保其按预期处理。如果处理不正确,数据流管理员可能需要调整数据流并重新播放 FlowFile。这可以通过"查看详情"对话框窗口的"内容"选项卡来实现。"内容"选项卡显示有关 FlowFile 内容的信息,如其在内容存储库中的位置及其大小。此外,用户可以点击"下载"按钮下载 FlowFile 内容在流程中该时间点的副本。用户还可以点击"提交"按钮在流程中的该时间点重新播放 FlowFile。点击"提交"后,FlowFile 被发送到为生成此处理事件的组件提供数据的连接。

当用户开发数据流时,能够轻松访问重新播放 FlowFile 也非常有益。例如,用户可以配置一个处理器,运行一个 FlowFile 通过它,然后发现配置需要修改。然后用户可以更新配置,并再次运行相同的 FlowFile 来验证结果。为了简化此过程,用户可以右键点击处理器并选择"重放最后一个事件"项。从这里,用户可以选择仅从主节点或从所有节点重放最后一个事件。

事件内容

查看 FlowFile 血缘

查看 FlowFile 在数据流中经历的血缘或路径的图形表示通常很有用。要查看 FlowFile 的血缘,请点击数据溯源表最右列中的"显示血缘"图标(显示血缘)。这将打开一个图表,显示 FlowFile(FlowFile)和已发生的各种处理事件。所选事件将以红色突出显示。可以右键点击或双击任何事件以查看该事件的详细信息(请参见 事件详情)。要查看血缘随时间的演变,请点击窗口左下角的滑块并向左移动以查看数据流早期阶段的血缘状态。

血缘图

查找父事件

有时,用户可能需要追踪另一个 FlowFile 从中产生的原始 FlowFile。例如,当发生 FORK 或 CLONE 事件时,Lynxus 会跟踪产生其他 FlowFile 的父 FlowFile,并且可以在血缘中找到该父 FlowFile。右键点击血缘图中的事件并从上下文菜单中选择"查找父事件"。

查找父事件

选择"查找父事件"后,图表将重新绘制以显示父 FlowFile 及其血缘以及子 FlowFile 及其血缘。

已找到父事件

展开事件

与查找父 FlowFile 类似,用户可能还想确定从给定 FlowFile 产生了哪些子 FlowFile。为此,右键点击血缘图中的事件并从上下文菜单中选择"展开"。

展开事件

选择"展开"后,图表将重新绘制以显示子 FlowFile 及其血缘。

已展开事件

预写溯源仓库

预写溯源仓库提供默认实现。

系统属性

默认值是为持久化溯源配置选择的。使用预写配置时应注意以下例外和建议:

  • lynxus.provenance.repository.journal.count 与预写配置无关

  • lynxus.provenance.repository.concurrent.merge.threads 和 lynxus.provenance.repository.warm.cache.frequency 是新属性。线程的默认值 2 和频率的空白(即禁用)应适用于大多数安装。

  • 将 lynxus.provenance.repository.max.storage.time(默认值 24 hours)和 lynxus.provenance.repository.max.storage.size(默认值 1 GB)的设置更改为更适合生产环境的值

  • 将 lynxus.provenance.repository.index.shard.size 从默认值 500 MB 更改为 4 GB

  • 将 lynxus.provenance.repository.index.threads 从默认值 2 更改为 4 或 8,因为预写存储库使其能够更好地扩展

  • 如果处理大量事件,将 lynxus.provenance.repository.rollover.size 从默认值 100 MB 更改为 1 GB

完成这些属性更改后,重新启动 Lynxus。

注意: 有关这些属性的详细描述可在 系统属性 中找到。

NoOp 溯源仓库

NoOp 溯源存储库不存储任何溯源事件。当溯源跟踪被禁用或最小化时(例如在测试期间或在资源受限的环境中),这很有用。使用此实现时,不会持久化溯源数据,所有查询和血缘请求都返回空结果。

NoOp Provenance Repository 实现:

  • 不保存任何事件或索引。

  • 始终为查询返回空结果。

  • 不执行血缘计算。

  • 专为测试或不需要溯源时设计。

要将 Lynxus 配置为使用 NoOp Provenance Repository,请在 lynxus.properties 中设置:

lynxus.provenance.repository.implementation=cn.org.acal.lynxus.provenance.NoOpProvenanceRepository

注意: 禁用溯源存储将禁用依赖溯源数据的功能,如血缘查询和事件搜索。

实验性功能警告

虽然所有 Apache 许可代码都是按"原样"提供的,"不附带任何保证或条件,无论是明示的还是暗示的"(参见 Apache License, Version 2.0),但 ACAL Lynxus 的某些功能可能被标记为*实验性*。实验性功能可能:

  • 经历的标准 Lynxus 功能测试较少

  • 与不稳定的外部依赖项交互

  • 可能会发生变化(任何公开的 API *不应*被视为受 语义化版本 的次要版本向后兼容性指南保护)

  • 可能导致数据丢失

  • 在出现问题时社区可能不直接提供支持

会尽一切努力在每个功能的基础上提供有关实验性警告性质的更详细和具体的信息。有关特定实验性功能的问题应发送至 ACAL Lynxus 开发者邮件列表。

其他管理功能

除了摘要页面、数据溯源页面和公告板页面之外,全局菜单中还有其他对数据流管理器有用的工具(参见Lynxus 用户界面)。选择"流配置历史"以查看对数据流所做的所有更改。历史记录有助于故障排除,例如,如果对数据流的最近更改导致了问题并需要修复。数据流管理器可以查看已做出的更改并根据需要调整流以修复问题。虽然 Lynxus 没有"撤销"功能,但数据流管理器可以对数据流进行新的更改来修复问题。

选择"节点状态历史"以查看过去 24 小时或更长时间(如果状态存储库实现支持)的实例特定指标。如果实例运行时间少于配置的最大时间,则指标将在启动后的时间段内可用。状态历史可以帮助数据流管理器排查性能问题,并提供节点健康状况的总体视图。状态历史包括有关内存和磁盘使用情况、CPU 利用率以及垃圾回收的信息。

全局菜单中的另外两个工具是"控制器设置"和"用户"。控制器设置页面提供了设置应用程序可用最大线程数的功能。它还提供了选项卡,数据流管理器可以在其中添加和配置控制器服务和报告任务。用户页面用于管理用户访问权限,这在系统管理员指南中有描述。