SpoolDirectorySource使用及源码分析
时间: 2024-01-07 20:02:36 浏览: 226
SpoolDirectorySource 是 Flume 中的一个 Source,它的作用是监控一个本地目录下的文件,并将文件内容作为事件发送到 Flume 的下一个节点进行处理。下面是 SpoolDirectorySource 的使用方法及源码分析:
1. 使用方法
首先,在 Flume 的配置文件中添加 SpoolDirectorySource:
```
# 声明一个 SpoolDirectorySource
agent.sources.dir_source.type = spooldir
agent.sources.dir_source.spoolDir = /path/to/spool/dir
agent.sources.dir_source.fileSuffix = .txt
agent.sources.dir_source.fileHeader = true
agent.sources.dir_source.basenameHeader = true
agent.sources.dir_source.ignorePattern = ^\.
agent.sources.dir_source.deletePolicy = never
agent.sources.dir_source.deserializer = org.apache.flume.sink.solr.morphline.BlobDeserializer$Builder
agent.sources.dir_source.deserializer.maxBlobLength = 1000000
agent.sources.dir_source.deserializer.outputField = body
agent.sources.dir_source.selector.type = replicating
```
其中,`agent.sources.dir_source.spoolDir` 表示需要监控的本地目录,`agent.sources.dir_source.fileSuffix` 表示文件后缀名,`agent.sources.dir_source.ignorePattern` 表示需要忽略的文件名,`agent.sources.dir_source.deletePolicy` 表示处理文件的删除策略,`agent.sources.dir_source.deserializer` 表示使用的反序列化器。
接下来启动 Flume,SpoolDirectorySource 就开始监控目录下的文件了。
2. 源码分析
SpoolDirectorySource 的源码在 `spooling-directory-source` 模块中,主要包含以下几个部分:
- 目录监控
目录监控使用的是 Apache 的 `Commons IO` 库,SpoolDirectorySource 会定时扫描目录下的文件,如果有新文件或修改过的文件,就会将文件内容读取出来并发送到下一个节点。
- 文件删除策略
SpoolDirectorySource 支持三种文件删除策略:`NEVER`、`IMMEDIATE` 和 `DELAY`。`NEVER` 表示不删除文件,`IMMEDIATE` 表示在文件被处理后立即删除,`DELAY` 表示在文件被处理后延时删除。
- 反序列化器
SpoolDirectorySource 支持多种反序列化器,可以根据需要进行配置。反序列化器的作用是将文件内容转换成可读的事件。
- 事件发送
SpoolDirectorySource 会将读取到的事件发送到下一个节点。发送方式可以是同步或异步,同步方式会等待下一个节点的响应,异步方式则不会等待。
以上就是 SpoolDirectorySource 的使用方法及源码分析。
阅读全文