缓冲区技术可以带来非常棒的数据写入性能提升,因此在网络传输、文件IO操作中应用都非常广泛,但是缓冲区技术在带来性能提升的同时,也派生出一个典型的问题:缓冲区一般都会设定一个缓冲区大小,只有当缓冲区数据满了或者强制Flush缓冲区数据,才会触发缓冲区数据落盘处理,如果数据源头迟迟没有往缓冲区添加数据,外部又没有触发强制Flush缓冲区操作,由于缓冲区数据未满,这样数据会一直驻留在缓冲区内存中,迟迟不能写入目标库,导致用户无法看到或者查询到这些数据:
bboss文件输出插件同样采用了缓冲区技术,这样有助于将数据高速写入文件,为了避免出现缓冲区数据不满的情况下,数据迟迟不能写入文件,bboss引入了数据写入空闲时间阈值配置机制,定时检查数据写入缓冲区空闲时间,一旦达到数据写入缓冲区空闲时间达到指定的阈值,缓冲区有数据,则强制flush数据到文件中,保证数据及时落盘处理。
bboss文件输出插件写入空闲时间阈值配置及控制机制说明:
maxForceFileThreshold 单位:秒,设置文件数据写入空闲时间阈值,如果空闲时间内没有数据到来,则进行文件切割或者flush数据到文件处理。文件切割记录规则:达到最大记录数或者空闲时间达到最大空闲时间阈值,进行文件切割 。如果不切割文件,达到最大最大空闲时间阈值,当切割文件标识为false时,只执行flush数据操作,不关闭文件也不生成新的文件,否则生成新的文件。本属性适用于文件输出插件与kafka、mysql binlog 、fileinput等事件监听型的输入插件配合使用,其他类型输入插件无需配置(因为调度作业任务结束时会强制flush缓冲区数据)。
切割文件配置实例:
fileOutputConfig.setMaxFileRecordSize(100);//达到最大记录数100,切割文件
fileOutputConfig.setMaxForceFileThreshold(60);//默认每5秒扫描,上次写入数据后,是否已经超过60秒没有新数据写入,如果没有并且缓存中有数据,则切割生成文件,否则不做任何处理
flush数据配置实例:
//fileOutputConfig.setMaxFileRecordSize(100);//注释掉切割文件功能,达到最大记录数100,切割文件
fileOutputConfig.setMaxForceFileThreshold(60);//默认每5秒扫描,上次写入数据后,是否已经超过60秒没有新数据写入,如果没有并且缓存中有数据,则flush数据,否则不做处理
Excel输出插件不支持仅flush功能,如果设置了maxForceFileThreshold时,必须设置MaxFileRecordSize,进行文件切割。
bboss插件使用指南:
https://esdoc.bbossgroups.com/#/datatran-plugins
bboss视频教程