Apache—Flume实践

flume下载链接:https://flume.apache.org/download.html
官方产品文档:https://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html

参考转译文档:https://flume.liyifeng.org/

1、flume简介

  • 概览
    Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具。

Apache Flume是Apache软件基金会(ASF)的顶级项目。

1.2、架构设计

  • 数据流模型
    Event是Flume定义的一个数据流传输的最小单元。Agent就是一个Flume的实例,本质是一个JVM进程,该JVM进程控制Event数据流从外部日志生产者那里传输到目的地(或者是下一个Agent)。

一个完整的Agent中包含了必须的三个组件Source、Channel和Sink;
Source是指数据的来源和方式,Channel是一个数据的缓冲池,Sink定义了数据输出的方式和目的地(这三个组件是必须有的,另外还有很多可选的组件interceptor、channel selector、sink processor等);
在这里插入图片描述
组件协作流程:
1)外部以Flume Source识别的格式向Flume发送Event;
2)当Source接收Event时,它将其存储到一个或多个channel;
3)sink从channel中移除Event并将其放入外部存储库(如HDFS,通过 Flume的 HDFS Sink 实现)或将其转发到流中下一个Flume Agent(下一跳)的Flume Source。
4)Agent中的source和sink与channel存取Event是异步的。

Attention:
A:Flume的组件source 不光能被动接收Event,也有Source可以主动收集Event;

  • 复杂流向
    Flume可以设置多级Agent连接的方式传输Event数据。也支持扇入和扇出的部署方式,类似于负载均衡方式或多点同时备份的方式。

2、flume实践

系统要求:
1)Java运行环境 - Java 1.8或更高版本;

下载版本: apache-flume-1.9.0-bin.tar.gz

使用操作系统用户Oracle,安装flume:

[oracle@hz-hostname ~]$ 
[oracle@hz-hostname ~]$ mkdir -p /software/apache
[oracle@hz-hostname ~]$ tar -zxvf apache-flume-1.9.0-bin.tar.gz
[oracle@hz-hostname ~]$ mv apache-flume-1.9.0-bin flume
  • Attention:

1)配置文件中的注释,可以有 单行的注释,但是不能有 配置项后面的 #开头的注释;
可以识别如下配置:

# 配置Agent a1各个组件的名称
a1.sources = r1

无法识别如下配置:

# 配置Agent a1各个组件的名称
a1.sources = r1    #Agent a1 的source有一个,叫做r1

2)无需将 conf 文件夹下 flume-env.sh.template 修改为 flume-env.sh,如果启动失败不是这个原因;

  • flume样例实践

1)在 /software/apache/flume/conf下新建 f_example.conf文件,内容如下:

# f_example.conf: 一个单节点的 Flume 实例配置

# 配置Agent ag1各个组件的名称
ag1.sources = sr1
ag1.sinks = sk1
ag1.channels = ch1

# 配置Agent ag1的source sr1的属性
ag1.sources.sr1.type = netcat
ag1.sources.sr1.bind = localhost
ag1.sources.sr1.port = 6666

# 配置Agent ag1的sink sk1的属性
ag1.sinks.sk1.type = logger

# 配置Agent ag1的channel ch1的属性,channel是用来缓冲Event数据的
ag1.channels.ch1.type = memory
ag1.channels.ch1.capacity = 1000
ag1.channels.ch1.transactionCapacity = 100

# 把source和sink绑定到channel上
ag1.sources.sr1.channels = ch1 
ag1.sinks.sk1.channel = ch1

2)启动 flume-ng
启动路径:/software/apache/flume
启动命令:bin/flume-ng agent --conf conf --conf-file conf/f_example.conf --name ag1 -Dflume.root.logger=INFO,console
出现如下日志,表示成功:

2022-01-19 10:46:17,248 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:196)] Starting Sink sk1
2022-01-19 10:46:17,249 (conf-file-poller-0) [INFO - org.apache.flume.node.Application.startAllComponents(Application.java:207)] Starting Source sr1
2022-01-19 10:46:17,250 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:155)] Source starting
2022-01-19 10:46:17,266 (lifecycleSupervisor-1-0) [INFO - org.apache.flume.source.NetcatSource.start(NetcatSource.java:166)] Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:6666]

3)换一个terminal窗口,使用同一用户,执行如下操作

[oracle@hz-hostname ~]$ telnet localhost 6666
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello world!
OK

4)启动窗口显示日志:

2022-01-19 10:58:17,427 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D          hello world!. }
  • 配置使用变量
    bin/flume-ng agent --conf conf --conf-file conf/f_example.conf --name ag1 -Dflume.root.logger=INFO,console -DpropertiesImplementation=org.apache.flume.node.EnvVarResolverProperties

修改 conf/f_example.conf 里的
ag1.sources.sr1.port = 6666
ag1.sources.sr1.port = ${AG_SR_PORT}

方式1:
shell 调用前 export AG_SR_PORT=6666

方式2:
在 conf/flume-env.sh 里 添加 export AG_SR_PORT=6666

================================ over ========================================

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值