Flume NG
代码地址,我们把代码clone下来以后就会发现,工程里集成了很多的模块,那该如何下手?
阅读官网的手册
官方手册 这里不再翻译,我们来看重点
start手册步骤中第五步:
Configure and Run Flume NG
After you’ve configured Flume NG (see below), you can run it with thebin/flume-ng
executable. This script has a number of arguments and modes.
中文翻译:
配置和运行 Flume NG, 在你配置好了 flume ng(上述的步骤)之后,你可以使用
bin/flume-ng
执行文件进行运行,这个脚本有一些参数和模式。
我们不难发现,Flume NG 的运行入口在 bin/flume-ng
中
研究 bin/flume-ng
脚本
脚本就在 flume 工程的 bin 包下,我们不对脚本进行详细介绍,直接看重点
# flume 代理类定义
FLUME_AGENT_CLASS="org.apache.flume.node.Application"
# 运行 flume 函数,java命令执行(从这个可以能够察觉到调用该函数的地方就是我们的入口函数)
run_flume() {
local FLUME_APPLICATION_CLASS
...
if [ "$#" -gt 0 ]; then
FLUME_APPLICATION_CLASS=$1
shift
else
error "Must specify flume application class" 1
fi
if [ ${CLEAN_FLAG} -ne 0 ]; then
set -x
fi
$EXEC $JAVA_HOME/bin/java $JAVA_OPTS $FLUME_JAVA_OPTS "${arr_java_props[@]}" -cp "$FLUME_CLASSPATH" \
-Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" $*
}
...
# 调用对应的命令,通过不同的参数我们发现有不同的启动入口
# finally, invoke the appropriate command
if [ -n "$opt_agent" ] ; then
run_flume $FLUME_AGENT_CLASS $args
elif [ -n "$opt_avro_client" ] ; then
run_flume $FLUME_AVRO_CLIENT_CLASS $args
elif [ -n "${opt_version}" ] ; then
run_flume $FLUME_VERSION_CLASS $args
elif [ -n "${opt_tool}" ] ; then
run_flume $FLUME_TOOLS_CLASS $args
else
error "This message should never appear" 1
fi
exit 0
根据对脚本的分析,我们不难发现启动类是:
org.apache.flume.node.Application#main
那我们要研究的就是这个类了
启动 demo
- 在 conf 目录下创建文件 flume.conf 配置文件
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
a1.sinks.k1.type = logger
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
- 运行 Application.main 函数的时候传入命令参数
--conf-file conf/flume.conf --name a1
- 运行 Application.main 函数即可