[ 
https://issues.apache.org/jira/browse/NIFI-4569?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16248438#comment-16248438
 ] 

Yuri commented on NIFI-4569:
----------------------------

Hello Eric,
concerning your points under the *Development workflow* section. The [NiFi 
Registry|https://nifi.apache.org/registry.html] subproject aims to deal with 
the workflow management. You can check [the current 
efforts|https://issues.apache.org/jira/projects/NIFIREG].

> Brief summary of a newbie journey into NiFi
> -------------------------------------------
>
>                 Key: NIFI-4569
>                 URL: https://issues.apache.org/jira/browse/NIFI-4569
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Core Framework, Docker
>    Affects Versions: 1.4.0
>            Reporter: Eric Chaves
>            Priority: Minor
>
> Hi folks,
> As requested at Nifi's User mailing list, I'm compiling a small briefing of 
> my experience as a new user working with NiFi. This report includes some 
> feedback while I was learning NiFi following some tutorial and articles found 
> on the internet.
> In particular, after scouting the internet and reading NiFi's docs, I first 
> tried to write some custom flows using scripted processors and scripted 
> services.
> Most of the troubles I've faced I attribute to my lack of expertise with 
> Java/Groovy plus my small knowledge with NiFi's architecture. I did faced 
> some inconsistencies however that may be eased for newcomers like me in 
> future releases.
> *Development workflow*
> To write my flows I'm using the official docker image (apache/nifi:1.4.0) 
> together with other images like mysql, mongodb and localstack (to simulate 
> AWS services).
> It took me a while to properly setup a working folder using docker. When I 
> simple run the container without any volume binded to my local host, NiFi 
> started properly because all the required files are already present in conf 
> dir. This setup works fine for trying NiFi out but is not good as development 
> starting point because changes may be lost due to container rebuilt.
> To address this I first attempted to bind volumes for ./conf and ./logs 
> folder but this didn't worked as expected because this produced and empty 
> ./conf folder that prevents nifi from starting. To get this right was a 
> little hard and I only did it after looking at some github's projects to 
> compare they're ./conf dir with NiFi's default configuration inside the 
> docker image. 
> _- *Suggestion #1*: NiFi shoud created default configuration files when no 
> file is present in ./conf_
> After getting my docker right I started creating some flows following some 
> Hortonworks tutorials and others website (like Matt's blog) and the first 
> thing that confused me was the lack of a simple to get a new blank canvas. In 
> order to do so I need to stop all components, delete processors and groups, 
> ports and etc.
> _- *Suggestion #2*: Add an "new canvas" button to the operations pallete (or 
> somewhere else)._
> At this point I started writing some flows that I would like to keep under 
> version control and there is no simple way for that. NiFi's canvas is kept in 
> a gzip file which is not ideal for version control and the current way of 
> exporting a canvas requires us to save it as template and then export the 
> template. This process seems ok when we have finished a flow and want to 
> export it for future use as an actual template but is not good for small 
> commits while working in the flow (WIP commits). A better approach would be 
> to have the flowfile as xml directly under source control.
> _- *Suggestion #3*: Enable a configuration mode to kept the current canva as 
> pure xml instead of  GZipped file._
> *Writing Custom Processors*
> Not much to be said here. The experience was awesome. The developers guide is 
> very good and Matt's 3 post 'nifi scripting cookbooks' are priceless. Those 
> cookbooks should be added to the default documentation.
> Two things hit me here: I assumed that all JAR used by NiFi's default 
> processors were available for use by a script processor (requiring it only to 
> be imported) but that is not the case and I needed to re-add some JAR's (like 
> javax.mail or AWS java sdk) to the script's modules folder. That was not 
> intuitive for me but maybe because I'm not a Java developer. I also had a 
> trouble with java loading proper handlers for mime types (something related 
> to javax.mail) that blocked me to use Groovy for a custom script write 
> multipart mime messages (I ended writing it in python).
> - *Suggestion #4*: Make clear which JAR files are available by default inside 
> a script processor and which are not and how to properly configure the system 
> class loader.
> *Writing Custom Services*
> I'm working on a custom flow that needs to enrich some data records. Since I 
> had successfully wrote some processors scripts I tried to script a custom 
> LookupService and after googling around I used two sources as reference: 1) 
> An Andy Lopresto script found at gist and 2) the test_lookup_inline.groovy at 
> NiFi's source code.
> I made some mistakes and my script lookup was not working so I decided to log 
> some info in order to troubleshoot my code but no information was logged. 
> That's when I noticed that my docker image was not producing any logs. I read 
> the administrator guide to see If I was missing something at bootstrap.conf 
> file but my file was ok according to the docs.
> It was only when I scouted the logback.xml file that I noticed an variable 
> "bootstrap.conf.dir" somewhere and that hinted me to try adding a "log.dir=" 
> key to the bootstrap.conf file. At this time I also found that I had the 
> wrong permissions on my local log folder which was probably the reason why no 
> logs were being written. Since I made both changes at once I can't say for 
> sure which one fixed the logs.
> Only once I got the nifi-user.log properly working that I could see the 
> exception was being raised (because there wasn't a log object) and that was 
> the whole error. Once fixed the scripted lookup worked like a charm.
> Matt explained in the user's list the reasons why there is no log by default 
> on controller services and it makes sense however as a user I got a little 
> lost because when configuring processors I can set the log level very easily 
> but when comes to ControllerServices the dialog has no mention about how or 
> where log is done. 
> The same thing happens when I was editing my script code and re-running. With 
> processors I point the script file and in order to have it reloaded in case 
> of changes I only need to stop/start the processor. 
> For scripted services I assumed that disabling/enabling them would had the 
> same effect but that was not the case. Once enabled I could only had it 
> reloaded by stoping my docker container and starting it again. It took me a 
> while before I could figured out that my new code was not being loaded and 
> instead the previous versions still in use (even after disabling/enabling it).
> - *Suggestion #5*: Improve UX consistency between processor configuration and 
> controller services configuration. Allow service's code reload with 
> enable/disable and add some link for how to properly log service messages. 
> Expose a log object on scripted components by default.
> - *Suggestion #6*: Add a section into developer guide explaining the default 
> interfaces (like LookupServices) and how they should be implemented/extended
> Anyway I'm really enjoying NiFi and day after day it's becoming easier to 
> understand it's component's model.
> Great work guys and thanks for such a great software!!



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to