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
我想知道这两个属性的区别,以及roll和flush的区别。在我看来他们看起来是一样的。
在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。
我在 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
我想知道这两个属性的区别,以及roll和flush的区别。在我看来他们看起来是一样的。
在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。