尝试回答 Flume 面试题
来源:4-23 【夯实学习成果,攻克面试官】Flume面试题
慕瓜4434475
2020-10-17
1、描述Flume拦截器开发过程中的核心方法有哪几个以及各自作用是什么?拦截器带来的优缺点各是什么
initialize():初始化,处理 Event
intercept(Event event):处理单个事件
intercept(List events):处理多个事件
close():资源释放
缺点:
Flume中拦截器的作用就是对于event中header的部分可以按需塞入一些属性,当然你如果想要处理event的body内容,也是可以的,但是event的body内容是系统下游阶段真正处理的内容,如果让Flume来修饰body的内容的话,那就是强耦合了,这就违背了当初使用Flume来解耦的初衷
2、Channel Selector中的replicating和multiplexxing各是什么含义
一个是复制,一个是分流
复制:可以将最前端的数据源复制多份,分别传递到多个channel中,每个channel接收到的数据都是相同的
分流:selector可以根据header的值来确定数据传递到哪一个channel
3、自定义开发实现TailDirSource支持递归文件夹数据的实时收集
修改org.apache.flume.source.taildir.ReliableTaildirEventReader类的getMatchFiles 方法
修改并新增两个方法:
private List getMatchFiles(File parentDir, final Pattern fileNamePattern) {
List result = Lists.newArrayList();
for(File f: getAllFiles(parentDir)){
String fileName = f.getName();
if (fileNamePattern.matcher(fileName).matches()) {
result.add(f);
}
}
Collections.sort(result, new TailFile.CompareByLastModifiedTime());
return result;
}
private List getAllFiles(File parentDir){
List fileList = Lists.newArrayList();
getAllFiles(parentDir,fileList);
return fileList;
}
private void getAllFiles(File parentDir,List fileList){
File[] files = parentDir.listFiles();
if(null != files){
for(File file: parentDir.listFiles()){
if(file.isDirectory()){
getAllFiles(file,fileList);
}else{
fileList.add(file);
}
}
}
}
1回答
-
Michael_PK
2020-10-17
递归这个效果是否测试过,还有就是offset都正确不。
00
相似问题