flume入门教程

Apache Flume 是一个用于高效收集、聚合和传输大规模日志数据的系统。它由事件(Event)驱动,主要包括Source、Channel和Sink三个核心组件。Source捕获数据,Channel作为缓冲区保存事件,Sink负责数据持久化或传输。Flume支持多种Source,如Avro、Thrift、Exec和Kafka等,以及多种Sink,如Kafka、Avro、HDFS等。此外,Flume还提供拦截器功能,如时间戳、主机名和正则表达式拦截器,用于数据过滤和清洗。Flume可在多级流和负载均衡场景中使用,确保数据传输的可靠性。
摘要由CSDN通过智能技术生成

参考借鉴:

用户文档: http://flume.apache.org/FlumeUserGuide.html
开发文档: http://flume.apache.org/FlumeDeveloperGuide.html
Flume原理解析: https://www.cnblogs.com/zhangyinhua/p/7803486.html

参考原文地址:https://blog.csdn.net/qq_29186199/article/details/80829683

1.Flume简介

Apache flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统,用于有效地收集、聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储(如文本、HDFS、Hbase等)。

其使用不仅仅限于日志数据聚合。因为数据源是可定制的(内置Avro,Thrift
Syslog,Netcat),Flume可以用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件消息和几乎所有可能的数据源。

2.Flume的核心

flume的数据流由事件(Event)贯穿始终。事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source生成,当Source捕获事件后会进行特定的格式化,然后Source会把事件推入(单个或多个)Channel中。你可以把Channel看作是一个缓冲区,它将保存事件直到Sink处理完该事件。Sink负责持久化日志或者把事件推向另一个Source。

  • 几个概念

    • Client:Client生产数据,运行在一个独立的线程。
    • Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
    • Flow: Event从源点到达目的点的迁移的抽象。
    • Agent: 一个独立的Flume进程是其运行的核心,包含三个核心组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。),Flume以agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具,通过核心组件, Event 可以从一个地方流向另一个地方,如下图所示。
      img

3.flume的组件

flume的组件:
source : 数据源组件,专门读取相对应的数据,并将数据传到channel中.
channel : 管道,用于连接source和sink
sink : 数据下沉组件,用于将channel中的数据持久化到对应的文件系统中或者流中。
agent : flume的运行单元,里面必须包含一个或者多个source、channel、sink,运行在单个jvm中。
event : 事件,是数据的描述。
interceptor : 拦截器,作用于source阶段,用于过滤数据。
selectorer : 选择器,作用于source阶段,默认是replicating,也就是复用功能。mutiplxing
groupsinks : sink组,用于将多个sink选择sink。
常见的组件:
source常用组件:exec、avro source 、 spooling dirctory 、kafka 、netcat 、http、自定义
channel常用:memory 、 file 、kafka 、 jdbc
sinks常用 : logger 、avro 、 hdfs 、hive 、hbase、kafka等

3.1source

  • Source:

    Source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中。Flume提供了各种source的实现,包括Avro Source、 Exce Source、 SpoolingDirectory Source、 NetCat Source、 Syslog Source、 Syslog TCP Source、Syslog UDP Source、 HTTP Source、 HDFS Source等等。可以让应用程序同已有的Source直接打交道, 如果内置的Source无法满足需要, Flume还支持自定义Source。分成transtion 和 event 打入到channel之中

img

source类型:

img

1、AVRO Source

​ Avro Source监听Avro端口接收从外部Avro客户端发送来的数据流。如果与上一层Agent的 Avro Sink 配合使用就组成了一个分层的拓扑结构。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0iZasjQ-1572164068185)(./img/10.png)]

样例:

#Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
#定制source,绑定channel、主机以及端口
a1.sources.r1.type = avro
a1.sources.r1.channels = c1
a1.sources.r1.bind = 192.168.1.102
a1.sources.r1.port = 4141
 
#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

启动Flume

flume-ng agent -n a1 -c /usr/flume/conf/ --conf-file /usr/flume/conf/avro.conf -Dflume.root.logger=INFO,consol

测试

bin/flume-ng avro-client -c conf -H 192.168.1.102 -p 4141  -F /app/logs/test.log
2、Thrift Source

