设置
设置代理
Flume 代理配置存储在本地配置文件中。这是一个遵循 Java 属性文件格式的文本文件。可以在同一配置文件中指定一个或多个代理的配置。配置文件包括代理中每个源,接收器和通道的属性以及它们如何连接在一起以形成数据流。
配置各个组件
流中的每个组件(源,接收器或通道)都具有特定于类型和实例化的名称,类型和属性集。例如,Avro 源需要主机名(或 IP 地址)和端口号来接收数据。内存通道可以具有最大队列大小(“容量”),HDFS 接收器需要知道文件系统 URI,创建文件的路径,文件轮换频率(“hdfs.rollInterval”)等。组件的所有此类属性需要在托管 Flume 代理的属性文件中设置。
将各个部分连接在一起
代理需要了解要加载的各个组件以及它们如何连接以构成流程。这是通过列出代理中每个源,接收器和通道的名称,然后为每个接收器和源指定连接通道来完成的。例如,代理通过名为 file-channel 的文件通道将事件从名为 avroWeb 的 Avro 源流向 HDFS sink hdfs-cluster1。配置文件将包含这些组件的名称和文件通道,作为 avroWeb 源和 hdfs-cluster1 接收器的共享通道。
启动代理
使用名为 flume-ng 的 shell 脚本启动代理程序,该脚本位于 Flume 发行版的 bin 目录中。您需要在命令行上指定代理名称,config 目录和配置文件:
$ bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template
现在,代理将开始运行在给定属性文件中配置的源和接收器。
一个简单的例子
在这里,我们给出一个示例配置文件,描述单节点 Flume 部署。此配置允许用户生成事件,然后将其记录到控制台。
# example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
此配置定义名为 a1 的单个代理。 a1 有一个侦听端口 44444 上的数据的源,一个缓冲内存中事件数据的通道,以及一个将事件数据记录到控制台的接收器。配置文件命名各种组件,然后描述其类型和配置参数。给定的配置文件可能会定义几个命名的代理当一个给定的 Flume 进程启动时,会传递一个标志,告诉它要显示哪个命名代理。
鉴于此配置文件,我们可以按如下方式启动 Flume:
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
请注意,在完整部署中,我们通常会包含一个选项: --conf=<conf-dir>
。 <conf-dir>
目录将包括一个 shell 脚本 flume-env.sh 和一个 log4j 属性文件。在这个例子中,我们传递一个 Java 选项来强制 Flume 登录到控制台,我们没有自定义环境脚本。
从一个单独的终端,我们可以 telnet 端口 44444 并向 Flume 发送一个事件:
$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
Hello world! <ENTER>
OK
原始的 Flume 终端将在日志消息中输出事件。
12/06/19 15:32:19 INFO source.NetcatSource: Source starting
12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }
恭喜 - 您已成功配置并部署了 Flume 代理!后续部分更详细地介绍了代理配置。
在配置文件中使用环境变量
Flume 能够替换配置中的环境变量。例如:
a1.sources = r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = ${NC_PORT}
a1.sources.r1.channels = c1
注意:它目前仅适用于值,不适用于键。 (即仅在配置行的=标记的“右侧”。)
通过设置 propertiesImplementation = org.apache.flume.node.EnvVarResolverProperties,可以通过代理程序调用上的 Java 系统属性启用此功能。
- 例如::
$ NC_PORT = 44444 bin / flume-ng agent -conf conf -conf-file example.conf -name a1 -Dflume.root.logger = INFO,console -DpropertiesImplementation = org.apache.flume.node.EnvVarResolverProperties
请注意,上面只是一个示例,可以通过其他方式配置环境变量,包括在 conf / flume-env.sh 中设置。
记录原始数据
在许多 生产环境 环境中记录流经摄取管道的原始数据流不是所希望的行为,因为这可能导致泄漏敏感数据或安全相关配置(例如密钥)泄漏到 Flume 日志文件。默认情况下,Flume 不会记录此类信息。另一方面,如果数据管道被破坏,Flume 将尝试提供调试问题的线索。
调试事件管道问题的一种方法是设置一个连接到 Logger Sink 的附加 Memory Channel ,它将所有事件数据输出到 Flume 日志。但是,在某些情况下,这种方法是不够的。
为了能够记录事件和配置相关的数据,除了 log4j 属性外,还必须设置一些 Java 系统属性。
要启用与配置相关的日志记录,请设置 Java 系统属性 -Dorg.apache.flume.log.printconfig=true
。这可以在命令行上传递,也可以在 JAVA_OPTS
中设置
flume-env.sh 中的变量。
要启用数据记录,请设置 Java 系统属性 -Dorg.apache.flume.log.rawdata=true
以与上述相同的方式。对于大多数组件,还必须将 log4j 日志记录级别设置为 DEBUG 或 TRACE,以使特定于事件的日志记录显示在 Flume 日志中。
下面是启用配置日志记录和原始数据日志记录的示例,同时还将 Log4j 日志级别设置为 DEBUG 以用于控制台输出:
$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=DEBUG,console -Dorg.apache.flume.log.printconfig=true -Dorg.apache.flume.log.rawdata=true
基于 Zookeeper 的配置
Flume 通过 Zookeeper 支持代理配置。这是一个实验性功能。配置文件需要在可配置前缀下的 Zookeeper 中上传。配置文件存储在 Zookeeper 节点数据中。以下是代理 a1 和 a2 的 Zookeeper 节点树的外观
- /flume
|- /a1 [Agent config file]
|- /a2 [Agent config file]
上载配置文件后,使用以下选项启动代理
$ bin / flume-ng agent -conf conf -z zkhost:2181,zkhost1:2181 -p / flume -name a1-Dflume.root.logger = INFO,控制台
参数名称 | 默认 | 说明 |
---|---|---|
z | - | Zookeeper 连接字符串。以逗号分隔的主机名列表:port |
p | / flume | Zookeeper 中用于存储代理配置的基本路径 |
安装第三方插件
Flume 拥有完全基于插件的架构。虽然 Flume 附带了许多开箱即用的信号源,信道,接收器,串行器等,但许多实现都与 Flume 分开运行。
虽然通过将他们的 jar 添加到 flume-env.sh 文件中的 FLUME_CLASSPATH 变量中,始终可以包含自定义 Flume 组件,但 Flume 现在支持一个名为 plugins.d
的特殊目录。
它会自动获取以特定格式打包的插件。这样可以更轻松地管理插件打包问题,以及更简单的调试和几类问题的故障排除,尤其是库依赖性冲突。
plugins.d 目录
plugins.d
目录位于 $FLUME_HOME/plugins.d
。在启动时, flume-ng
启动脚本查看 plugins.d
符合以下格式的插件目录,并在启动时将它们包含在正确的路径中 java
。
插件的目录布局
plugins.d
中的每个插件(子目录)
最多可以有三个子目录:
lib - 插件的 jar(s)
libext - 插件的依赖 jar
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 支持许多从外部来源摄取数据的机制。
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 源。
执行命令
有一个 exec 源执行给定的命令并消耗输出。输出的单个“线”即。文本后跟回车符('\ r')或换行符('\ n')或两者一起。
网络流
Flume 支持以下机制从常用日志流类型中读取数据,例如:
Avro
节俭
Syslog
Netcat
设置多代理流程
为了跨多个代理或跳数据流,先前代理的接收器和当前跳的源需要是 avro 类型,接收器指向源的主机名(或 IP 地址)和端口。
合并
日志收集中非常常见的情况是大量日志生成客户端将数据发送到连接到存储子系统的少数消费者代理。例如,从数百个 Web 服务器收集的日志发送给写入 HDFS 集群的十几个代理。
这可以通过使用 avro 接收器配置多个第一层代理在 Flume 中实现,所有这些代理都指向单个代理的 avro 源(同样,您可以在这种情况下使用 thrift 源/接收器/客户端)。第二层代理上的此源将接收的事件合并到单个信道中,该信道由信宿器消耗到其最终目的地。
多路复用流程
Flume 支持将事件流多路复用到一个或多个目的地。这是通过定义可以复制或选择性地将事件路由到一个或多个信道的流复用器来实现的。
上面的例子显示了来自代理“foo”的源代码将流程扩展到三个不同的通道。扇出可以复制或多路复用。在复制流的情况下,每个事件被发送到所有三个通道。对于多路复用情况,当事件的属性与预配置的值匹配时,事件将被传递到可用通道的子集。例如,如果一个名为“txnType”的事件属性设置为“customer”,那么它应该转到 channel1 和 channel3,如果它是“vendor”,那么它应该转到 channel2,否则转到 channel3。可以在代理的配置文件中设置映射。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论