flume客户端开发 (flume自定义source使用)

本地环境

1. apache-flume-1.8.0-src (官网*载下**源码,或者git*载下**)

2. jdk1.8

编译

1. 用Inteallij IDEA 导入已*载下**的flume工程

2. 修改`flume-parent`下的 pom.xml 添加 aliyun的仓库(加快*载下**,有些包直接从maven repository上*载下**很慢 )

 <repositories><!-- 代码库 -->
 <repository>
 <id>maven-ali</id>
 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 <releases>
 <enabled>true</enabled>
 </releases>
 <snapshots>
 <enabled>true</enabled>
 <updatePolicy>always</updatePolicy>
 <checksumPolicy>fail</checksumPolicy>
 </snapshots>
 </repository>
 </repositories>

3. 开始漫长的编译过程

如果是第一次的话,可能*载下**包要花2个多小时,中间可能会报错(报错主要是某些包没*载下**成功,此时可以手动从仓库中手动*载下**到本地,然后放在本地 的maven 包路径下,默认的本地的包路径是 C:\Users\你的用户名.m2\repository 下面)

	mvn clean
	mvn install -DskipTests -U -Dtar

4. 由于整个项目是用pom管理包和模块,十分方便,如果在整个编译过程中,某些模块你需要编译,或者编译耗时,或者编译失败,并且你暂时用不到整个模块,可以从pom中注释掉这个模块,不做编译,具体做法如下图所示(具体的根据你的需求操作即可)

flume的断点续传,flume源码解读

远程调试

1. 修改服务器上的 bin/flume-ng 中的JAVA_OPTS变量,支持远程调试

	JAVA_OPTS="-Xmx20m -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"

具体如下:

flume的断点续传,flume源码解读

2. Inteallij IDEA配置 ,远程调试

flume的断点续传,flume源码解读

flume的断点续传,flume源码解读

flume的断点续传,flume源码解读

3. 在任意代码出打上断点

flume的断点续传,flume源码解读

4. 启动flume-ng(按实际情况修改下面命令)

	bin/flume-ng agent --conf conf --conf-file ./conf/flume-custom.properties --name hd1 -Dflume.root.logger=INFO,console

启动后日志如下:

flume的断点续传,flume源码解读

5. Inteallij IDEA 开始debug,可以发现在断点处停止,debug流程成功了

flume的断点续传,flume源码解读