应该应该可以的。
这样配置试下
a1.channels = c1
a1.sinks = k1
a1.sinks.k1.type = file_roll
a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /var/log/flume
############################################
File Roll Sink
Stores events on the local filesystem. Required properties are in bold.
Property NameDefaultDescription
channel
–
type
–
The component type name, needs to be file_roll.
sink.directory
–
The directory where files will be stored
sink.rollInterval
30
Roll the file every 30 seconds. Specifying 0 will disable rolling and cause all events to be written to a single file.
sink.serializer
TEXT
Other possible options include avro_event or the FQCN of an implementation of EventSerializer.Builder interface.
batchSize
100
1.基本属性
2.MemoryChannel有一个内部类 MemoryTransaction ,也是整个事务保证最重要的类,后面第三部分专门讨论。
3.创建一个Object当做队列锁, *** 作队列的时候保证数据的一致性
4.使用LinkedBlockingDeque queue维持一个队列,队列的两端分别是source和sink。
用queueStored来保存queue中当前的保存的event的数目,后面tryAcquire方法可以判断是否可以take到一个event,用queueRemaining来保存queue中当前可用的容量,可以用来判断当前是否有可以提交一定数量的event到queue中。
5.有一个属性是 private ChannelCounter channelCounter,就是把channel的一些属性封装了一下
6.提供了估计Event大小(即所占的字节数)的方法
1. capacity , transCapacity , byteCapacityBufferPercentage , keepAlive 都是用默认的或者传入的参数,注意 byteCapacity ,这里将其抽象化为 slot 的概念,比如你的 -Xmx 参数设置的是2048m,其他参数都选择默认,则 byteCapacity=((2048*0.8)*1024*1024*0.8)/100,结果取整数
2.创建队列及其相关信号量
1.基本属性
2.构造器
3.核心方法解读
MemoryChannel的逻辑相对简单,主要是通过MemoryTransaction中的putList、takeList与MemoryChannel中的queue打交道,这里的queue相当于持久化层,只不过放到了内存中,如果是FileChannel的话,会把这个queue放到本地文件中。下面表示了Event在一个使用了MemoryChannel的agent中数据流向:
source --->putList --->queue --->takeList --->sink
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)