flume系列(一)flume基础知识及第一个demo

Apache Flume 是一个分布式、高可靠性的日志聚合系统,用于从多个源高效收集、聚合和传输大规模日志数据。Flume 支持自定义数据源,不仅限于日志,还能处理网络流量、社交媒体数据等。其工作方式分为两种模式,早期的 Flume-og 采用多Master和Zookeeper确保一致性,而 Flume-ng 则简化为纯传输工具,提供异步处理。Flume 的优势在于其可靠性、容错性和可扩展性,以及上下文路由和事务保证。核心组件包括 Source(数据收集)、Sink(数据输出)、Channel(临时存储)和 Event(数据单元)。在实际应用中,可以通过配置不同的 Source 和 Sink 来实现各种数据处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 

1. 什么是flume

2. 日志收集

3. flume 工作方式

4. 优势

5. flume 下载及安装

5. flume核心概念

5.1client

5.2 Agent

5.3  flow 

5.4 source

5.5 sink

5.6 channel

5.7 event 

5.8 interceptor

6. flume的demo示例


1. 什么是flume

Apache flume是一个分布式,高可靠性的海量日志采集,聚合和传输的系统,用于有效的的从许多不同的源收集,聚合和移动大量日志数据收集到集中式数据存储

Apache flume使用不仅限于日志数据聚合,由于数据源是可定制的,因此flume可用于大量事件数据,包括不限于网络流量数据,社交媒体中产生的数据,电子邮件以及任何可能得数据源

2. 日志收集

Flume最早是Cloudera提供的日志收集系统,是Apache下的一个孵化项目,Flume支持在日志系统中定制各类数据发送方,用于收集数据

3. flume 工作方式

Flume-og采用了多Master的方式。为了保证配置数据的一致性,Flume引入了ZooKeeper,用于保存配置数据,ZooKeeper本身可保证配置数据的一致性和高可用,另外,在配置数据发生变化时,ZooKeeper可以通知Flume Master节点。Flume Master间使用gossip协议同步数据。

Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。Flume-ng另一个主要的不同点是读入数据和写出数据由不同的工作线程处理(称为 Runner)。 在 Flume-og 中,读入线程同样做写出工作(除了故障重试)。如果写出慢的话(不是完全失败),它将阻塞 Flume 接收数据的能力。这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题

4. 优势

  1.  Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase
  2.  当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供平稳的数据

  3.  提供上下文路由特征

  4. Flume的管道是基于事务,保证了数据在传送和接收时的一致性.

  5.  Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的

5. flume 下载及安装

下载地址:http://www.apache.org/dyn/closer.lua/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

wget https://mirrors.tuna.tsinghua.edu.cn/apache/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz
tar -zxvf apache-flume-1.9.0-bin.tar.gz

 

5. flume核心概念

5.1client

client生产数据,运行在一个独立的线程中

5.2 Agent

flume运行的核心是agent,flume以agent为最小的独立运行单位,一个agent就是一个jvm特是一个完整的收集工具,含有三个核心组件,分别是source,channel,sink
通过这些组件Event可以从一个地方流向另一个地方

5.3  flow 

event从源点到达目的地的迁移的抽象

5.4 source

source是数据的收集端,负责将数据捕获后进行特殊化的格式化,将数据封装到事件(event)里,让后将事件推到channel中,flume提供了
    很多内置的source,支持avro ,log4j,syslog和http post(body为json)可以让应用程序同已有的source直接打交道,如avroSource,syslog TcpSource,如果内置的Source
    无法满足需要,flume还可以支持自定义的source

5.5 sink

         从channel中读取并移除event,将event传递到flowPipeline中的下一个Agent(如果有的话,slink从Channel手机数据,运行在一个独立的线程中)sink从channel中取出事件,然后将数据发到别处,可以向文件系统,数据库,hadoop存数据,也可以是其他agent的source,在日志数据较少时可以将数据存储在文件系统中,并且设定一定的时间间隔保存数据

5.6 channel

  中转event的一个临时存储,保存由source组件传递过来的event(channel连接的sources和sinks,这个有点像一个队列)channel是连接source和sink的组件,大家可以将他看作一个数据的缓冲区(数据队列)他可以将事件暂存到内存中也可以持久化到本地磁盘上,直到sink处理完该事件,memoryChannel和fileChannel是两个较为常见的Channel

5.7 event 

一个数据单元,消息头(可选)和消息体组成,Events可以是日志记录,avro对象等

5.8 interceptor

当我们需要对数据进行过滤时,除了我们在source,Channel和sink进行代码修之外,flume为我们提供了拦截器,拦截器也是chain的形式,拦截器的位置在source和Channel之间,当我们为source指定拦截器后,我们在拦截器中会得到event,根据需求我们可以对event进行保留还是抛弃,抛弃的数据不会进入到Channel中

6. flume的demo示例

在bin目录下编写flume-nc-logger.conf

# 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

使用下面命令启动

./flume-ng agent -n a1 -c ../conf -f ./flume-nc-logger.conf -Dflume.root.logger=INFO,console

使用telnet命令测试

telnet 127.0.0.1 44444

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值