NiFi学习笔记

目录

NiFi概念

NiFi是什么

Apache NiFi 包括以下功能

NIFI核心概念

NiFi架构

NiFi入门

常用术语

下载安装NiFi

启动和关闭NIFI

NIFI处理器

查看处理器

 常用处理器

配置处理器

其他组件

 应用场景

1.添加和配置第一个处理器GetFile

2.添加第二个处理器PutFile


NiFi概念

NiFi是什么

NiFi2006年由美国国家安全局(NSA)的Joe Witt创建,之后在2014年贡献给Apache社区,随后在2015 年成为Apache顶级项目之一。NiFi 是一个易于使用、功能强大而且可靠的流式数据处理和分发系统。NiFi 是为数据流设计,支持从多种数据源动态的拉取数据,并基于WEB图形界面,通过拖拽、连接、配置完成基于流程的编程,实现数据采集、处理等功能。目前,NiFi社区活跃度非常高,其中Cloudera是最大的贡献者,仅2020年就发布了7个版本。NiFi作为一个致力于数据对接的集成框架在物联网IOT和大数据领域得到很多公司的青睐。

Apache Nifi是一个易于使用,功能强大且可靠的系统,用于处理和分发数据。可以自动化管理系统间的数据流。它使用高度可配置的指示图来管理数据路由、转换和系统中介逻辑,支持从多种数据源动态拉取数据。NiEi原来是NSA的一个项目,目前已经代码开源,是Apache基金会的顶级项目之一。

NiFi是基于Java的,使用Maven支持包的构建管理。NiFi基于Web方式工作,后台在服务器上进行调度。用户可以将数据处理定义为一个流程,然后进行处理,NiEi后台具有数据处理引擎、任务调度等组件。

简单的说,NiFi就是为了解决不同系统间数据自动流通问题而建立的。

虽然dataflow这个术语在各种场景都有被使用,但我们在这里使用它来表示不同系统间的自动化的可管理的信息流。自企业拥有多个系统开始,一些系统会有数据生成,一些系统要消费数据,而不同系统之间数据的流通问题就出现了。这些问题出现的相应的解决方案已经被广泛的研究和讨论,其中企业集成eip就是一个全面且易于使用的方案。

NiFi可以解决:

1、系统故障导致调度失败的问题(高可用)

2、解决高并发而导致的流程问题(高性能、高并发)

3、提示错误数据(错误纠察)

4、对于现实业务的变更可以快速的响应

5、对于不同数据之间的格式都可以兼容

6、方便在测试环境和成产环境当中迁移

Apache NiFi 包括以下功能

1、基于浏览器的用户界面

        设计、控制、反馈和监控的无缝体验

2、数据来源跟踪

        从头到尾完整的信息谱系

3、广泛的配置

        防损且有保证的交付

        低延迟和高吞吐量

        动态优先级

        流配置的运行时修改

        背压控制

4、可扩展设计

        定制处理器和服务的组件架构

        快速开发和迭代测试

5、安全通信

        具有可配置身份验证策略的 HTTPS

        多租户授权和策略管理

        用于加密通信的标准协议,包括 TLS 和 SSH

NIFI核心概念

NiFi的基本设计概念与基于流程的编程fbp(Flow Based Programing)的主要思想密切相关。以下是一些主要的NiFi概念以及与FBP的关系:

NIFI术语FBP Term描述
FlowFile(流文件)信息包lnformationPacketFlowFile表示在系统中移动的每个对象,对于每个FlowFile,NIFI都会记录它—个属性键值对和0个或多个字节内容(FlowFile有attribute(属性)和content(内容))。

FlowFile

Processor(处理器)

Black Box(黑盒)

实际上是处理器起主要作用。在eip术语中,处理器就是不同系统间的数据路由,数据转换或者数据中介的组合。处理器可以访问给定FlowFile的属性及其内容。处理器可以对给定工作单元中的零或多个流文件进行操作,并提交该工作或回滚该工作。
Connection(连接)

BoundedBuffer(缓冲区)

