Flume - MemoryChannel源码解析

本文详细解析了Flume的MemoryChannel组件,包括configure方法中的配置参数如容量、事务容量、内存使用百分比等。还介绍了MemoryChannel的信号量机制,用于事务控制和防止容量越界。MemoryTransaction类作为核心,实现了数据的存取操作。数据流程从source经putList到queue,再由takeList传递给sink。MemoryChannel在内存限制下可能造成数据丢失,且进程崩溃会导致数据丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MemoryChannel的简易类结构:

 

内部类MemoryTransaction的简易类结构:

一,configure(Context context)

    1,capacity:MemroyChannel的容量,默认是100。

    2,transCapacity:每个事务最大的容量,也就是每个事务能够获取的最大Event数量。默认也是100。

    3,byteCapacityBufferPercentage:定义Channle中Event所占的百分比,需要考虑在Header中的数据。

    4,byteCapacity:byteCapacity等于设置的byteCapacity值或堆的80%乘以1减去byteCapacityBufferPercentage的百分比,然后除以100。源码如下:

 

    try {
      byteCapacity = (int)((context.getLong("byteCapacity", defaultByteCapacity).longValue() * (1 - byteCapacityBufferPercentage * .01 )) /byteCapacitySlotSize);
      if (byteCapacity < 1) {
        byteCapacity = Integer.MAX_VALUE;
      }
    } catch(NumberFormatException e) {
      byteCapacity = (int)((defaultByteCapacity * (1 - byteCapacityBufferPercentage * .01 )) /byteCapacitySlotSize);
    }

 

    5,keep-alive:增加和删除一个Event的超时时间(单位:秒)

    6,初始化LinkedBlockingDeque对象,大小为capacity。以及各种信号量对象。

    7,最后初始化计数器。

 

二,信号量

MemoryChannel有三个信号量用来控制事务,防止容量越界。这三个信号量分别是:

queueRemaining : 表示空闲的容量大小。

queueStored : 表示已经存储的容量大小。

bytesRemaining : 表示可以使用的内存大小。该大小就是计算后的byteCapacity值。

 

三,MemoryTransaction

MemoryTransaction用来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值