flume 调优配置
参数解释
channel
type
必填:memory
capacity
默认值:100
解释:通道中存储的最大事件数
transactionCapacity
默认值:100
解释:每次channel从source获取事件或推送给sink的最大事件数
keep-alive
默认值:3s
解释:添加或删除事件的超时时间(以秒为单位)
byteCapacityBufferPercentage
默认值:20
解释:定义byteCapacity和通道中所有事件的估计总大小之间的缓冲区百分比,以说明报头中的数据。见下文。
byteCapacity
解释:允许的最大内存总字节数,此通道中所有事件的总和。该实现仅计算事件主体,这也是提供byteCapacityBufferPercentage配置参数的原因。默认值是等于JVM可用最大内存的80%的计算值(即,命令行中传递的-Xmx值的80%)。请注意,如果您在单个JVM上具有多个内存通道,并且它们恰好持有相同的物理事件(即,如果您正在使用来自单个源的复制通道选择器),则出于通道字节容量的目的,可能会对这些事件大小进行重复计算。将此值设置为0将导致该值回落到大约200 GB的内部硬限制。
source
flumeBatchSize || BatchSize
解释:批处理中写入通道的最大消息数。
sink
flumeBatchSize || BatchSize
解释:一个批处理中要处理多少条消息。更大的批可以提高吞吐量,同时增加延迟。
channel.capacity
channel.transactionCapacity
source.batchSize
sink.flumeBatchSize
source->channel参数配置
source.batchSize <= channel.transactionCapacity <= channel.capacity
一批写入数量<=获取数量 <= 存储数量
否则:
写入1000个event,channel一次获取100个,获取10次
写入1000个event,channel一次获取1000个,获取1次,节省调用9次api的性能
同理:
每次获取1000个,存储最大值为100个,存储十次,中间还要等sink完后再去存储
channel->sink参数配置
针对sink.flumeBatchSize,其实就可以根据业务下游处理延迟性调整,
在不考虑flume所在服务器和flume本身性能的情况下
如果需要实时性非常高,就可以降低sink.flumeBatchSize参数
反之就调高。
当然有的sink也有双规则模式,例如sink先达到时间就去拉取数据,先达到处理消息数就去拉取数据,不要固定技术思维。
所以参数不能乱调,要根据服务器资源、业务调整延迟性,遵循内部流程规则最大程度使用框架优势。