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