Flume HDFS Sink Flush 和 Roll 之间的区别

Difference between Flume HDFS Sink Flush and Roll

我在 Flume 文档中遇到了 HDFS Sink 的两个配置属性:

hdfs.rollCount  Number of events written to file before it rolled (0 = never roll based on number of events)

hdfs.batchSize  number of events written to file before it is flushed to HDFS

我想知道这两个属性的区别,以及rollflush的区别。在我看来他们看起来是一样的。

在HDFS Sink中,roll表示关闭当前文件,将即将发生的事件写入新文件。在这个 sink 中有 3 种不同的滚动方式,它们是 rollCount、rollInterval 和 rollSize。

批次用于确定您希望从频道提交的频率。当您使用文件通道时,这会有很大帮助。由于每次提交都会从通道中删除事件,因此更少的提交调用会导致更少的随机 I/O 到磁盘和更好的吞吐量。

Roll表示sink会通过从文件名中移除hdfs.inUseSuffix(默认为"tmp")来关闭当前文件,并将传入的事件写入新文件,直到再次到达极限和整个循环继续。

Flush是将缓存在内存缓冲区中的N个文件一次写入HDFS,其中N在hdfs.batchSize中定义。例如,如果 hdfs.batchSize 定义为 100,而不是 100 个单独的 IO 操作,只会发生一个大的 IO 操作,一次写出所有 100 个文件,以减少打开和关闭流的 IO 开销。

hdfs.rollCount 定义每个文件中的最大事件数,hdfs.batchSize 定义内存缓冲区中的最大事件数。在某些情况下,滚动和刷新发生在达到阈值之前,例如,当 flume 代理关闭时,当前文件将被关闭,而不一定包含 hdfs.rollCount 事件,所有剩余的事件都在内存缓冲区将被刷新到 HDFS。