​ 监听Thrift 端口,从外部的Thrift客户端接收数据流。如果从上一层的Flume Agent的 Thrift Sink 串联后就创建了一个多层级的Flume架构(同 Avro Source 一样,只不过是协议不同而已)。Thrift Source可以通过配置让它以安全模式(kerberos authentication)运行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGNZZ4K8-1572164068187)(./img/11.png)]

​ 由于本Source和AVRO很像,例子不做过多讲解,参考下面参数

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = thrift
a1.sources.r1.channels = c1
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 4141
3、Exec Source

​ ExecSource的配置就是设定一个Unix(linux)命令,然后通过这个命令不断输出数据。如果进程退出,Exec Source也一起退出,不会产生进一步的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fQXCgz70-1572164068188)(./img/12.png)]

样例参考:

a1.sources = r1
a1.channels = c1
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1
参考上述HA搭建的参数设定
4、Kafka Source

​ Kafka Source就是一个Apache Kafka消费者,它从Kafka的topic中读取消息。 如果运行了多个Kafka Source,则可以把它们配置到同一个消费者组,以便每个source都读取一组唯一的topic分区。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ZKkv14W-1572164068203)(./img/14.png)]

参数展示:

tier1.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
tier1.sources.source1.channels = channel1
tier1.sources.source1.batchSize = 5000
tier1.sources.source1.batchDurationMillis = 2000
tier1.sources.source1.kafka.bootstrap.servers = localhost:9092
tier1.sources.source1.kafka.topics = test1, test2

样例展示:

首先编写Flume-Agent参数

#agent1 name
agent1.channels = c1
agent1.sources = r1
agent1.sinks = k1 k2
#
##set 设置组,保证后面两台flume在一个组下
agent1.sinkgroups = g1
#
##set 设置管道
agent1.channels.c1.type = memory
agent1.channels.c1.capacity = 1000
agent1.channels.c1.transactionCapacity = 100
#监控文件
agent1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
agent1.sources.r1.channels = c1
agent1.sources.r1.batchSize = 5000
agent1.sources.r1.batchDurationMillis = 2000
agent1.sources.r1.kafka.bootstrap.servers = node242:9092,node243:9092,node244:9092
agent1.sources.r1.kafka.topics = shop-topic
# 拦截器
agent1.sources.r1.interceptors = i1 i2
agent1.sources.r1.interceptors.i1.type = static
agent1.sources.r1.interceptors.i1.key = Type
agent1.sources.r1.interceptors.i1.value = LOGIN
agent1.sources.r1.interceptors.i2.type = timestamp

## set sink1
agent1.sinks.k1.channel = c1
agent1.sinks.k1.type = avro
agent1.sinks.k1.hostname = node243
agent1.sinks.k1.port = 52020
#
## set sink2
agent1.sinks.k2.channel = c1
agent1.sinks.k2.type = avro
agent1.sinks.k2.hostname = node244
agent1.sinks.k2.port = 52020
#
##set sink group
agent1.sinkgroups.g1.sinks = k1 k2
#
##set failover
agent1.sinkgroups.g1.processor.type = failover
agent1.sinkgroups.g1.processor.priority.k1 = 10
agent1.sinkgroups.g1.processor.priority.k2 = 1
agent1.sinkgroups.g1.processor.maxpenalty = 10000
#
上述参数需要在HA的Flume执行

接下来启动Flume和Kafka

Flume命令:

node244命令
./bin/flume-ng agent -n a1 -c conf -f conf/collector.conf -Dflume.root.logger=DEBUG,console
node243命令
./bin/flume-ng agent -n a1 -c conf -f conf/collector.conf -Dflume.root.logger=DEBUG,console
node242命令
bin/flume-ng agent -n agent1 -c conf -f conf/agent1.conf -Dflume.root.logger=DEBUG,console

Kafka启动生产者

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GLbqtQhw-1572164068206)(./img/16.png)]

查看Flume

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBa5PHfg-1572164068212)(./img/15.png)]

查看HDFS

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ubK3LKp-1572164068214)(./img/17.png)]

3.2channel

​ 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接Source和Sink的组件,可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件。介绍两个较为常用的Channel, MemoryChannel和FileChannel(MemoryChannel可以实现高速的吞吐, 但是无法保证数据完整性;MemoryRecoverChannel在官方文档的建议上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值