案例
自定义source实现类
package com.flume.source;
import org.apache.flume.Context;
import org.apache.flume.EventDeliveryException;
import org.apache.flume.PollableSource;
import org.apache.flume.conf.Configurable;
import org.apache.flume.event.SimpleEvent;
import org.apache.flume.source.AbstractSource;
/**
* Created by HP on 2020/1/17.
*/
public class MySource extends AbstractSource implements Configurable,PollableSource{
//定义全局的前缀&后缀
private String prefix;
private String subfix;
private int delay;
/**
* 1、接受数据(自定义业务数据来源,可为JDBC或者本地/网络文件系统等等等)
* 2、封装为事件
* 3、将事件传给channel
* @return
* @throws EventDeliveryException
*/
@Override
public Status process() throws EventDeliveryException {
Status status=null;
try {
//1、接受数据 模拟创建100条数据,每条数据的生成睡眠2秒中
for (int i = 0; i < 100; i++) {
//2、构建事件对象
SimpleEvent event=new SimpleEvent();
//3、给事件设置值
event.setBody((prefix+"--"+i+"--"+subfix).getBytes());
//4、将事件传给channel
getChannelProcessor().processEvent(event);
//设置每次循环的间隔事件,防止数据写入太快,不方便测试
Thread.sleep(delay);
status=status.READY;//就绪状态
}
} catch (InterruptedException e) {
e.printStackTrace();
status=status.BACKOFF;//退避状态
}
return status;
}
@Override
public long getBackOffSleepIncrement() {
return 0;
}
@Override
public long getMaxBackOffSleepInterval() {
return 0;
}
@Override
public void configure(Context context) {
//读取配置信息,给前后缀赋值
prefix=context.getString("prefix");
subfix=context.getString("subfix","+++++");
delay=context.getInteger("delay",1000);
}
}
打包上传到/opt/apache-flume-1.7.0-bin/
agent配置文件
#定义
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#source
a1.sources.r1.type = com.flume.source.MySource
a1.sources.r1.prefix = HAHA
a1.sources.r1.subfix = HEHE
a1.sources.r1.delay = 1500
#channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#sink
#控制台日志打印
a1.sinks.k1.type = logger
#关联关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1