NIFI【应用 02】1.28.1版本使用实例分享(GetFile、SplitText、ExtractText、PublishKafkaRecord_2_6)配置使用及模板分享(txt文件解析)

Apache NIFI 安装过程可参考《一篇学会部署NIFI》中文文档地址 https://nifichina.github.io/ 内容很是详细,大家可以参考。没有中文文档的可查看官方文档 https://nifi.apache.org/documentation/v1/。我是 NIFI 新手,一些配置或者处理器本身的使用可能存在一些问题,发现的小伙伴儿请不吝赐教。

1.实例

本次分享的实例是读取指定目录下的文件内容,格式化后发送到 Kafka, 整体流程图如下:

2.步骤

2.1 测试数据准备

本次测试的是txt文件,NIFI 提供了CSV、Excel、JSON等类型的 Reader 但是唯独没有txt类型的,由于业务需要,本次就测试这类文件。文件内容如下:

2.2 GetFile

GetFile 处理器从有读取权限的目录下获取 FlowFiles,主要配置为 Input Directory

里边的详细设置可根据业务需要进行配置。

2.3 SplitText

SplitText 处理器回按行边界将文本文件拆分为多个较小的文本文件,主要配置为 Line Split Count每个文件有几行数据,为什么要设置为 1后边的步骤会有答案。

如果 txt 文件有 header 就需要设置 Header Line Count以忽略 header 行。执行结果:

2.4 ExtractText

ExtractText 处理器的中文《说明文档》,该处理器使用正则表达式,匹配流文件中的内容,并将匹配成功的内容输出到属性中;如果正则匹配到多个结果,默认只取第一个结果;匹配成功则流文件路由 matched,没有匹配则到 unmatched,这就是为什么 SplitText Line Split Count被设置为1了。

这个处理器需要使用正则表达式,需要一些学习的成本,这里不再赘述,用到的表达式如下:

  • 匹配 id 的 15 位数字 \d{15}
  • 匹配 number 的 14 位数字 (?<=\d{15}\s)\d{14}(前边是一个非获取匹配表达式)
  • 匹配 time 的年月日空格和时分秒 \d{1,4}-\d{1,2}-\d{1,2} ([01]?\d|2[0-3]):[0-5]?\d:[0-5]?\d(这个匹配并不严谨,年月份有可能是错误的数值)

这个应该算是本次流程里比较难配置的处理器了。执行完后可以查看 FlowFile 的属性,可以看到匹配到的 id.0,number.0,time.0,这里的 .0暂时不知道如何去掉。

2.5 AttributesToJSON

AttributesToJSON 处理器将输入流文件属性转成JSON表示形式。详细配置可参考处理器的中文使用《说明》。主要配置为 Attributes List,上个实例也用到了,这次才发现上次使用时配置的 Attributes Regular Expression是无效的,它的使用方法后续会进行探索。

步骤执行后的结果为:

2.6 PublishKafkaRecord_2_6

PublishKafkaRecord_2_6 处理器使用 Kafka 2.6 Producer API 将 FlowFile 的内容作为单独的记录发送到 Apache Kafka。主要配置为 Kafka Brokers、Topic Name、Record Reader、Record Writer,其他配置根据业务需要进行配置。

Record Reader 使用的是 JsonTreeReader由于上个流程的数据就是要写入的数据这里没有进行其他配置:

Record Writer 使用的是 JsonRecordSetWriter使用的也是默认配置:

执行成功后,使用消费者看到如下消息:

[root@tcloud bin]# kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic Nifi-Kafka
{"time.0":"2025-01-15 15:09:18","filename":"TS_666_20250115150921.txt","id.0":"123459084476912","number.0":"00000000000000"}

3.总结

弄完第二个实例还是感觉 Kettle 是比 NIFI 要容易理解,组件更加直观,NIFI 的一些配置着实让人摸不着头脑。

网盘分享:

通过网盘分享的文件:CSDN_NIFI_02

链接: https://pan.baidu.com/s/19VlC3uNgHQ4VvLuNAX7mxw?pwd=j9za 提取码: j9za

文件列表:

  • TS_666_20250115150921.txt
  • txt-json-kafka.xml(模板)
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhengme.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值