美文网首页
Apache NiFi初体验

Apache NiFi初体验

作者: 多关心老人 | 来源:发表于2019-05-16 18:41 被阅读0次
  • 安装与使用
    从官网下载zip包解压,执行./bin/run-nifi.bat即可启动,默认端口8080,打开浏览器http://localhost:8080/nifi即可使用。参考 http://nifi.apache.org/quickstart.html

  • 保存和导入模板
    保存自己的process group,参考 https://community.hortonworks.com/questions/198963/how-to-export-processor-group-from-nifi-to-local-p.html
    导入模板,在左边菜单旁边的upload Template,选定文件即可。

  • build项目
    下载release-source,从github上拉代码应该也可以,按quick start上面的提示执行mvn clean install。
    如果提示maven dependency找不到,是因为nifi用到的很多jar不在maven中央仓库里,需要到apache repo或jcenter里才有。这个时候可以把本地maven的mirror指向阿里仓库(http://maven.aliyun.com/nexus/content/groups/public/)。
    build结束后会在nifi-assembly下面生成.zip,解压即可。build过程有点长,一般要10分钟以上,第一次要下载jar可能更慢。
    提示:不建议自己build 整个项目,耗时很长,可以从github或官网下载release.zip,解压即可使用。

  • 改代码后重新build部署
    自己改java代码后,如果改动比较少,可以mvn clean compile后把.class覆盖掉对应nar包里的jar包里相同文件。如果改动大, 找到代码所在bundle,执行mvn clean package会生成nar包,拷贝过去替换即可。
    package的时候建议跳过test, -Dmaven.test.skip=true; 如果改了其他包代码,需要先install到本地,否则打出来的nar包里的依赖不是最新的
    替换后要重启NiFi

  • 调试
    NiFi不支持直接在IDEA里运行(或者支持但我没找到方法)。可以在IDEA里开启远程调用。
    1、在NiFi运行目录/conf/bootstrap里把remote debug那行取消注释,然后在IDEA里设置一个Remote debug,端口默认8000,指定log文件位置为NiFi/logs/nifi-app.log就可以了。
    参考:https://community.hortonworks.com/articles/106931/nifi-debugging-tutorial.html

    image.png
    上面红框里不用写,直接<no module>即可。

在queue里面可以设置背压,objects threshold和size threshold哪个先达到就会把压力传导到upstream queue,最终达到CaptureChangeMySQL,停止消费binlog。

PutSQL的rollback on false=true,这样flow file就会停留在input queue里面,这样才会让背压起作用。
https://stackoverflow.com/questions/56374764/stop-capturechangemysql-when-putsql-failed/56374948#56374948


NIFI的坑:

  • 问题1:表结构发生变化,需要重启nifi,刷掉redis
    我们用到了CaptchureMySQLChange和ConvertJsonToSql这2个Processor,CaptchureMySQLChange会把表结构信息缓存到redis,ConvertJsonToSql就可以根据表结构把json转换成sql了,同时ConvertJsonToSql在本地还缓存了表结构,这样在CaptchureMySQLChange接受到DDL的时候,只是把redis清了,而ConvertJsonToSql还是从本地的schemaCache里取表结构,造成转换出来的sql少字段。
  • 解决方法:可以在每次表结构变化的时候,重启nifi,刷掉redis。或者CaptchureMySQLChange设置解析DDL,同时用RouteOnAttributeProcessor根据statementType来对DDL和DML进行不同的处理,在DDL的时候把ConvertJsonToSql中的schemaCache清掉。
  • 注意:CaptchureMySQLChange里是直接根据sql.startsWith("alter table")来判断是不是DDL的,如果sql是注释开头的,如/*xxx*/这种就会有问题。

-问题2:MergeContentProcessor会有一定的几率不能保证前后sql的顺序。

  • 补充:源码中用的HashMap,需要改成LinkedHashMap,这样就能按照日志的消费顺序来合并了

IDEA里运行和调试项目

1.运行NIFI


image.png

把nifi/lib/bootstrap下的jar添加到dependencies.

image.png

其中VM options指定conf和log目录在哪.

2.调试NIFI
上面运行了NIFI即使打上断点也不能调试, 需要通过Remote Debug


image.png

未解决的问题

上面在IDEA里调试,如果改了代码,不知道怎么打包让代码生效?
方法:没有方法直接在IDEA里修改代码即生效,因为nifi启动时候会从bootstrap.conf的上级目录下的lib文件夹里解压nar包,获取到.jar组装到classpath, 代码在RunNiFi.start(). 因此改完代码后需要package,拷贝到nifi/lib目录下替换.

可以在IDEA里启动RunNifi和Remote debug, 只是每次改动代码后要重新打nar包放到nifi/lib下面即可.

通过.getClass().getProtectionDomain().getCodeSource()发现加载的是.work/下面的jar,不知道为什么从这里加载? 有时间再看一下.
看上面的解释.

相关文章

  • Apache NiFi初体验

    安装与使用从官网下载zip包解压,执行./bin/run-nifi.bat即可启动,默认端口8080,打开浏览器h...

  • Apache NiFi如何工作?

    什么是Apache NiFi Apache NiFi官网对NiFi的定义如下: An easy to use, p...

  • Apache NiFi 初探

    本文是Apache NiFi 专栏的开篇,用来介绍Apache NiFi 是什么,主要解决什么问题。 在学习一个新...

  • NiFi安装(单机+集群)

    单机版安装 NIFI下载 地址:http://nifi.apache.org/download.html [图片上...

  • apache nifi使用场景

    Apache NiFi具体是做什么的? Apache NiFi适用范围 可靠安全的系统间数据传输 分发数据到分析系...

  • Apache NiFi 安装

    Apache NiFi 是一个易于使用、功能强大而且可靠的数据处理和分发系统。Apache NiFi 是为数据流设...

  • Nifi整理

    Nifi NiFi简介 Apache NiFi项目,它是一种实时数据流处理 系统,在去年由美国安全局(NSA)开源...

  • 【NiFi csv to mysql系列】一 csv to j

    Apache Nifi 文本格式转换 csv->json Abstract:本文的主要目的是展示如何使用nifi ...

  • ##Apache Nifi 开发

    //Apache Nifi 开发 - 共产主义接班人的博客 - 博客频道 - CSDN.NEThttp://blo...

  • Apache NiFi 与Falcon/Oozie异同

    概述 Apache NiFi是一个易用、强大、可靠的数据处理与分发系统。 它支持数据路由,转换等。 NiFi提供w...

网友评论

      本文标题:Apache NiFi初体验

      本文链接:https://www.haomeiwen.com/subject/rnriaqtx.html