本文已参与「新人创作礼」活动,一起开启掘金创作之路。
安装第三方插件
Flume有一个完全基于插件的架构。 虽然Flume带有许多开箱即用的源,通道,接收器,序列化器等,但存在许多与Flume分开发布的实现。 尽管通过在Flume-env.sh文件中将其jar包添加到==FLUME_CLASSPATH #ec1d0e==变量中可以包含自定义的Flume组件,但Flume现在支持一个名为==plugins.d #ec1d0e==的特殊目录,该目录自动获取以特定格式打包的插件。 这样可以更轻松地管理插件打包问题,以及简化几类问题的调试和故障排除,尤其是库依赖性冲突。
1. plugins.d目录
plugins.d目录位于$ FLUME_HOME/plugins.d。启动时,flume-ng start脚本在plugins.d目录中查找符合以下格式的插件,并在启动java时将它们包含在适当的路径中。
2. 插件的目录设计
plugins.d中的每个插件(子目录)最多可以有三个子目录:
lib - 插件的jar(s)
libext - 插件的依赖jar(s)
native - 任何所需的本机库,如.so文件
plugins.d目录中的两个插件的示例:
plugins.d/\
plugins.d/custom-source-1/
plugins.d/custom-source-1/lib/my-source.jar
plugins.d/custom-source-1/libext/spring-core-2.5.6.jar
plugins.d/custom-source-2/
plugins.d/custom-source-2/lib/custom.jar
plugins.d/custom-source-2/native/gettext.so
数据的获取
Flume支持从外部获取数据的多种机制
1. RPC
包含在Flume发行版中的Avro客户端可以使用avro RPC机制将给定的文件发送到Flume Avro源代码:
$ bin/flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10\
上面的命令会将/usr/logs/log.10的内容发送到监听端口的Flume源。
2. 执行命令
有一个exec源执行给定的命令并消耗输出。即输出的单一“行”。文本后跟回车符('\ r')或换行符('\ n')或两者一起。
3. 网络流
Flume支持以下机制从常见的日志流类型中读取数据,例如:Avro、Thrift、Syslog、Netcat。
设置多个agent模式
为了使数据在多个代理或跳跃之间流动,前一个代理的接收器和当前跳跃的来源必须是指向源的主机名(或IP地址)和端口的接收器。
多agent合并模式
日志收集中非常常见的情况是大量的日志生成客户端将数据发送到连接到存储子系统的少数consumer agents。 例如,从数百个Web服务器收集的日志发送给十几个写入HDFS集群的agents。
这可以在Flume中通过配置多个第一层agents和一个avro sink来实现,所有代理都指向单一agent的一个avro source(在这种情况下,您也可以使用thrift sources/sinks/clients)。 第二层agent上的这个source将接收到的事件整合到单个通道中,由通道传送到最终目的地。
多路复用模式
Flume支持将事件流复用到一个或多个目的地。 这是通过定义一个流复用器来实现的,该复用器可以复制或选择性地将一个事件路由到一个或多个通道。
上面的例子显示了一个来自代理“foo”的信息源,将信息流分成三个不同的channel。这fan out可以复制或复用。 在复制流程的情况下,每个事件被发送到所有三个通道。对于复用情况,事件的属性与预先配置的值相匹配时,将事件传递给可用通道的子集。例如,如果一个名为“txnType”的事件属性被设置为“customer”,那么它应该转到channel1和channel3,如果它是“vendor”,那么它应该转到channel2,否则通道3。 映射可以在agent的配置文件中设置。
这种模式,有两种方式,一种是用来复制,另一种是用来分流。配置文件中指定selector的type的值为replication:复制。配置文件中指定selector的type的值为Multiplexing:分流。