Connections用来连接处理器。它们充当队列并允许各种进程以不同的速率进行交互。这些队列可以动态地对进程优先级排序,并且可以在负载上设置上限,从而启用背压。
FlowController(流控制器)Scheduler(调度器)流控制器维护流程如何连接,并管理和分配所有流程使用的线程。流控制器充当代理,促进处理器之间流文件的交换。
ProcessGroup(处理组)subnet(分支网络)进程组里是一组特定的流程和连接,可以通过输入端口接收数据并通过输出端口发送数据,这样我们在进程组里简单地组合组件,就可以得到一个全新功能的组件(Process Group)。|

1.FlowFile

        attribute、 content

2. FlowFile Processor

        处理FlowFile,及逆行逻辑判断、路由、转换等操作。

3. Connection

        连接处理器。连接不同的Processor,充当队列的角色。

4.Flow Controller

        代理角色,调度促进处理器流文件的交换。

5. Process Group

        包含了一组特定的Processor和connection,组和组之间也可以进行连接和传输,组成新的大组。

NiFi架构

1、Web Server(网络服务器)

web服务器的目的是承载NiFi基于http的命令和控制APl。

2、Flow controller(流控制器)

是整个操作的核心,为将要运行的组件提供线程,管理调度。

3、Extensions(扩展)

有各种类型的NIFl扩展,这些扩展在其他文档中进行了描述。这里的关键点是NIFI扩展在JVM中操作和执行。

4、FlowFile Repository(流文件存储库)

对于给定一个流中正在活动的FlowFile,FlowFile Repository就是NIFI保持跟踪这个FlowFile状态的地方。FlowFile Repository的实现是可插拔的(多种选择,可配置,甚至可以自己实现),默认实现是使用Write-Ahead Log技术(WAL的核心思想是:在数据写入库之前,先写入到日志,再将日志记录变更到存储器中)写到指定磁盘目录。

5、Content Repository(内容存储库)

Content Repository是给定FlowFile的实际内容字节存储的地方。Content Repository的实现是可插拔的。默认方法是一种相当简单的机制,它将数据块存储在文件系统中。可以指定多个文件系统存储位置,以便获得不同的物理分区以减少任何单个卷上的争用。(所以环境最佳实践时可配置多个目录,挂载不同磁盘,提高lO)

6、Provenance Repository(源头存储库)

Provenance Repository是存储所有事件数据的地方。Provenance Repository的实现是可插拔的,默认实现是使用一个或多个物理磁盘卷。在每个位置内的事件数据都是被索引并可搜索的。

NiFi结构总结:

  • WEB服务器承载http请求和controllerAPI接口服务
  • 流控制器(FlowController)管理调度,提供线程
  • Extensions(扩展)基于JVM运行,使用Java来进行扩展
  • FlowFile Reponsitory  FlowFile状态数据
  • Content Reponsitory   FlowFile内容数据
  • Provenance Reponsitory(源头存储库,事件存储库)事件数据

NiFi入门

常用术语

FlowFile: 每条"用户数据”(即用户带进NiFi的需要进行处理和分发的数据)称为FlowFile。FlowFile由两部分组成: Attributes(属性)和Content(内容)。Content是用户数据本身。Attributes是与用户数据关联的键值对。
Processor:处理器,是NiFi组件,负责创建,发送,接收,转换,路由,拆分;合并和处理FlawFiles。它是NiFi用户可用于构建其数据流的最重要的构建块。

下载安装NiFi

1、准备环境

Apache nifi即可运行在Windows平台,也可运行在Linux平台,需要安装jdk (nifi.1.x以上需要idk8以上,0.x需要jdk7以上)和maven(至少3.1.0以上版本)。

2、下载地址

Index of /dist/nifi/1.12.0

3、下载完成后使用Xftp工具将压缩包上传到Linux中并解压

tar -zcvf xxx.tar.gz 文件名  -C目录

4、修改nifi默认端口

同—系统启动多个服务时,避免端口冲突,建议修改默认端口

配置文件位置: /nifi/conf/nifi.properties

启动和关闭NIFI

后台运行:进入到nifi/bin目录下执行  ./nifi.sh start(常用)

前台运行:进入到nifi/bin目录下执行  ./nifi.sh run

查看nifi运行状态: ./nifi.sh status

关闭nifi:./nifi.sh stop

启动后访问:服务器IP:58080/nifi         进行查看,访问界面如下

查看nifi日志

日志目录:nifi/logs

命令:cd logs && tail -f nifi-app.log

NIFI处理器

查看处理器

1、选择处理器组件

 2、弹出窗口显示的就是所有处理器

 常用处理器

