下面我们将以一个完整的流程为例来介绍flume-ng的开发过程。
一 简介
FlumeNG为flume的简化瘦身版,同时提出了新的概念。采集工具,包括source、sink、channel。
(1) Source为工具读数据,包括读取的数据源路径、读取方式
(2) Sink 为工具些数据,包括写入的数据源和写入方式
(3) Channel为工具采集渠道,包括内存控制
自定义扩展开发,一般根据需要扩充source和sink。
二 插件开发过程
1.配置
我们在本实例中的日志采集过程为:使用tail命令将追加到文件日志末尾的信息,通过内存管道,按行将其插入到hbase集群中。
一个完整的插入到hbase中的过程配置如下所示:
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
agent1.sources.source1.type = exec
agent1.sources.source1.command = tail –F/home/renzhe.log
agent1.sources.source1.batchSize = 100
# Configure Hbase Sink sink1
agent1.sinks.sink1.type =org.apache.flume.sink.hbase.HBaseSink
agent1.sinks.sink1.channel = channel1
agent1.sinks.sink1.table = longer_60
agent1.sinks.sink1.columnFamily = info
agent1.sinks.sink1.serializer =org.apache.flume.sink.hbase.SimpleHbaseEventSerializer
agent1.sinks.sink1.serializer.payloadColumn= test
# Use a channel which buffers events inmemory
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 800
agent1.channels.channel1.transactionCapactiy= 100
# Bind the source and sink to the channel
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
2.源代码
其中,org.apache.flume.sink.hbase.HBaseSink的代码如下
publicclass HBaseSink extends AbstractSink implements Configurable {
public HBaseSink() {
…
}
public HBaseSink(Configuration conf) {
…
}
@Override
publicvoid start() {
//启动
super.start();
}
@Override
publicvoid stop() {
//关闭
}
@Override
publicvoid configure(Context context) {
//配置信息
}
@Override
public Status process() throws EventDeliveryException{
//采集处理过程
}
private <T> T runPrivileged(final PrivilegedExceptionAction<T> action)
throws Exception {
…
}
}