[bigdata-015] apache nifi 官方文档摘要
1NIFI概览|NIFIOverView1.1NIFI是什么|Whatis Apache NIFINIFI的设计目标,是让各系统之间自动进行数据流交换。企业通常有多个系统,有的系统生产数据,有的系统消费数据。dataflow。 dataflow涉及到的主要问题: 系统失效:网络失效,硬盘失效,软件崩溃,操作人员犯错。 数据过多来不及处理: 数据边界问题:数据太大,太小,太快,太慢,格式错误,诸如此类。 噪声和信号标准不定:昨天的噪声可能在明天就是信号,所以要能快速创建新dataflow以及改变旧dataflow,拥抱变化。 系统间速率不同:各系统的协议和格式可能会改变,或者不兼容,分布式系统通常都是松散关系。 合规与安全:法律,规则,政策等的变动。商业协议变动。系统和系统之间,系统和用户之间,需要考虑安全,可信,可度量。 产品持续改进: dataflow问题的已有的有效解决方案:soa,the rist of the api(api economy),internet of things,大数据 1.2NIFI的核心概念|Thecore concepts of NIFINIFI的设计理念,非常接近flowbased programming(FBP). FlowFile:一个FlowFile表示一个对象,这个对象可以在系统之间进行移动,被传递。NIFI保存一个FlowFile的key-value的属性列表和这个FlowFile的字节内容。 FlowFileProcessor:Proccessor对FlowFile进行各种操作,它可以获取FlowFile的属性和内容,同时操作多个FlowFile,可以将操作结果提交给下一个Processor或者回滚。 Connection:它提供Processor之间连接。它的作用就像一个queue,各种processor和它进行交互。 FlowController:控制器,它记录processor之间的连接关系,管理线程,管理processor和线程之间的使用关系。是一个类似broker的角色。 Processgroup:它表示一组processor和它们之间的连接。对于这个group而言,它可以通过input端口和output端口,进行数据的接收和发送。 1.3NIFI 架构|NIFIArchitectureNIFI在jvm上执行。主要构件如下: webserver: 主要操作界面和控制api flowcontroller: 整个流程的大脑,提供线程运行extension,管理各种extension接受数据并执行 extension:NIFI有各种extension,实现不同的功能 flowFilerepository: NIFI跟踪FlowFile的状态和操作 contentrepository: NIFI记录FlowFile的内容,就是记录FlowFile在文件系统上的block ProvenanceRepository:存储所有的provenance(起源)事件数据,事件可以被索引和搜索。 NIFI可以部署成集群方式运行。 从NIFI1.0开始,实现了0-master集群策略。NIFI集群的每一个节点都能对数据的子集执行相同的操作,然后合并结果。 1.4NIFI的性能和特性|PerformanceExpectations and Characteristics of NIFINIFI的性能有host机器的能力决定,主要是cpu和硬盘。 io:常规服务器保守估计50M/s的读写,NIFI可能会达到100M/s或者更高。 cpu:重io的flow,可能会导致数十个线程并发。 内存:NIFI在jvm上,jvm的gc对NIFI影响很大 1.5高阶的NIFI关键特性|HighLevel Overview of Key NIFI Features本节提供NIFI的2万英尺的鸟瞰图。 1.5.1Flow Managerment确保数据发送成功:这是必须必须必须达到的。这通过有效使用基于目标的持久化提前写入log和contentrepostory实现的。 数据缓存:NIFI支持缓存queued数据。所以当queue达到上限的时候,或者age达到指定的时间的时候,会进行缓存。 优先队列:可以选择数据分别到达最老得,最新的,最大的,以及其他状况的队列。 数据流Qos:指定数据要在多少秒内处理或者发送,精确控制。 1.5.2Ease of Use命令可视化和控制可视化 流模板:一个成功的有效的模板可以快速推广到解决其他问题 DataProvenance数据源:NIFI对数据源进行自动记录,索引,跟踪。 恢复/记录回滚 1.5.3安全系统到系统 用户到系统 多租户认证 1.5.4可扩展架构扩展:NIFI的核心原则之一是可扩展。可进行扩展的组建包括processors,controller service,reporting taks,prioritezes,和customeruser interface. 类加载器隔离:NIFI的各实例之间的通讯协议是s2s。 1.5.5柔性scalingscale-out:NIFI单节点的性能是每秒处理百兆级数据,搭建NIFI集群可以提升到每秒处理G级别数据。 scale-up& down: 可以扩容和降容 2入门教程|GettingStarted with Apache NIFI2.1概述这个教程,是写给从来没有使用过NIFI的用户。详细的文档是UserGuide。 FlowFile:每一个piece的用户数据,是一个FlowFile,也就是NIFI要进行处理的原材料。一个FlowFile有两个部分,属性和内容。属性是一组kv对。内容就是FlowFile自身。 Processor:NIFI的组件,对FlowFile进行:创建,发送,接受,转换,路由,切分,融合等操作。这是最重要的NIFI组件。 启动NIFI:bin/NIFI.shstart NIFI的主界面:http://localhost:8080/NIFI 然后介绍了如何用NIFI搭建第一个例子,内容比较长但实际上简单,故省略。 2.2NIFI有哪些ProcessorDataTransformation: 压缩和解缩;content的字符集编码转换;加密解密;文本替换;XSLT转化到XML,JOLT到JSON Routing& Mediation: 数据流限速;检测重复数据;分布式负载;检测组件活跃性;基于属性的路由;属性扫描;基于内容路由;内容扫描;验证XML DatabaseAccess:JSON转SQL;执行SQL;PutSQL; 执行HiveSQL的select将结果写入avro或者csv的FlowFile;putHiveQL 属性抽取:JSONPath表达式(类似xpath);XPath; XQuery; 抽取文本;Hash属性;HashContent; 识别mime类型;更新属性 系统交互:执行process;执行流命令 数据获取:获取File;获取FTT,获取SFTP;获取JMS队列;获取JMStopic;获取HTTP;监听HTTP;监听UDP;获取HDFS;listHDFS/fetchHDFS; 获取S3;获取Kafka;获取Mongo;获取Twitter 数据Egress/发送数据:发送email;发送FIle;PutFtp;发送FTP、SFTP、JMS、SQL、Kafka、Mongo 分裂和聚合:分裂文本、json、xml、解压content、mergeContent、segmentContent、SplitContent HTTP:get,listen,invoke,post,处理httpresponse和request AmazonWeb Services: fetch s3,put s3,put sns,get sns,put sqs,deletesqls 2.3属性能做什么|WorkingWith Attributes每个FlowFile有多个属性。在FlowFile的整个生命周期,属性会发生变化。首先,NIFI可以根据FlowFile的属性变化做路由,也就是RouteOnAttribute;其次,有些processor根据FlowFile的属性做操作,比如putfile根据目录和文件名属性将数据存储到不同的地方;最后,属性提供了文件的额外信息,比如文件的源头是什么。 常用属性:filename,path,uuid,entryData(flowFile进入系统的时间,utc),lineageStartDate(这是一个utc时间,一个文件可能被各种操作拆分创建融合等操作成多个子文件,所有的子文件的这个值不变,它表示这些文件的最源头祖先进入系统的时间),filesize. 用户定义属性:可以给FlowFile添加用户自定义属性。 根据属性进行路由: 表达式语言/使用属性值:NIFI提供了expressionlanguage对属性进行灵活的操作,以便想FlowFile走到不同的processor。 2.4模板能做什么|WorkingWith TemplatesNIFI可以构建复杂的dataflow。要对某些复杂的dataflow进行复用,就形成了模板。模板可以视为可复用的sub-flow。 创建模板的步骤:选择若干个组建,点击创建模板图标,给模板起名字,点击创建。模板可以像processor一样拖拽使用。模板管理器进行管理模板。 2.5监控NIFI数据流过NIFI,你需要知道NIFI是否正常,流量是否合理,负载是否均衡。因此需要监控。 状态条statusbar: 在NIFI面板上面。 组建统计:每个组建都提供自己的统计信息,以便监控。统计五分钟数据,统计历史数据 Bulletins:用户可以通过分析log关注某些事件发生,如果出现了,以bulletinindicator的方式展现,在屏幕右上角 数据源dataprovenance:NIFI对处理的每一片数据都保持各种详细的处理记录。数据从前到后的各种操作都存放在provenancerepository。在全局菜单选择dataprovenance,能看到这些记录可以对这些记录和事件进行检索处理。也可以以跟踪的方式,沿着processor的时间线进行详细分析。 LineageGraph: 这个图可以显示一片数据从进入系统到执行各种操作已经产生的子数据的各种结果,类似一个famlilytree。 3NIFI用户指南|ApacheNIFI User Guide3.1介绍introductionNIFI是一个flow-basedprogramming的数据流系统。数据流有向图。NIFI的界面是web的。NIFI配置可控,比如容错-确保delivery,低延迟-高通过,优先权队列。数据源跟踪。 3.2术语介绍DataFlowmangager: 它是NIFI的用户,它的权限可以add,remove,mofify一个NIFI的组件。 FlowFile:前文已介绍 Processor:同上 Relationship关系:一个processor有0个或者多个关系。关系可命名,以表示处理FlowFile的结果。processor处理完一个dataflow之后,它就将flowFile传给下一个relationshep。 connection连接:连接,就是连接processor。它在dataflow的processor是可见的。它跟Relationship不同,relationship在processor里面设置。 controllerservice: 一个dataflow有多个processor,可能有若干个processor都需要配置ssl以便处理数据,逐个配置是重复的太麻烦,于是抽象出controllerservice,配置一次供所有组件使用。 reportingtask: 报表任务在后台运行,向用户提供运行统计信息。 Funnel:将若干个dataconnection合并成一个connection Processgroup: 将多个processor组合起来,成为一个相对独立的单元进行操作。 Prot:Processgroup跟外界的沟通渠道,必须要通过prot进行。 Remoteprocess group: 把数据从一个NIFI实例传递到另外一个NIFI实例。 Bulletin:前文已描述。 Template:同上 flow.xml.gz:用户在NIFI操作界面的任何操作,都是实时地写入到这个文件。这个文件在NIFI/conf目录。NIFI会自动创建它的备份文件。用户可以用备份文件恢复过去的设置--停止NIFI,解压备份文件,覆盖掉flow.xml.gz,然后重新启动NIFI。 3.3nif用户界面|NIFIUser Interface这一块在前文已经叙述。 3.4多租户认证登录界面|Accessingthe UI with Multi-Tenant Authorization所谓多租户认证,就是对用户进行分组,不同的组具有不同的权限。 Viewthe ui: 查看权限。 Accessingthe controller: 修改controller权限 queryprovenance: 查询provenance权限 ... 3.5创建DataFlow:Buildinga DataFlow这里有许多配置细节,各参数说明。这里的多个组件已经在前文叙述,不再重复。 3.6配置proceesor4个配置tab。 3.6.1settings Tab修改processor名字。 processor是否可用enabled。如果enabled=false,processor不能启动。 “Penaltyduration”: 处罚周期。举例:一个processor要把FlowFilepush给一个远程服务,但远程服务已经有了一个同名文件(也许是其他processor传来,也许是自己生成的),那么,processor就要对这个FlowFile进行penalty,比如,Penaltyduration=30s,就是30秒内processor不再对这个FlowFile做任何处理,过了30秒可以继续处理。 “Yieldduration”:比如,如果processor向一个远程服务推送数据,但远程服务没有任何反应,因此processor也就不能处理后续数据,它要等待远程服务的response,这就是它要在yield状态,yieldduration=10s,就是processor要维持这个状态10秒。 “bulletinlevel”:当Processor写log的时候,也会生成一个bulletin。这个参数表示哪个level的bulletin要在界面显示,默认是WARN。 “Auto-terminaterelationships”:为了有效运行,每个processor或者连接到下一个processor或者是auto-termated,否则永远没有终结。已经被连接到下一个组件的processor不能设置auto-terminated,必须先删除链接才能设置。如果一个FlowFile走到了auto-terminated组件,文件将处理后被删除,表示整个处理过程都完成了。 3.6.2Scheduling Tab设置processor如何运行,三种模式:比如说每十分钟运行一次;当某个事件发生的时候运行;Cron运行,类似定时运行,但提供了更强大的配置,年月日时分秒等。 3.6.3Properties Tab这里是配置processor的特定行为。没有默认属性。每种processor都要配置在usecase下的属性。比如说,对RouteOnAttribute来说,要配置Routing策略。这里有多种选项,比如Routeto property name。每个processor都有自己的属性,需要熟悉分别配置。也可以添加新属性,也就是用户定义属性。 有些processor有高级属性设置,比如updaeProcessor。 ContorllerServices这样的组件,有一些属性是指向其他processor的比如GetHTTP,也需要进行配置。 3.6.4Comments Tab添加注释。 3.7自定义属性和ExpressionLanguage表达式语言可以使用FlowFile的属性,系统属性,环境变量属性,用户自定义属性。 3.8Controller ServicesReportingtask,processor,以及其他服务,都可以使用Controllerservice定制的配置信息。 选择controllerservice。目前有12种。比如说,标准SSL服务,HBase客户端服务,AWS信任控制服务,分布式Map缓存服务等等。 3.9Reporting Tasks报告任务,报告各组建的统计信息,添加方式跟ControllerServices相似。 3.10Connecting Components在前文已经用到了。这里有个属性,如果FlowFile在若干时间内没有被处理,那么就删除掉,以免累计到系统溢出,在某些状态下,积累的数据没有用处。 另外,可以个connection做bending,双击连线,就有bendpoint,拖动图形更好看一点。 3.11Site-to-Stie协议将数据从一个NIFI实例传递到另一个NIFI实例,需要的是NIFTsite-to-site协议。这个协议要在RemoteProcess Group进行配置。比如,配置http代理。配置Inputport和Outputport。 3.12Example Dataflow本节演示构建dataflow的步骤。 3.13控制dataflow|Commandand Control of the DataFlow3.14模板模板可以创建,模板可以导入导出,模板可以实例化,可以删除。 3.15数据溯源|DataProvennace前文已述,不重复。 4NIFI的表达式语言|ApacheNIFI Expression Language Guide4.1NIFI表达的结构表达式形如${}。表达式可以包含FlowFile属性名,比如${filename}。 比如说,把文件名转成大写${filename:toUpper()},也可以将多个函数组合在一起${filename:toUpper():equals('HELLO.TXT')},调用链无上限。 检查filename是否等于某个值${filename:equal(${uuid})}。 4.2数据类型和函数数据类型:string,number,decimal,date,boolean 把16进制转化成数字 ${literal("0xF"):toNumber()} ${literal("0xF.Fp10"):toDecimal()} Boolean逻辑:isNull,notNull,isEmpty,equals,equalsIgnoreCase,gt,ge,lt,le,and,or,not 字符串:toUpper,toLower,trim,substring,substringBefore,substringBeforeLast,substringAfter,substringAfterLast … 编码解码函数Encode/DecodeFunctions:escapeJosn,escapeXml,escapeCsv… Searching:startsWith,endsWith,contains,in… 计算:plus,minus,multiply… 数据操作:fromat,toDate,now... 5NIFI系统管理员指南|NIFISystem Administrator’s Guide5.1系统需求java8以上;linux,unix,windows,mac os x; 浏览器edge,firefox,chrome,safari NIFI的安装和启动:前文已述不重复。 5.2配置最佳实践最大文件句柄 * hard nofile 50000 * soft nofile 50000 最大forked进程 * hard nproc 10000 * soft nproc 10000 增加tcp链接端口 .... 5.3安全配置|securityconfigurationhttps TLS生成器工具 5.4用户认证ldap,kerberos 5.5多租户认证分组配置权限 内容多且复杂。 5.6加密解密配置内容多且复杂 5.7在配置文件对密码进行加密内容多且复杂 5.8NIFI集群配置NIFI的策略是零master的集群。 5.9状态管理statemanagementNIFI提供机制,让和框架,持久化状态。默认的stateprovider 是ZookeeperStateProvider。 5.10Bootstrap属性conf目录下的bootstram.conf文件,配置NIFI的启动项。参数有,sizeof java heap,java run command,java system properties 5.11Notification Services如果NIFI启动出错,启动email的notification通知管理员。 5.12Kerberos服务5.13系统属性SystemPropertiesconf/NIFI.properties文件,主要的配置文件,决定NIFI如何运行。配置参数多且复杂。 5.14声明管理|ClaimManagement当一个request要改变dataflow,需要所有NIFI节点对此进行同步。两阶段提交:先询问所有节点是否允许该操作,当所有节点都claim允许,才可以进行操作,然后同步。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |