From 7e2740160a04bd8aa1a55a24a30f6417bf5e70ed Mon Sep 17 00:00:00 2001 From: Rob Moran Date: Fri, 22 Jul 2016 12:17:02 -0400 Subject: [PATCH] NIFI-2361 This closes #708. Update cluster information and add new graphic --- .../main/asciidoc/administration-guide.adoc | 24 ++-- .../zero-master-cluster-http-access.png | Bin 0 -> 113168 bytes nifi-docs/src/main/asciidoc/overview.adoc | 118 +++++++++--------- 3 files changed, 71 insertions(+), 71 deletions(-) create mode 100644 nifi-docs/src/main/asciidoc/images/zero-master-cluster-http-access.png diff --git a/nifi-docs/src/main/asciidoc/administration-guide.adoc b/nifi-docs/src/main/asciidoc/administration-guide.adoc index 93a6112380..ba5e16a251 100644 --- a/nifi-docs/src/main/asciidoc/administration-guide.adoc +++ b/nifi-docs/src/main/asciidoc/administration-guide.adoc @@ -290,7 +290,7 @@ See also <> to allow single sign-on access via client Kerberos Encryption Configuration ------------------------ -This section provides an overview of the capabilities of NiFi to encrypt and decrypt data. +This section provides an overview of the capabilities of NiFi to encrypt and decrypt data. The `EncryptContent` processor allows for the encryption and decryption of data, both internal to NiFi and integrated with external systems, such as `openssl` and other data sources and consumers. @@ -470,7 +470,7 @@ On a JVM with limited strength cryptography, some PBE algorithms limit the maxim * http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html[JCE Unlimited Strength Jurisdiction Policy files for Java 7] * http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html[JCE Unlimited Strength Jurisdiction Policy files for Java 8] -If on a system where the unlimited strength policies cannot be installed, it is recommended to switch to an algorithm that supports longer passwords (see table above). +If on a system where the unlimited strength policies cannot be installed, it is recommended to switch to an algorithm that supports longer passwords (see table above). [WARNING] .Allowing Weak Crypto @@ -488,8 +488,10 @@ Clustering Configuration This section provides a quick overview of NiFi Clustering and instructions on how to set up a basic cluster. In the future, we hope to provide supplemental documentation that covers the NiFi Cluster Architecture in depth. -NiFi employs a Zero-Master Clustering paradigm. Each of the nodes in the cluster performs the same tasks on -the data but each operates on a different set of data. One of the nodes is automatically elected (via Apache +image::zero-master-cluster-http-access.png["NiFi Cluster HTTP Access"] + +NiFi employs a Zero-Master Clustering paradigm. Each node in the cluster performs the same tasks on +the data, but each operates on a different set of data. One of the nodes is automatically elected (via Apache ZooKeeper) as the Cluster Coordinator. All nodes in the cluster will then send heartbeat/status information to this node, and this node is responsible for disconnecting nodes that do not report any heartbeat status for some amount of time. Additionally, when a new node elects to join the cluster, the new node must first @@ -599,12 +601,12 @@ For each Node, the minimum properties to configure are as follows: defaults to 10, but for large clusters, this value may need to be larger. ** nifi.zookeeper.connect.string - The Connect String that is needed to connect to Apache ZooKeeper. This is a comma-separted list of hostname:port pairs. For example, localhost:2181,localhost:2182,localhost:2183. This should contain a list of all ZooKeeper - instances in the ZooKeeper quorum. + instances in the ZooKeeper quorum. ** nifi.zookeeper.root.node - The root ZNode that should be used in ZooKeeper. ZooKeeper provides a directory-like structure for storing data. Each 'directory' in this structure is referred to as a ZNode. This denotes the root ZNode, or 'directory', that should be used for storing data. The default value is _/root_. This is important to set correctly, as which cluster the NiFi instance attempts to join is determined by which ZooKeeper instance it connects to and the ZooKeeper Root Node - that is specified. + that is specified. ** nifi.cluster.request.replication.claim.timeout - Specifies how long a component can be 'locked' during a request replication before the lock expires and is automatically unlocked. See <> for more information. @@ -1332,11 +1334,11 @@ Providing three total locations, including _nifi.provenance.repository.director The Component Status Repository contains the information for the Component Status History tool in the User Interface. These properties govern how that tool works. -The buffer.size and snapshot.frequency work together to determine the amount of historical data to retain. As an example to -configure two days worth of historical data with a data point snapshot occurring every 5 minutes you would configure -snapshot.frequency to be "5 mins" and the buffer.size to be "576". To further explain this example for every 60 minutes there +The buffer.size and snapshot.frequency work together to determine the amount of historical data to retain. As an example to +configure two days worth of historical data with a data point snapshot occurring every 5 minutes you would configure +snapshot.frequency to be "5 mins" and the buffer.size to be "576". To further explain this example for every 60 minutes there are 12 (60 / 5) snapshot windows for that time period. To keep that data for 48 hours (12 * 48) you end up with a buffer size -of 576. +of 576. |==== |*Property*|*Description* @@ -1473,7 +1475,7 @@ instances in the ZooKeeper quorum. This property must be specified to join a clu for storing data. Each 'directory' in this structure is referred to as a ZNode. This denotes the root ZNode, or 'directory', that should be used for storing data. The default value is _/root_. This is important to set correctly, as which cluster the NiFi instance attempts to join is determined by which ZooKeeper instance it connects to and the ZooKeeper Root Node -that is specified. +that is specified. |==== [[kerberos_properties]] diff --git a/nifi-docs/src/main/asciidoc/images/zero-master-cluster-http-access.png b/nifi-docs/src/main/asciidoc/images/zero-master-cluster-http-access.png new file mode 100644 index 0000000000000000000000000000000000000000..b608cd0b622bcba781d3eed04b2fd1f63e67165a GIT binary patch literal 113168 zcmeEuRZtvn5GS%hf=h5&oZu4N9fBtzKyY^t5Zv7*xJz(%ceez0cU#=$mcJ!e_i`^+ z_i(pN6B`Wmk8{}astmmhm$3CN>%g$ds1TBt{x{!y2*%iGw72;vyg0eEV z0iX0BCud(tn^X6Cw~&aLyoX)mbOvo5*EeoGKejB?H7_l^{Ix8crRuw${}|h$ue*0U zPsYvNmGlJs|KtA^4glxi5~3~I2^ircA>g|ayj=45R^~UW^_{LcYR279)>c;B7kSdI z$pxYQJEBMgGYN3Rizy(y;6LVR>DqFSeH?V^G^rd;Vn5v`hSoPihrgk)-r@nN%pY;P zL$ic3aZPCk%v}v`U>whG*9j6($)udEPYvc6-r))tEERJL*nmpzA9Glf{!qLOWWcaJ z^-vbM0f#gu6(F-8%r&r6zEdURE{*NBa zJSAqwsqA|Cl5cwCw>2RflS~{ExM3v0n*vk#&ml+%r$9XeNfZJ@$+TC29RTd((`=wa z<&>9A;AZQhO{*hEjr265yrnCXnKR7WFe&3)j{fgr@EgHYIF*A>Nq$m52*`lBcj#3E zt+ty9BXe$1Cq8A}q7gCnd4>j!YFsitr{ftm)Elox&~s(X+OOuQj$0alv6b+Vj=t&4 zh_Tp=6O?jv=P{$k=s?Kd2V4+@pRHtl0v9F}Wu6}6aETjMMS`r08zuR-&F;61>cuIP zs*Xvoq6jLB7}j|w)~%P>boLS2QrS;yjf6|dE$Qa-)fzeGHJsot2Y|i@N*`BZ0}jS0QG?JzzrL@+cK+zeSbH zLN4YmlYD}C%WuJo5vhjvJmy~pcEdux-n#iFXEP^#i{|u9HkJ-5PfGV0I59@dLTAka zsT8GPtlJ9OA63tNWu*H>MiPCQmLNm91G0(16jpVp>+RLpX`CiU>8_9P-kE6VX?p$v zz4jf@48M5YebI{CwBgd6^Zv35v%5*M-Nk}A=%YrohA#gb+%c4d#GwDQ*hU(NxG`2w zNXw%c0kCv=x{XcIJ;yPyxr#L;l>5jnV^kz#n733QgPb?ftUvFY9Jkh2bk$Tv)HJOv zs{?z&XZ)}k8YlILEwI>zSRf)d0RhppqR^{pFk*a`?o!Ig(oG?Aa!jRVnr2#;9+usc zgbTa%HD9K9ilJ*~;PKXG_1u8H$l&8~3q8qntDfV{02AADh|OXz(-R?5I{Rr{ZZD_a zx6W$pQHKON9_SK-HqftUL$2ZP*hz#1>HH4QNK~O)7!3eKSU8RaLP z)aC3D@@)CNor{rUvPU*BEae9c$nCfLU;pFKfW7e6;#|GN3cL;=FDfl_Bc9Aw`y?G( zBz!TOd5=@#y!+)$N;#L)p~V5lh-6+TS0~wWs!x`}?IzPfV0olZ_6Qc_IiM&o{ z3t|lxAkjoRWiIKYmWQvt0`R$M-}-s>PO<&DEUv~feUt0?g{Yb|9xH4;(#VCffEjN_ zkKCc4&X!{mV`#}43o4~Y>98a(r?RX~bC5Ci?zL_4Ki27Hn$O#~cP`+D7RO`Tgy^fLpF=xJS zcaddw#K)Yf7OR)6>C$>L=0&`x*DPLPU>ZoOIw(TD0EBJhnBKDH?8O0LP#k_uNb6Ps zMvK@baYdVp@h)Fdw@oZ)T8cr^FnSrN-JrKv0bl%0t|p-Djm9UjJtE@a(*8{mQ&Rkq{YL(ypwY=+uLvj0S6EhxuEe6VD6;51B`8$Xqee#dPy zf029wvfziAn_dw#;A4s7X@>rI6%ZNVasTM0%lofOg@E^j@Sr=@Lq&tqwGF$>EX!aC z`JDMtHl5{^-2)%(XzcC08^T%1&oi1SmXgX3!{!*{k5{L-d`#sr$=}v`4Qs~`9LsYP zYl#)7>rbOw<+v7U^jg$|CiL&D=u_4G;u(o3_i8rf1NBuScun>%@|Z(-p`qWOb5N^B z9F~8g>qH2kecaOdV>^-UQc%+|LjICKS15*Hza=8j(Oq1)Mtn?R85DF%wd0mBmLX~dpkFs&dHs7Ho*n+N_Y54%II8+Gw{mNFK#Zd^A=r(9tL7o_H20Ts9olBZaA8HA2hJxW=wb9 zJsJ$=s2NPFFQO;JJwtdkA?qaW6~*|Rw3^QQE^OD+s0OnQHfg)_NjGt1qMRPf{Fu@H z;z~w`q3L*z$V3@4af@a+@$5^7T-Eg;kO;Vrv;C;bNPhmXm!sn$h-TJk%e%7qmU!lG2-TPnzheoYqyFUU54 z;*NUX`Ty1yaApC-gi29F_QN`#e%~Iq{|&CnW3I-KH!*YNbdkMo?J6-wF$kk_RtZ1! zM>`+sY+RAa1YdZtZJr-ie^gbB!Nj{36_c0^`q+_{&*~B32L}^vw^KS=(Cw<@$s=+` ziH`FKbt~a~9ea}Pg6-xsokKj#eZns2;W>OXLkFW6sbP8SxpS&)f12_g4OA zIZ0lq%;2PMvUW7F*!Ibwx~KJP6u$H1;Ob9DGvw|mcS&gK$Q9qh-j35uPSe%cqwgR)qYad6VDM&%! zzR<>09MeHmSoRsVLt(EZx7NzakX9|z#)1fW9ZD5lNR(hFTEfNb`AB)PT9S?SEWnNV zxJP1GDR))9xnRs$CEy*+djW8~zc~wJ>kR&{GQtZ5hdZB4qpqO$?fRe1D#*{^dgGDP z_w-UK*QRZVPcuaaxUIE#jFf>-z60jL-Tpe67XeOEKuWmw;X92OmI&l**2--St?RS^ z>;7a7ERM>73Uea-8^2#DSS0`Idmtnf<{a1TkDU(5G2}oBIB$ss6xug>JkQ4EX z-Y4kJn)p;mLKa+69L&z#VY9vFoI?0Wwd5=x_DwueFdDTzDI$xhgrn8Z=?VrZX2OZS zG&9*`VaX_w3f=-a<{!SH$Af8E=U-64O(Y1IoXTdEQ`)r|!$;5e6BPT>(|Qp+iLM`$ z_|?TU*QAKArvcvExEzx$F*WEqkwx$MhUrZ@6a0Xb8vObpG5BBTpn#2wHZd?LF7m(OF{+bPO>pno0_4&PLmLH)#Y_#a2*IFhY{UlYK-gg6H#}vV-49 zNrF>pcw+8=loJ4+p6^>Pad@F5uZv#Pn7wF}nWOsQ`0|c0!Fq~^>yrS))584x{USG#DifS7VN&c9;BKA?A^H}ym(Vc0Y4upe2-gDr{(d--C$fU_ouKs z@9@dD+sFL0;055G5JOL;CRvd$Q$k!|n+2%!IHA%%eEIT)k#%r)M(gMDE1Uxje0Fn{ z?J~Vksy|fP7zgYVk-Ab#q6KBpJQG~;3DH3gsCMbA+rq=`PiR%e=Zo-E&>q~l#mG8_ zcYtn7%KfHco{@vrVIGvh?TivyAW^zF;m2Q3j{Q}GMJe}Kqz!DMXL*54U0UAF=+o-) z3>sfl=;AnR?6CHoAWWVeC~lj9kDt=ve}x30} zl>+#M_;F7eNJK1V^kIz=W%6y{W*cb>--8IahBRQeT6TpHzD0)bTKeL4`mB|p&Jlk( z@?;Avfd^dgos76{{+brQKA4d=9PCL{)Uw*-lO0r&PRh~~sORtuE|LpC0_OcSn+ZPoMZB+*S>m=9!|RhjZJK+_0PSK88@A2~V0 zV)cy8#WmAQ+JI#*5A0iP;0lg!ncxlDFw>aV?VW8mpU?dmst5i9^-aLqjEKs!CoS0A z{w;|k1w&E6k>#%~2>Qb3=u)0rLGBX}0!uog^(~n3(#Z)uzp3w*k)aksM^bvUIou3= zocR_ni8Zme#)P1?UkGYTU``7t7)h@azcy`pt9s6oF?88>Zgh2SxZDugknV1-22jno*O^Db2t%2y3VBH}3fT$>AU{f=czPYg<7I7zL+Ic%IIb zMsw4qeNJD8TNhd(pUz*Pl3g+eXd|`B-b^zo5pn&H}3 z!k_4;QC+g1W-P^jdF4yeA?x{L<`?Dg9k|rU64pN79!UnOfW)@swI_<5;5;C7ny{c8 zMU|AM<^sq3wIC)AJ=%wPa`^kdm?Stn2t;t9BJVx^L&ob-EV65hL8MoB*6Jc25CMgc^-D8@+N!EBIIcLFt}= zLihxDZ-8!?XM#$${LpIhI_!lu+!QQ{X~dd40pJUduYjbK6fR=a1Mm2XuXYP6( z`-wO3Lt;beTI7z>u(iG2ZJhD7y1uDb(Xb}0L6BD^N?dGgwTSyQ-PbVxW>Tgrp};$Y z(gIB>BwGYz0cg-dXxK(WsO7|uk+Cov#2LAE?4fySX4pUDk_hT*uOyOCs>L0JXX2zZ zP`s}LrEboAM?}3jeAr`XVBmHJ93KmFfM=ne-&{(vveqpEf1Q&!Fk;(;<=Bz)MIOwQ zY3ao_Azm(fv+IlB!rTNveHTh1+@8?NOvOfhqMZjJvL24q#47fCaGzcHc!;0ril6GL zj{{HI`esXo?!#=Jv3kpe#-pAYy2Ij_G?5p5?zbfGWsVIns#;vG)4VS1)=*SSrd7cU ztuUCpB*7n4Rh=+;FVb>0=83kRs7-bcBp1_zGT;sP1ruw~t*j|84lozf!(3I3uMt8m zh~_Q*8!biEt<=>>$K0r&8)7BY1XgOyl$i%zb7m$Q>~_Sz!F=eG+*}E729cIEhyEm> zTn7m@tH6J1j}U3yV3PL0uplfRUAu29bx-km=u&XUf1suQn6u+h$+04d&1=%Zh~`1v@ZTzc?&a z!k`qNcZLB6Bz9tPVzp+M(7`Aetr2}W2CdTUQ6Tkce(rzvIHlnOm!vUZAj(X#RcTw`}j0be5)<3|WsLk(U3~dG9 z9o@H=CR77Z>b+~pa7lXOcR&NB;d{H%zO4q3mw1qjRSmE2qmXsX-yq4M_kYG+?yu* z86`e%H8(=U<{5Uf0^cI2|6&iAe->4ab*t6QMm*D&HS8Q~Li?&a7~+UQqIr_O>Mv^$93`I+18XN?H*LsNo2NQu!az&WWQ58buR-y`;_0^r1Iu{l}k^&Ua>$ln-1*<%9xdv`mKkM6KG@?AqiN%0foF|_u&v-^*%`&JTq|{kD+0ej<^Ljr(N4SrTu}Ow1 zNy^!2UqS*^+BLk%b<(0Zz|pACUVJ&SJ7)KRxwK8VF^~Yw;CkbUrFsFj$}L{kp#?fi zEGLMQz0sa2$THN{sDGGiaM80{D*xKGTf^7kSY&a8#pkUblO@_&n@=0$p2(U6=>zPI zKo{+zRv62duiC(4Jmg1bj3}kOy}idM5X^-YaInNLomsy>5>o_HCqE2wteR|{ zR^d9=|7!%0vn4E$ka_~`aRf%I-v!#L3!mmTVz(R5rdvMu%)qndT%`f* z*{wb<6py1H^*Mg^GdPWhVLVusAhQATQyDd~D#0R?wy-ug$8upCaIYq!*tuOj2e_c+ zQx3dVq-T6(YvU$;{K(lxAfipmXj&T=7dOb-1my0^mSF&jg#3K za}?>MHO(sMBX^R1c;K#fVV<{79tei#K3);@nrQajJqH(lHBw?`)5Tn`qoPortB0|4 zw=4Pf(J(;faN%gtuyX8dv|i<@1xsrJ+BB?rD4u0v5eQ$8R@ywU#{1em@{@btKLc@k zTId)@e&DQB5$2TmSyH4^<6 z>#Wj?VdE1mP%s`8=6mXM1#qcZ5tK(VAKBo{#arZptWV9nU7Un6xLhf(NKSCqyLCJ0 z?+QP^y0Oz@uKYnvR>~`6|v3J3ExoP9Wq;X4DTn@T5dv4@?W3mF zJ-rD|dSGcEIYFq;+os{1;QXig1Y+S^GhQ-3GmdUX<{!A7a{|rbcI2qY)J%HICKZ+6m6n3?T*YSH=-`JE@llBtiWhQsuwfkUjK0&ank_s}@ z3T*^aJ&|r1J?HV+`yv~B1|DW9iRT}gogqK5VM`@ed)^Crl)_D0N0+_Uye}5w^avT7 zu$;7`SjW=kC5_ecMCobZg6RUJcU|4^2G(>#d4vJoAjUteKKnd9_R+35l)3yd{UJCB zE_@`A=xLE-Jd3pmpfWFrAIcfLj2n=uT-*8@hmPSQL{od}pYWgtyf21O(?W^&d`_Vk zf?R1IYTi~A_CF)!gk-3A+Y+fNK2HTEWJ(N1I0aVTU*5wsXBEle&tu2T2DIFJxr6-R zMz6#BLd{{j-9jrtdUVPnI2Ijuo0@P#bj|$V5=V*@r<+Ozuk+iwzb_9bpgqctPhrh```h$xcJyuRp*jN~j#3I6X_!hza=DS}xsDRgkvV`&B)uKh~N^T6>la z2Wkb3`MK8We=HX?obk_M^8u#=tb^a9wHI;>k*1g>G0XrBiGXKWd-F?=D9UH#KPr_B zO*rE=$^Bdkc44Rvv;2Gt-^1&UXXv#m;1`Lt09%A&5eq1^M?O)|b7UGhK;AOqZ&d zHKKW8oK!B)9Vu*^FLIuyxLZs3qqZ~j`SmkU9)E~f(209+M0N1^DwY!Fz~6h*`fKDX z8i-lkv11kbfPz*fNVV};|KT{%$`yIbFLc;JE5pcIBe%@#Yn5)S+cl3^SKL{ z!Mrj5ZdRN8?zbgA%!`MrN&Ftd4BIk%T6T+Px&bK z4B5nzskEZDtCkHh1j!uxbGK&bx z58b!c#AnB%lL)(N2(EI(A`jTR=PMM%e;{+B$q+`d*|G_j0q-H&LI^ib$((WAW!l1s zhsW04QNe*vtg`ik`|Jup$c}q_RPctPn=kY}_X)2P#T;#Br(+253lc2r@ip4p?P}6$ zyh$PJeop<5`7F*#MJ=3$N7-sifTXjK~%s7CR;s9vCTQqr$%z88!XqYIfH&%$>i)U=P^*%l|( zv_zT{#{7?dropx2o_L50)UMs3R5L^BO0DNuk!lP0c_1By1dhZrxl+yiP=ND4ZWnf# z#qw%{PeEepM={Hs01y zKWJot+gTZ|7@S0lR<1I`~&`LhkE^cSy1=P&Esp|l_w z1)AxD#9wb%FeEEEMMw|lxb?W~ur7x*FdX-|&X&b&b;tcJUsZ6kl5T6m~u4f48 zA}JsGjc=hUfnj*Xo}oc7dbb|sneZ+?HWpEE#SWOHys;Ik!b~3OqtJ?J_5($i{yxhW z7ZX<_Eu2)F@v4gkg~XT?Cf zeys*{&V}BftP<1H(Z#y{k(+~gvkLBBS8BbJc|oJ8p!l3GzF~Xc1Pi+LBH9%Uvv;*= zDk)tmCmF(K^}PEncd%8k3<*oTu---4n<+rbW(f$}Mc{}>ijwB3jt64+Q1zS478#LwbOKIcO$yw zt!e7a9C%?4iIXD!*V01CZFo#Z`^yfT&GcOPG`#QV*xC ze1HNB4Gn#fe3J0Sn|XG;Mt&hro;{g-IqWh*n>fK;aQ!A?)QkSYVHrj<%g$o810D7sAgKPQ_c|SMs98w@RWbjr#nISazUjH1Z zbuUJ=$j|MN0yZKBfax5P%NLD(L)G651A5(1f}x)qclSd+Ff2?64@gjT&n+*vb|ow_ zvib9SoG)typoD3FJ9~k2;I;bC^ez5a3j`)*;}O2{8GH`yWv^(V#lF8g6X@RHNe*FN zab$0>dY}WS&Ep@*IQ^)CMeaQY>l9OKG?Gvt6P`_a3s9-^c?+h#co;~-J^AuL4>Y#nO z000CN4}l!>(nR?C0Cv1IWoDtbtidO;B*1cZHdkf+ee-T~u&Y;b#ybQjjDo`$VB&5i zx{-h1T`(1F=rgz^v|vXf$qq#t_wmDr+C-Tj;=L6-siVqZ)VvRW1Lx0U;@((S-U^$ZkqNl)=l2d^hwds0H!1gaKg1TU9k~`cP`USSINoerL&Yr`Rzd4aX z^g;=lIlCAXd1O6UOc>X5w)+2R(SQV4innQ865xHKQh=qT2sLE-+u>!Tyuf z$k~^x?{95?yW9aG@YP&ttP)aS9f)|*0W|jH-xGRX)Gu9Es86549}9x-{ebwV`ho2< ze8s3Q?S*(w@V;?81P_V+B@5iPCegma82kHi055KIYC1agAevsz)X|OJLK(`5Fw|dQ zeqLC+ySr;%A1^UZfSmqx9QhtE+BKF!50)u8nwLU%W#H!I zjFUAbnw}D%2a#XAlqVyUMw0_!VB)6L8b0m>NwAhzLTiCY0J0Mp{R)Yk#$B!jH$mw1 z`28`GJXtd(`a1scZGr^ofjN<3`WiNY(JwX&1ZN{qfm<9T837qzsct^qpf6rCQd7_R zGilhOXMB?z-5FK<+cR~;c}WJTX>Q8u6_h&tbHniduX|_%8o%zbw41Yg zY>3b`-2*BfpnT6Xj^SX?qdXPi@Vi*1=Z`U>VEaV>F>7X#32lyXis%EO`I zFV+k0TvL>rZ8V0yvEw%ZR1{yLcB<^@1oiii)}&vCETHrnU(c0LqfyiIv#&M`Toc$z%*^B;S{0%vf^!6TQ`ICd%cXkN0{$)~C^ba2n>Eu;Z~KDd|p z%f`I=hlk+tXnVB5yZE}NTn788+}0C`j_4NxP+DY3pu&?x{!xCfS@0-9Ih(u9knx4fBc7>Sg@iBP%V%EHX#Ez` z!bnZ4wo`7q)Zf1+=hf)SMonb6Ho2*B+{$U2ccSMPQ^$i8A9}d`=1|`l*BHJPdicjQ#3dRx`japf z%R5fhNlT2lT(3%=!q?PV7u}uabq2y4HI4jebH$3H(+SqII%)oAjK|9vsGyu#9HRgD zK2se9CF~`QAgA;iP7$Z6k|3LEmC&;ABu)AFVFJUhoSB~nt#6|@^pmV@l~UqJCOc8l zr&lLDAr^(I{$e#_wVindtT5M84=4xhg(y4ppA8Z$N<*rYlC)=st4JykZ#o z$H@!A0rqKP!({igc6&Mh8RYFG2X;2F8x<9QqO6iqEq+^LVBj1HU;yJJsr>n6l#%JG zb}}WrpN{MFe@qoy9!^OP4BN$DSxnMawG~brR(4#>TP44wo_`;K{9e|6m5P`LI*v|!+WukHUCG;i z*tYqTgC@pQz7y?K!87VqzUokS0BSCprrokJTd^ZY;Ku9AL2xGsvueOAB}brYJ0EYB zP9qHTz3909O!xAzIHC({2sywdtn!pcsdN1zaciIFDgM70X$sgkr77`nI?&p^Ymo?$ zu3#Q%8fyJ0wv}7hT*yM#Mz|B?Ug=yQ(bD{v6VNAJEnk?F57{mh-VJPvA328pix2>L;3BSp9zrjpjoxhPjC$Y8IX&2`LbnBW6Q11aVNl`O zm+C9YGHO1rvt*?J&Bv*$^v@=HVTkzqnArlAdvfk89YkB-UP=r%C?14q8hnS)xVZ^^ zTWJ9|`8QqMM!UBHAI}_RpI`{*st|t67!Fg`eM-GYQgo@s%&$Rc{oEsgTtu>?nI!XV z|J^iY1J{0%-Izka(9wQ&35CuSMd#htrP%(cyVLyLcB0lWLIY8N2*#i@SNckUGilj> z{_z)?!VIoKi_w_@5v$g&#MSYK5CM1C?Lfn$;_-AWw<7iumEvoqd$b0_C*}9k&#Kn` zdzEE|MJ>q)i+kv^4LV4M=7k&va~d}o?q7*6BpJD!MUUuIcF?f*M^Mt+%8)_JXr|2D zR9-n0KpsJl>$aK6LMwrfO5dMm!YD~IEX?AIvhT0+6*o$i_EhIgJD#74;@qzUYOp)M z&Ge>EMn@PGfR;T(*i7ezlXaHska(D_zN80IXR-XSlla_r5z97^IZW>2C~g?nW3FcS zL(DZ`Pj{b(ZJ4~sbSY6dmd~n`T*_C|T5~w5;qzfLqZ?h>EI`>B;?JluwA-Thes#^LR@j+GsL&rXFO55Ga*1d>orjtth+T@Kdy2 zQyg&JL8w;akdz^-DqnAPARY)3*>5kkprL1#HsG)9T4Q{*V0tmNp;XsF zRuk_{&*Px@xfwMFK}L|HVOjOV8%{mcg38+4(+M?gjzj)^p9U(eaTrBR%JX@=E$vDc zlz+1faF7!HLM>5I)S;vS!)kS_IM?jf+9dczJZ{irTqdZY#{AnvrHD}t^!6kdYF@!C zfy{7G&w(7k%0bgUi3oewv`)!HKyE}OIc_SyqSpT;7NJZbOs!VY7J0wfQSK47%o;_0x!MYtUtwl0ii?L;o1vQ-Z$!rP!uE_WdIf5It;i>T$#+DjRBul5bbREK ze;hfPo;eT0C?OPtQFS26nHUw<2%aF!pNa}( zI67-1wfm(RnmQA^;sv5Yi*1TNv4NG&4cND_OOX$N`P%&2-8ohDbGz+4$&z0@(&n@9 zJkmt{5GG2sGC5So~#sIsVG{5j=QI=Wog{Fuu^owt$4z7rd1uT1GiKw_JDBN zaBjcsw@A;K3dj#O+J9xbFfAc|u40rTOz1Y7WcTF~CbbPa8_OJafLa%&7viP-(< zd-wJ$e7CgduucaH^}OxTl*~kjI?ylWw}py;TM>Nf5KtlDL-!Vq)%;d1ZlWHS{khOxXg4+fnhhS4 zplCTh%kcd!vu-C}dEzcpqY8!ghtVdhr)fg|^M8K};Ho`_wYPQ_v&c=q?eF>rFI+H( z{oJ%3?OP2U&&MGYDK4!~j-*K_pt;hK{y^2*VmnMKZ&g6~@YTMJOZlzr!RQj7XzeDO zTFGEi(*6~TT6R;hxNJEzXdujQP+GeBjC9iAF{7A_cPlI1%nZQ*I*n!6_piE(95_S- zCciWhqc1qI2B~j>K85e&fVeKw)+U9P$uH*bQQxyw%VLQHe%La(fbk!3)w6*W!dn-6 zs5QD71YuBfa|DAIi`wO|)x=lnulTx0_N3Yl^9UqyP16PFSbx`^?5#D^fKr-)7WR37@5wW)+iiU@rgueVogzM!26_l}lr#A?1zn)gI%x=XbQ zuk8|GcO5s4YI7OiVJ&S$V}#a;LxwzZ6L&=&q0opU6PwzhtQ(UHn)TNtZM;<7%7Mnq zhK_T*yrEi~Xy~@(NYc6Q?vnhgIC>A|-pcY&`SW~8rrLLlW>EQh8vG*wyuL0dbr`I* zRqpDmXxO7+Z%FUcs`_4Od@>B_ah-swGSM2fta{68XsjP6o>EK^H&^^QRnD??y(p!P zlS&h&pRSgnKkQbte8{}+S|%|eD8zI6UYo9q37(u4Qnjerd3k5QJ)HjAn$kx)M`G^x z_QcMnpU_GY&I{(l+7QI4D94aU;(E9Zc%~^LTJI?B5$~ysJLOi-u8VAnYB@jjXNDgy zWIqz(e%pRE?~ZuB;v{BI>`=HLI?}QWh0!l5t@K=f4s-dd7X9+qwCOK`deNf-#!!n~ z_nQKRkq2GPqeLXGI1homnZ@Up8f?YNS9QmPa3QMSe{IAue1fWTt-4kX+|s(I-C>sAj6pQHwP5`M`TaAB=%R)91tifF znyjq$@b(QaW9s>oK>TwgF2@w^t

u60?>cT;uvU$^}V>7N*IQWIE*lD6*HyN>;_ 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 FCZw1m?p}&x11SK=sSl{PRKTZXQB9`mX+T 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 What is Apache NiFi? -------------------- Put simply NiFi was built to automate the flow of data between systems. While -the term 'dataflow' is used in a variety of contexts, we use it here -to mean the automated and managed flow of information between systems. This -problem space has been around ever since enterprises had more than one system, +the term 'dataflow' is used in a variety of contexts, we use it here +to mean the automated and managed flow of information between systems. This +problem space has been around ever since enterprises had more than one system, where some of the systems created data and some of the systems consumed data. -The problems and solution patterns that emerged have been discussed and +The problems and solution patterns that emerged have been discussed and articulated extensively. A comprehensive and readily consumed form is found in the _Enterprise Integration Patterns_ <>. @@ -53,63 +53,63 @@ Laws, regulations, and policies change. Business to business agreements change. Continuous improvement occurs in production:: It is often not possible to come even close to replicating production environments in the lab. -Over the years dataflow has been one of those necessary evils in an -architecture. Now though there are a number of active and rapidly evolving -movements making dataflow a lot more interesting and a lot more vital to the -success of a given enterprise. These include things like; Service Oriented +Over the years dataflow has been one of those necessary evils in an +architecture. Now though there are a number of active and rapidly evolving +movements making dataflow a lot more interesting and a lot more vital to the +success of a given enterprise. These include things like; Service Oriented Architecture <>, the rise of the API <><>, Internet of Things <>, -and Big Data <>. In addition, the level of rigor necessary for -compliance, privacy, and security is constantly on the rise. Even still with -all of these new concepts coming about, the patterns and needs of dataflow are +and Big Data <>. In addition, the level of rigor necessary for +compliance, privacy, and security is constantly on the rise. Even still with +all of these new concepts coming about, the patterns and needs of dataflow are still largely the same. The primary differences then are the scope of -complexity, the rate of change necessary to adapt, and that at scale -the edge case becomes common occurrence. NiFi is built to help tackle these +complexity, the rate of change necessary to adapt, and that at scale +the edge case becomes common occurrence. NiFi is built to help tackle these modern dataflow challenges. The core concepts of NiFi ------------------------- NiFi's fundamental design concepts closely relate to the main ideas of Flow Based -Programming <>. Here are some of +Programming <>. Here are some of the main NiFi concepts and how they map to FBP: [grid="rows"] [options="header",cols="3,3,10"] |=========================== | NiFi Term | FBP Term| Description -| FlowFile | Information Packet | +| FlowFile | Information Packet | A FlowFile represents each object moving through the system and for each one, NiFi -keeps track of a map of key/value pair attribute strings and its associated +keeps track of a map of key/value pair attribute strings and its associated content of zero or more bytes. -| FlowFile Processor | Black Box | -Processors actually perform the work. In <> terms a processor is +| FlowFile Processor | Black Box | +Processors actually perform the work. In <> terms a processor is doing some combination of data routing, transformation, or mediation between -systems. Processors have access to attributes of a given FlowFile and its +systems. Processors have access to attributes of a given FlowFile and its content stream. Processors can operate on zero or more FlowFiles in a given unit of work and either commit that work or rollback. -| Connection | Bounded Buffer | +| Connection | Bounded Buffer | Connections provide the actual linkage between processors. These act as queues -and allow various processes to interact at differing rates. These queues +and allow various processes to interact at differing rates. These queues can be prioritized dynamically and can have upper bounds on load, which enable back pressure. -| Flow Controller | Scheduler | -The Flow Controller maintains the knowledge of how processes connect +| Flow Controller | Scheduler | +The Flow Controller maintains the knowledge of how processes connect and manages the threads and allocations thereof which all processes use. The -Flow Controller acts as the broker facilitating the exchange of FlowFiles +Flow Controller acts as the broker facilitating the exchange of FlowFiles between processors. -| Process Group | subnet | +| Process Group | subnet | A Process Group is a specific set of processes and their connections, which can -receive data via input ports and send data out via output ports. In +receive data via input ports and send data out via output ports. In this manner, process groups allow creation of entirely new components simply by composition of other components. |=========================== -This design model, also similar to <>, provides many beneficial consequences that help NiFi +This design model, also similar to <>, provides many beneficial consequences that help NiFi to be a very effective platform for building powerful and scalable dataflows. A few of these benefits include: @@ -138,7 +138,7 @@ Extensions:: There are various types of NiFi extensions which are described in other documents. The key point here is that extensions operate and execute within the JVM. FlowFile Repository:: -The FlowFile Repository is where NiFi keeps track of the state of what it knows about a given FlowFile that is presently active in the flow. The implementation of the repository is pluggable. The default approach is a persistent Write-Ahead Log located on a specified disk partition. +The FlowFile Repository is where NiFi keeps track of the state of what it knows about a given FlowFile that is presently active in the flow. The implementation of the repository is pluggable. The default approach is a persistent Write-Ahead Log located on a specified disk partition. Content Repository:: The Content Repository is where the actual content bytes of a given FlowFile live. The implementation of the repository is pluggable. The default approach is a fairly simple mechanism, which stores blocks of data in the file system. More than one file system storage location can be specified so as to get different physical partitions engaged to reduce contention on any single volume. @@ -150,45 +150,44 @@ NiFi is also able to operate within a cluster. image::zero-master-cluster.png["NiFi Cluster Architecture Diagram"] -Starting with the NiFi 1.0 release, NiFi employs a Zero-Master Clustering paradigm. Each of the nodes in a NiFi cluster performs the same tasks on the data but each operates on a different set of data. Apache ZooKeeper elects one of the nodes as the Cluster Coordinator, and failover is handled automatically by ZooKeeper. All cluster nodes report heartbeat and status information to the Cluster Coordinator. The Cluster Coordinator is responsible for disconnecting and connecting nodes. As a DataFlow manager, you can interact with the NiFi cluster through the UI of any node in the cluster. Any change you make is replicated to all nodes in the cluster, allowing for multiple entry points to the cluster. - +Starting with the NiFi 1.0 release, a Zero-Master Clustering paradigm is employed. Each node in a NiFi cluster performs the same tasks on the data, but each operates on a different set of data. Apache ZooKeeper elects a single node as the Cluster Coordinator, and failover is handled automatically by ZooKeeper. All cluster nodes report heartbeat and status information to the Cluster Coordinator. The Cluster Coordinator is responsible for disconnecting and connecting nodes. Additionally, every cluster has one Primary Node, also elected by ZooKeeper. As a DataFlow manager, you can interact with the NiFi cluster through the user interface (UI) of any node. Any change you make is replicated to all nodes in the cluster, allowing for multiple entry points. Performance Expectations and Characteristics of NiFi ---------------------------------------------------- NiFi is designed to fully leverage the capabilities of the underlying host system on which it is operating. This maximization of resources is particularly strong with -regard to CPU and disk. For additional details, see the best practices and configuration tips in the Administration Guide. +regard to CPU and disk. For additional details, see the best practices and configuration tips in the Administration Guide. For IO:: The throughput or latency one can expect to see varies greatly, depending on how the system is configured. Given -that there are pluggable approaches to most of the major NiFi subsystems, +that there are pluggable approaches to most of the major NiFi subsystems, performance depends on the implementation. But, for something concrete and broadly applicable, consider the out-of-the-box default implementations. -These are all persistent with guaranteed delivery and do so using local disk. So -being conservative, assume roughly 50 MB per second read/write rate on modest disks or RAID volumes -within a typical server. NiFi for a large class of dataflows then should be able to +These are all persistent with guaranteed delivery and do so using local disk. So +being conservative, assume roughly 50 MB per second read/write rate on modest disks or RAID volumes +within a typical server. NiFi for a large class of dataflows then should be able to efficiently reach 100 MB per second or more of throughput. That is because linear growth -is expected for each physical partition and content repository added to NiFi. This will -bottleneck at some point on the FlowFile repository and provenance repository. -We plan to provide a benchmarking and performance test template to -include in the build, which allows users to easily test their system and -to identify where bottlenecks are, and at which point they might become a factor. This template +is expected for each physical partition and content repository added to NiFi. This will +bottleneck at some point on the FlowFile repository and provenance repository. +We plan to provide a benchmarking and performance test template to +include in the build, which allows users to easily test their system and +to identify where bottlenecks are, and at which point they might become a factor. This template should also make it easy for system administrators to make changes and to verify the impact. For CPU:: The Flow Controller acts as the engine dictating when a particular processor is given a thread to execute. Processors are written to return the thread -as soon as they are done executing a task. The Flow Controller can be given a +as soon as they are done executing a task. The Flow Controller can be given a configuration value indicating available threads for the various -thread pools it maintains. The ideal number of threads to use depends on the +thread pools it maintains. The ideal number of threads to use depends on the host system resources in terms of numbers of cores, whether that system is running other services as well, and the nature of the processing in the flow. For typical IO-heavy flows, it is reasonable to make many dozens of threads to be available. For RAM:: -NiFi lives within the JVM and is thus limited to the memory space it +NiFi lives within the JVM and is thus limited to the memory space it is afforded by the JVM. JVM garbage collection becomes a very important factor to both restricting the total practical heap size, as well as optimizing how well the application runs over time. NiFi jobs can be I/O intensive when reading the same content regularly. Configure a large enough disk to optimize performance. @@ -200,12 +199,12 @@ This sections provides a 20,000 foot view of NiFi's cornerstone fundamentals, so Flow Management:: Guaranteed Delivery;; A core philosophy of NiFi has been that even at very high scale, guaranteed delivery - is a must. This is achieved through effective use of a purpose-built persistent + is a must. This is achieved through effective use of a purpose-built persistent write-ahead log and content repository. Together they are designed in such a way as to allow for very high transaction rates, effective load-spreading, copy-on-write, and play to the strengths of traditional disk read/writes. Data Buffering w/ Back Pressure and Pressure Release;; - NiFi supports buffering of all queued data as well as the ability to + NiFi supports buffering of all queued data as well as the ability to provide back pressure as those queues reach specified limits or to age off data as it reaches a specified age (its value has perished). Prioritized Queuing;; @@ -226,7 +225,7 @@ Ease of Use:: it does so in real-time. Rather than being 'design and deploy' it is much more like molding clay. If you make a change to the dataflow that change immediately takes effect. Changes are fine-grained and isolated to the affected components. You don't need to stop an entire - flow or set of flows just to make some specific modification. + flow or set of flows just to make some specific modification. Flow Templates;; Dataflows tend to be highly pattern oriented and while there are often many different ways to solve a problem, it helps greatly to be able to share those best practices. Templates @@ -235,41 +234,41 @@ Ease of Use:: Data Provenance;; NiFi automatically records, indexes, and makes available provenance data as objects flow through the system even across fan-in, fan-out, transformations, and - more. This information becomes extremely critical in supporting compliance, + more. This information becomes extremely critical in supporting compliance, troubleshooting, optimization, and other scenarios. Recovery / Recording a rolling buffer of fine-grained history;; NiFi's content repository is designed to act as a rolling buffer of history. Data is removed only as it ages off the content repository or as space is needed. This combined with the data provenance capability makes for an incredibly useful basis - to enable click-to-content, download of content, and replay, all at a specific + to enable click-to-content, download of content, and replay, all at a specific point in an object's lifecycle which can even span generations. Security:: System to System;; A dataflow is only as good as it is secure. NiFi at every point in a dataflow offers secure exchange through the use of protocols with encryption such as 2-way SSL. In addition - NiFi enables the flow to encrypt and decrypt content and use shared-keys or other mechanisms on + NiFi enables the flow to encrypt and decrypt content and use shared-keys or other mechanisms on either side of the sender/recipient equation. User to System;; NiFi enables 2-Way SSL authentication and provides pluggable authorization so that it can properly control - a user's access and at particular levels (read-only, dataflow manager, admin). If a user enters a + a user's access and at particular levels (read-only, dataflow manager, admin). If a user enters a sensitive property like a password into the flow, it is immediately encrypted server side and never again exposed on the client side even in its encrypted form. Multi-tenant Authorization;; - The authority level of a given dataflow applies to each component, allowing the admin user to have fine grained level of access control. This means each NiFi cluster is capable of handling the requirements of one or more organizations. Compared to isolated topologies, multi-tenant authorization enables a self-service model for dataflow management, allowing each team or organization to manage flows with a full awareness of the rest of the flow, to which they do not have access. - - + The authority level of a given dataflow applies to each component, allowing the admin user to have fine grained level of access control. This means each NiFi cluster is capable of handling the requirements of one or more organizations. Compared to isolated topologies, multi-tenant authorization enables a self-service model for dataflow management, allowing each team or organization to manage flows with a full awareness of the rest of the flow, to which they do not have access. + + Extensible Architecture:: Extension;; NiFi is at its core built for extension and as such it is a platform on which dataflow processes can execute and interact in a predictable and repeatable manner. Points of extension include: processors, Controller Services, Reporting Tasks, Prioritizers, and Customer User Interfaces. Classloader Isolation;; For any component-based system, dependency problems can quickly occur. NiFi addresses this by providing a custom class loader model, - ensuring that each extension bundle is exposed to a very limited set of dependencies. As a result, extensions can be built with little concern for whether - they might conflict with another extension. The concept of these extension bundles is called 'NiFi Archives' and is discussed in greater detail + ensuring that each extension bundle is exposed to a very limited set of dependencies. As a result, extensions can be built with little concern for whether + they might conflict with another extension. The concept of these extension bundles is called 'NiFi Archives' and is discussed in greater detail in the Developer's Guide. Site-to-Site Communication Protocol;; - The preferred communication protocol between NiFi instances is the NiFi Site-to-Site (S2S) Protocol. S2S makes it easy to transfer data from one NiFi instance to another easily, efficiently, and securely. NiFi client libraries can be easily built and bundled into other applications or devices to communicate back to NiFi via S2S. Both the socket based protocol and HTTP(S) protocol are supported in S2S as the underlying transport protocol, making it possible to embed a proxy server into the S2S communication. + The preferred communication protocol between NiFi instances is the NiFi Site-to-Site (S2S) Protocol. S2S makes it easy to transfer data from one NiFi instance to another easily, efficiently, and securely. NiFi client libraries can be easily built and bundled into other applications or devices to communicate back to NiFi via S2S. Both the socket based protocol and HTTP(S) protocol are supported in S2S as the underlying transport protocol, making it possible to embed a proxy server into the S2S communication. Flexible Scaling Model:: Scale-out (Clustering);; @@ -280,10 +279,10 @@ Flexible Scaling Model:: about loading, and to exchange data on specific authorized ports. Scale-up & down;; NiFi is also designed to scale-up and down in a very flexible manner. In terms of increasing throughput from the standpoint of the NiFi framework, it is possible to increase the number of concurrent tasks on the processor under the Scheduling tab when configuring. This allows more processes to execute simultaneously, providing greater throughput. On the other side of the spectrum, you can perfectly scale NiFi down to be suitable to run on edge devices where a small footprint is desired due to limited hardware resources. To specifically solve the first mile data collection challenge and edge use cases, you can find more details here: https://cwiki.apache.org/confluence/display/NIFI/MiNiFi regarding a child project effort of Apache NiFi, MiNiFi (pronounced "minify", [min-uh-fahy]). - - - + + + References ---------- [bibliography] @@ -295,4 +294,3 @@ References - [[[bigdata]]] Wikipedia. Big Data [online]. Retrieved: 27 Dec 2014, from: http://en.wikipedia.org/wiki/Big_data - [[[fbp]]] Wikipedia. Flow Based Programming [online]. Retrieved: 28 Dec 2014, from: http://en.wikipedia.org/wiki/Flow-based_programming#Concepts - [[[seda]]] Matt Welsh. Harvard. SEDA: An Architecture for Highly Concurrent Server Applications [online]. Retrieved: 28 Dec 2014, from: http://www.eecs.harvard.edu/~mdw/proj/seda/ -