如何部署Apache NiFi Poc环境
如何部署Apache NiFi Poc环境
这篇文章将为大家详细讲解有关如何部署Apache NiFi Poc环境,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.NiFi简介
Apache Nifi是一个易用、强大、可靠的数据处理和分发系统。
主要功能:数据流程管理,设计数据流程、执行数据流程、监控数据流程执行。
一个数据流程是一个有向图包含:数据源节点、数据转化和协调节点、以及数据输出节点。
在NiFi中数据流程图中的节点被称为Processor,流程图中的边称为connection,边是有方向的,在流程图中流动的数据称为FlowFile。FlowFile被数据源类型的Processor创建,沿着connection流动,被数据转化类型的Processor被转化(拆开、合并、转化为新的FlowFile、被复制或者被遗弃),被协调类型Processor调整流向,最后被Sink类型的Processor发送到外部节点。
NiFi在复杂的多系统企业环境中能够发挥非常大的作用。
2. 环境要求
Apache NiFi比较不挑操作系统,只要能安装JDK,能执行java命令就行。oracle jdk和open jdk都可,版本要求为8或11。安装好jdk执行javac看看装好没有。
laofeng@192~%javac--versionjavac11.0.9
如果部署Apache NiFi伪基群则需要预先安装Docker Desktop。
3.单点
Apache NiFi 安装也比较简单,只要下载一个二进制包,解压了就可以执行。二进制包有两种:tag.gz、zip,建议Mac、linux用户下载tar.gz,windows用户下载zip包。Apache NiFi下载地址:http://nifi.apache.org/download.html 如果下载速度没有达到数MB/秒,建议换一个速度快的镜像地址,毕竟安装包的size有1.5G。
解压后的目录结构如下:
启动nifi
在linux和mac下使用bin/nifi.sh启动,windows下使用bin/nifi.bat。
#先执行一下试试,输出的是usage,可以看到启动、停止、执行、重启、状态、dump、诊断、安装(为系统服务)、无状态(?什么意思)laofeng@192nifi-1.12.1%bin/nifi.shUsagenifi{start|stop|run|restart|status|dump|diagnostics|install|stateless}#执行启动命令,删除了“javahome”和“nifihome”,启动配置文件为“conf/bootstrap.conf”laofeng@192nifi-1.12.1%bin/nifi.shstartJavahome:/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/HomeNiFihome:/Users/laofeng/Downloads/apps/nifi-1.12.1BootstrapConfigFile:/Users/laofeng/Downloads/apps/nifi-1.12.1/conf/bootstrap.confWARNING:AnillegalreflectiveaccessoperationhasoccurredWARNING:Illegalreflectiveaccessbyorg.apache.nifi.bootstrap.util.OSUtils(file:/Users/laofeng/Downloads/apps/nifi-1.12.1/lib/bootstrap/nifi-bootstrap-1.12.1.jar)tomethodjava.lang.ProcessImpl.pid()WARNING:Pleaseconsiderreportingthistothemaintainersoforg.apache.nifi.bootstrap.util.OSUtilsWARNING:Use--illegal-access=warntoenablewarningsoffurtherillegalreflectiveaccessoperationsWARNING:Allillegalaccessoperationswillbedeniedinafuturerelease#查看一下状态,输出了监听端口号和进程id“listeningtoBootstraponport65173,PID=16224”laofeng@192nifi-1.12.1%bin/nifi.shstatusJavahome:/Library/Java/JavaVirtualMachines/jdk-11.0.9.jdk/Contents/HomeNiFihome:/Users/laofeng/Downloads/apps/nifi-1.12.1BootstrapConfigFile:/Users/laofeng/Downloads/apps/nifi-1.12.1/conf/bootstrap.conf2020-11-1520:40:05,575INFO[main]org.apache.nifi.bootstrap.CommandApacheNiFiiscurrentlyrunning,listeningtoBootstraponport65173,PID=16224#使用jps命令,发现了“NIFI”和“RunNiFi”两个相关进程laofeng@192nifi-1.12.1%jps16224NiFi16222RunNiFi
使用浏览器访问:http://127.0.0.1:8080/nifi 能看到如下界面,基本确认启动成功。
4.伪集群
集群架构
NiFi Cluster采用无leader模式,即在部署时所有集群节点都是相同的配置没有主节点和从节点的区别。每个节点都有同样的数据流程定义,执行相同的任务,但处理不同的数据。 NiFi使用zooKeeper做为协调服务。集群启动时,一个节点被选出做为协调节点,其他节点向它发送心跳信息和状态报告。当新节点选择加入集群时,新节点必须首先连接到集群协调节点,以下载最新的数据流程。如果集群协调节点确定允许节点加入,则当前数据流程将提供给该节点,并且该节点能够加入集群,但新节点的数据流程副本与集群协调节点提供的副本必须匹配。如果新节点的数据流程配置版本与集群协调节点的版本不同,则新节点将被拒绝加入集群。
术语
Coordinator(协调器):NiFi集群协调器是NiFi集群中的节点,它负责执行任务来管理集群中允许哪些节点,并向新加入的节点提供最新的流。当数据流管理器管理集群中的数据流时,它们能够通过集群中任何节点的用户界面来进行管理。然后,所做的任何更改都将复制到群集中的所有节点。
Nodes(节点):每个集群由一个或多个节点组成。这些节点进行实际的数据处理。
Primary Node(主节点): 每个集群都有一个主节点。在这个节点上可以运行“独立处理器”。ZooKeeper用于选举主节点。如果该节点由于任何原因与集群断开连接,将自动选举一个新的主节点。用户可以通过查看用户界面的集群管理页面来确定当前哪个节点是主节点。
Isolated Processors(独立处理器):在NiFi集群中,相同的数据流程在所有节点上运行。因此,数据流程中的每个组件都在所有节点上运行。然而,在某些情况下,DFM可能不希望一些处理器运行在所有节点上。最常见的情况是使用处理器与外部服务通信时使用的协议限制。例如,GetSFTP处理器从远程目录中提取。如果GetSFTP处理器在集群中的所有节点上运行,并同时尝试从同一个远程目录进行拉取,则可能存在竞争问题。因此,DFM可以将主节点上的GetSFTP配置为独立运行,这意味着它只在主节点上运行。通过正确的数据流配置,它可以拉入数据并在集群中的其余节点之间进行负载平衡。请注意,虽然这个特性存在,但是简单地使用一个独立的NiFi实例来拉取数据并将其提供给集群也是非常常见的。这取决于可用的资源以及管理员决定如何配置集群。
Heartbeats(心跳):节点通过“Heartbeats”将它们的运行状况和状态传递给当前的集群协调器,它让协调器知道它们仍然连接到集群并且工作正常。默认情况下,节点每5秒发出一次心跳,如果集群协调器在40秒(=5秒*8)内没有接收到来自节点的心跳信号,则会由于“缺少心跳”而断开节点的连接。这两个参数可以在node.properties文件中配置。集群协调器断开节点连接的原因是因为协调器需要确保集群中的每个节点都是同步的,并且如果没有定期接收到某个节点的消息,那么协调器就不能确定它仍然与集群的其余部分保持同步。如果在40秒后,节点确实发送了一个新的心跳信号,协调器将自动请求节点重新加入集群,以包括对节点流的重新验证。在用户界面中向DFM报告由于缺少心跳而导致的断开连接和接收到心跳后的重新连接。
基于docker集群
这里实现伪集群的方式是:使用docker-compose启动多个nifi的container,组成一个运行在docker中的NiFi cluster。忽略Docker Destop的安装过程。
docker-compose文件
version:"3"services:zookeeper:hostname:zookeepercontainer_name:zookeeperimage:'bitnami/zookeeper:latest'environment:-ALLOW_ANONYMOUS_LOGIN=yesnifi:image:"apache/nifi:1.12.1"ports:-8080#UnsecuredHTTPWebPortenvironment:-NIFI_WEB_HTTP_PORT=8080-NIFI_CLUSTER_IS_NODE=true-NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082-NIFI_ZK_CONNECT_STRING=zookeeper:2181-NIFI_ELECTION_MAX_WAIT=1min-NIFI_HOME=/opt/nifi/nifi-current-NIFI_LOG_DIR=/opt/nifi/nifi-current/logs-NIFI_TOOLKIT_HOME=/opt/nifi/nifi-toolkit-current-NIFI_PID_DIR=/opt/nifi/nifi-current/run-NIFI_BASE_DIR=/opt/nifi
将以上代码保存为“docker-compose.yml”。由yml文件细节看,使用了两个镜像:bitnami/zookeeper:latest和apache/nifi:1.12.1。
"apache/nifi:1.12.1"镜像使用的是jdk版本为“openjdk8”
创建并启动集群
注意执行命令的目录和保存“docker-compose.yml”必须是同一个目录。
#启动三个节点的NiFi集群,第一次启动需要下载镜像,要等一段时间。#第二次启会非常快laofeng@192nifi-1.12.1%docker-composeup--scalenifi=3-d#开始下载镜像Pullingzookeeper(bitnami/zookeeper:latest)...latest:Pullingfrombitnami/zookeeper58212c1109c5:Pullcomplete081a2ae8dc51:Pullcompletef5ff4112905d:Pullcomplete35864a4b7faf:Pullcompletecdcc88215c01:Pullcomplete94a860965551:Pullcomplete7b37ce5d991a:Pullcomplete9b0fd0c439c8:Pullcomplete79ae9cc9ceef:Pullcompletef587456f2eac:Pullcomplete215bcd582847:Pullcompletec3bbf763f965:Pullcomplete96583be231d1:PullcompleteDigest:sha256:0f278b73b82ec8910168f09343b8dc5405152482d2fac1f26473ffc12564fafaStatus:Downloadednewerimageforbitnami/zookeeper:latestPullingnifi(apache/nifi:1.12.1)...1.12.1:Pullingfromapache/nifid6ff36c9ec48:Pullingfslayerd6ff36c9ec48:Pullcompletec958d65b3090:Pullcompleteedaf0a6b092f:Pullcompleteffba832277c8:Pullcomplete9687742a10f9:Pullcomplete438df03a4d78:Pullcompleteb428ea9845bb:Pullcompletee97cefb1594a:Pullcomplete1ea915e95f07:Pullcompleteb988f1230121:Pullcomplete066b86f87d5a:Pullcomplete11325722f405:PullcompleteDigest:sha256:bf7576ab7ad0bfe38c86be5baa47229d1644287984034dc9d5ff4801c5827115Status:Downloadednewerimageforapache/nifi:1.12.1#启动容器Creatingnifi-1121_nifi_1...doneCreatingnifi-1121_nifi_2...doneCreatingnifi-1121_nifi_3...doneCreatingzookeeper...done#至此启动完成
使用docker ps命令查看容器运行状况
laofeng@192nifi-1.12.1%dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6b0974257ea3apache/nifi:1.12.1"../scripts/start.sh"7minutesagoUp7minutes8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32770->8080/tcpnifi-1121_nifi_219a9fbc4ec11bitnami/zookeeper:latest"/opt/bitnami/script…"7minutesagoUp7minutes2181/tcp,2888/tcp,3888/tcp,8080/tcpzookeeper058e826876e0apache/nifi:1.12.1"../scripts/start.sh"7minutesagoUp7minutes8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32769->8080/tcpnifi-1121_nifi_3c4c02b6415ebapache/nifi:1.12.1"../scripts/start.sh"7minutesagoUp7minutes8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32768->8080/tcpnifi-1121_nifi_1
根据PS命令的输出,看到有四个活跃容器:zookeeper、nifi-1121_nifi_1、nifi-1121_nifi_2、nifi-1121_nifi_3。
有三个端口映射到了宿主机:0.0.0.0:32770->8080/tcp(nifi-1121_nifi_2),0.0.0.0:32769->8080/tcp(nifi-1121_nifi_3),0.0.0.0:32768->8080/tcp(nifi-1121_nifi_1)。
nifi集群中每个节点都可做为WebUI的入口,使用浏览器访问其中一个节点http://localhost:32770/nifi.
注意:nifi容器8080端口映射到主机的端口是随机,不同的宿主机,每次启动都不同,需要使用
docker ps
查看具体映射端口号。
查看集群状态
点击菜单
弹出菜单
集群状态
NiFi 集群管理命令
cluster-summary
, 集群概况nifi get-node
, 获取单个节点信息nifi get-nodes
,获取节点列表nifi connect-node
,连接到节点nifi disconnect-node
,退出节点nifi offload-node
,有集群中离线节点nifi delete-node
,由集群中删除节点
#进入容器shelllaofeng@192nifi-1.12.1%dockerexec-itc4c02b6415eb/bin/bashnifi@c4c02b6415eb:/opt/nifi/nifi-current$cd/opt/nifi/nifi-toolkit-1.12.1nifi@c4c02b6415eb:/opt/nifi/nifi-toolkit-1.12.1$bin/cli.sh_____Apache(_).'..](_),_.--.___||___)\[`.-.|[|'-||-'[|/\||||||||||''[___||__][___][___][___]',,'`'CLIv1.12.1Type'help'toseealistofavailablecommands,usetabtoauto-complete.Sessionloadedfrom/home/nifi/.nifi-cli.config#集群概况#>nificluster-summaryTotalnodecount:3Connectednodecount:3Clustered:trueConnectedtocluster:true#获取节点列表#>nifiget-nodes#NodeIDNodeAddressAPIPortNodeStatus--------------------------------------------------------------------08dc6c433-68bc-4839-b49b-a8d7710b7b34c4c02b6415eb8080CONNECTED1a30e4804-7136-4f68-a66b-f5f3b764d7f56b0974257ea38080CONNECTED2184fa9f3-0595-4ab7-b07c-ddfd0b011956058e826876e08080CONNECTED#返回一个节点的状态,与节点列表命令相比并没有额外的信息#>nifiget-node--nifiNodeId8dc6c433-68bc-4839-b49b-a8d7710b7b34NodeID:8dc6c433-68bc-4839-b49b-a8d7710b7b34NodeAddress:c4c02b6415ebAPIPort:8080NodeStatus:CONNECTED~
停止docker集群
使用docker-compose stop
命令可以停止构成nifi的集群容器运行,但是容器会保留且处于不活跃的状态,之后可以随时使用docker-compose start
命令将集群恢复运行。
必须在docker-compose.yml文件路径下,执行命令。
停止
laofeng@192nifi-1.12.1%docker-composestopStoppingnifi-1121_nifi_2...doneStoppingzookeeper...doneStoppingnifi-1121_nifi_3...doneStoppingnifi-1121_nifi_1...done
查看容器
#使用dockerps,已经没有活跃容器laofeng@192nifi-1.12.1%dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES#查看所有容器,包括停止的容器,发现nifi集群的四个容器还在。laofeng@192nifi-1.12.1%dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6b0974257ea3apache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoExited(137)5minutesagonifi-1121_nifi_219a9fbc4ec11bitnami/zookeeper:latest"/opt/bitnami/script…"AboutanhouragoExited(143)5minutesagozookeeper058e826876e0apache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoExited(137)5minutesagonifi-1121_nifi_3c4c02b6415ebapache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoExited(137)5minutesagonifi-1121_nifi_1
恢复NiFi级群
#执行docker-composestart,因为不需要创建容器和虚拟网络,启动速度比较快laofeng@192nifi-1.12.1%docker-composestartStartingzookeeper...doneStartingnifi...donelaofeng@192nifi-1.12.1%dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6b0974257ea3apache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoUp12seconds8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32771->8080/tcpnifi-1121_nifi_219a9fbc4ec11bitnami/zookeeper:latest"/opt/bitnami/script…"AboutanhouragoUp12seconds2181/tcp,2888/tcp,3888/tcp,8080/tcpzookeeper058e826876e0apache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoUp10seconds8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32772->8080/tcpnifi-1121_nifi_3c4c02b6415ebapache/nifi:1.12.1"../scripts/start.sh"AboutanhouragoUp9seconds8000/tcp,8443/tcp,10000/tcp,0.0.0.0:32773->8080/tcpnifi-1121_nifi_1
销毁集群
停止nifi集群的运行并删除容器,删除虚拟网络。
laofeng@192nifi-1.12.1%docker-composedownStoppingnifi-1121_nifi_2...doneStoppingzookeeper...doneStoppingnifi-1121_nifi_3...doneStoppingnifi-1121_nifi_1...doneRemovingnifi-1121_nifi_2...doneRemovingzookeeper...doneRemovingnifi-1121_nifi_3...doneRemovingnifi-1121_nifi_1...doneRemovingnetworknifi-1121_default
关于“如何部署Apache NiFi Poc环境”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
apache2无法解析php如何解决
-
5分钟搭建起apache+php+mysql开发环境
-
Apache服务器是如何解析PHP 小编来给你解疑
为了让Apache支持php,我们通常的做法是编译一个apche的php模块,在配置中配置让mod_php来处理php文件的请求...
-
Centos7系统yum安装Apache PHP MySQL环境
-
Mac电脑、MacOS系统 下php、apache、mysql开发环境配置
-
在 Windows 10 上安装 PHP(使用 Apache 和 MySQL)
-
Mac自带Apache和PHP位置及简单命令
之前一直使用的Windows开发环境,用了很多年的wampserver集成,自从上个月LP大人开恩换了最新款macpro之后一直...
-
centos7 apache 利用yum安装多版本php
在今天的教程中,我们想展示如何在CentOS7linux上使用apache运行多个PHP版本。具有多个php版本并在单...
-
PHP运行原理及Mac OS下Apache的安装配置
-
如何启用 Apache 的 PHP-FPM 多实例