ExecuteScript:执行脚本处理器,支持: clojure, ecmascript, groovy, lua, python, ruby。

QueryDatabaseTable:数据库查询处理器,支持 mysql。

ConvertAvroToJSON: avro数据格式转换为json。

SplitJson:将JSON文件拆分为多个单独的FlowFiles,用于由sonPath表达式指定的数组元素。

EvaluateJsonPath:根据FlowFile的内容评估一个或多个lsonPath表达式。这些表达式的结果将分配给FlowFile属性,或者写入FlowFile本身的内容,具体取决于处理器的配置。

ReplaceText:文本组装与替换,支持正则表达式。

PutHDFS:将FlowFile数据写入Hadoop分布式文件系统(HDFS)。

PutHiveQL:执行hive ddl/dml命令,如: insert, update。

PublishKafka_2_0:根据配置将消息发送到kafka topic。

SelectHiveQL:执行hive select语句并获取结果。

PutSQL:执行SQL的insert或update命令。

GetFile:从目录中的文件创建FlowEiles。

PutFile:将FlowFile数据写入文件。

GetHDFS:从Hadoop分布式文件系统获取文件。

CaptureChangeMysQL: 从MySQL数据库中检索更改数据捕获(CDC)事件。CDC事件包括INSERT,UPDATE,DELETE操作。事件作为单个流文件输出,这些文件按操作发生的时间排序。

ExecuteStreamCommand:一般用于执行sh脚本。

配置处理器

1、添加一个处理器,以GetFile为例

 2、处理器配置说明

        右键要配置的处理器,会弹出配置项菜单,如下图

 3、选项说明

  • Configure(配置):此选项允许用户建立或更改处理器的配置。
  • Start(启动或停止)︰此选项允许用户启动或停止处理器;该选项可以是Start或Stop,具体取决于处理器的当前状态。
  • Disable(启用或禁用)︰此选项允许用户启用或启用处理器;该选项将为"启用"或"禁用"”,具体取决于处理器的当前状态。
  • View data provenance(查看数据来源)︰此选项显示NiFi数据来源表,其中包含有关通过该处理器路由FlowFiles的数据来源事件的信息。
  • View status history(查看状态历史记录)︰此选项打开处理器统计信息随时间的图形表示。
  • View usage(查看用法)︰此选项将用户带到处理器的使用文档。
  • View connection → Upstream(查看连接→上游)︰此选项允许用户查看和"跳转"入处理器的上游连接。当处理器连接进出其他进程组时,这尤其有用。
  • Centere in view(视图中心)∶此选项将画布的视图置于给定的处理器上。
  • Change color(更改颜色)︰此选项允许用户更改处理器的颜色,这可以使大流量的可视化管理更容易。
  • Group(添加到组):把当前处理器添加到组。
  • Create template(创建模板)︰此选项允许用户从所选处理器创建模板。
  • Copy(复制)︰此选项将所选处理器的副本放在剪贴板上,以便可以通过右键单击工作区并选择"粘贴"将其粘贴到工作区上的其他位置。复制粘贴操作也可以使用按键Ctrl-C和Ctrl-V完成。
  • Delete(删除):此选项允许从画布中删除处理器。

4、Configure(配置)

1)SETTING(设置)

2)SCHEDULING

3)PROPERTIES(属性)

4)COMMENTS(注释)

其他组件

1.数据流传入点(input-port)

 2.数据流输出点(output-port)

 3.组(process-group)

 4.远程组(remote process-group)

 5.聚合(funnel)

 6.模版(template)

 7.便签(label)

 8.导航(Navigate)

 

 9.操作区(Operate)

 

 

 应用场景

1.添加和配置第一个处理器GetFile

1.1添加处理器,选中处理器组件拖拽到工作区,搜索GetFile,点击Add

 1.2设置处理器名称,选中GetFile右键选择configure

 1.3设置GetFile Properties

 1.3.1GetFile属性说明

NameDefaultValueAllowableDescription
InputDirectory(输入目录)

要从中提取文件的输入目录

支持表达式语言:true(仅使用变量注册表进行评估)

File Filter(文件过滤器)[^.].*仅选择名称与给定正则表达式匹配的文件
Path Filter(路径过滤器)如果“递归子目录”为true,则仅扫描其路径与给定正则表达式匹配的子目录
Batch Size(批量大小)10每次迭代中提取的最大文件数
KeepSourceFile(保留源文件)flase

true

false

如果为true,则将文件复制到内容存储库后不会删除该文件;这会导致文件不断被拾取,对于测试目的很有用。如果没有保留原始Nifi,则需要从其提取目录中具有写权限,否则它将忽略该文件。

RecurseSubdirectories(递归子目录)

true

true

false

指示是否从子目录中提取文件
Pollinglnterval(轮询间隔)0 sec指示执行目录列表之前要等待多长时间
lgnore HiddenFiles(忽略隐藏文件)true

true

false

指示是否应忽略隐藏文件
Minimum FileAge(最小档案年龄)0 sec档案必须被拉出的最小年龄;小于此时间(根据上次修改日期)的任何文件将被忽略
Maximum FileAge(最长文件年龄)档案必须被拉出的最大年龄;任何超过此时间(根据上次修改日期)的文件将被忽略
Minimum FileSize(最小档案大小)0B档案必须达到的最小大小
Maximum FileSize(最大档案大小)可以拉出文件的最大大小

2.添加第二个处理器PutFile

2.1添加处理器

 2.2PutFile处理器属性说明

NameDefaultValueAllowableDescription
Directory(目录)

文件应写入的目录。您可以使用表达语言,例如/ aa / bb /$ {path}。

支持表达语言:true(将使用流文件属性和变量注册表进行评估)

ConflictResolutionStrategy(解决冲突策略)fail

replace

ignore

fail

指示当输出目录中已经存在同名文件时应该怎么办
CreateMissingDirectories(创建缺失目录)true

true

false

如果为true,则将创建缺少的目标目录。如果为false,则流文件将受到处罚并发送失败。
Maximum FileCount(最大文件数)指定输出目录中可以存在的最大文件数
Last ModifiedTime(上次修改时间)

将输出文件上的lastModifiedTime设置为此属性的值。

格式必须为yyyy-MM-dd'T'HH: mm: ssZ。您也可以使用表达式语言,例如${file.lastModifiedTime}。支持表达式语言: true(将使用流文件属性和变最注册表进行评估)

Permissions(权限)

将输出文件的权限设置为此属性的值。格式必须是带有-的UNIX rwxrwxrwx(代替拒绝的权限)(例如rw-r--r--)或八进制数(例如644)。您也可以使用表达式语言,例如${file.permissions}。

支持表达式语言: true(将使用流文件属性和变量注册表进行评估)

owner(所有者)

将输出文件的所有者设置为此属性的值。您也可以使用${file.owner}之类的表达语言。请注意,在许多操作系统上,Nifi必须以超级用户身份运行才能拥有设置文件所有者的权限。

支持表达式语言: true(将使用流文件属性和变量注册表进行评估)

Group(组)

将输出文件上的组设置为此属性的值。您也可以使用表达语言,例如$ {file.group}。

支持表达式语言:true(将使用流文件属性和变量注册表进行评估)

2.3创建写入文件目录

mkdir -p /export/tem/target

 2.4设置处理器属性

 2.5连接两个处理器

把GetFile处理器上的箭头 拉动到PutFile处理器上,弹出下图,点击ADD

2.6开启GetFile,右击点击statr

2.7新增输入文件

写完输入文件发现source文件夹下并没有刚才写的文件,是因为被GetFile读取到队列中了

2.8启动PutFIle

双击PutFile处理器,在settings下勾选上failure(失败)和success(成功)

右击PutFile处理器点击start启动

 因为刚才写的输入文件有两个名字一样,所以出现下面的报错

2.9覆盖写入

PutFile属性配置项中有一个ConflictResolutionStrategy(解决冲突策略),默认是fail,文件名重复报错,他还有三个可选的值,默认fail、replace(覆盖写入)、ignore(忽略)

2.10关闭处理器

 处理器的类别

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

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

数据转换

  1. CompressContent:压缩或解压。
  2. ConvertCharacterSet:将用于编码内容的字符集从一个字符集转换为另一个字符集 。
  3. EncryptContent:加密或解密。
  4. ReplaceText:使用正则表达式修改文本内容。
  5. TransformXml:应用XSLT转换XML内容。
  6.  JoltTransformJsON:应用JOLT规范来转换JSON内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有腰的嘟嘟嘟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值