Flume
Flume简介
Flume概述
- Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据
- 同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力
Flume使用场景
- 线上数据一般主要是落地(存储到磁盘)或者通过socket传输给另外一个系统
Flume的体系架构
-
比较核心的组件
- Client:Client生产数据,运行在一个独立的线程。
- Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
- Flow: Event从源点到达目的点的迁移的抽象。
- Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
- Source: 数据收集组件。(source从Client收集数据,传递给Channel)
- Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个消息队列。)
- Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话(Sink从Channel收集数据,运行在一个独立线程。)
-
Flume的采集的大致流程
- 如图
Flume的组件详解
-
Agent结构
-
Flume 运行的核心是 Agent。Flume以agent为最小的独立运行单位。一个agent就是一个JVM。它是一个完整的数据收集工具
-
含有三个核心组件
-
source
- (数据输入的方式,以及数据输入的方式<参数>)
- source是数据的收集端,负责将数据捕获后进行特殊的格式化,将数据封装到事件(event) 里,然后将事件推入Channel中
-
channel
- (用来缓存source递过来的数据,并形成一个个event时间,等待sink来拿)
- Channel是连接Source和Sink的组件,大家可以将它看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件
-
sink
- (数据输出的方式,将channel整理好的一个个event,传送到指定地方)
- Sink从Channel中取出事件,然后将数据发到别处,可以向文件系统、数据库、 hadoop存数据,也可以是其他agent的Source
-
-
Flume特性
-
复杂流动
- Flume允许用户构建多跳流程,其中事件在到达最终目的地之前会通过多个代理传播
- 它还允许扇入和扇出流,上下文路由和备份路由(故障转移)
Flume优点
- 当收集数据的速度超过将写入数据的时候,Flume会在数据生产者和数据收容器间做出调整
- Flume的管道是基于事务,保证了数据在传送和接收时的一致性
- Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的
- 除了日志信息,Flume同时也可以用来接入收集规模宏大的社交网络节点事件数据
- 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等
Flume执行流程
Flume事务
-
推送事务流程
- doPut: 把批数据写入到临时缓冲区putList
- doCommit: 检查Channel容量是否足够,如果容量足够则把putList里的数据发送到Channel
- doRollBack:如果Channel容量不够,则把数据回滚到putList
-
拉取事务流程
- doTake:把数据读取到临时缓冲区takeList
- doCommit:检查数据是否发送成功,成功的话,则把event从takeList中移除
- doRollBack:如何发送失败,则把takeList的数据回滚数据到Channel
-
可靠
- 只有当sink接收到,数据落地完成的信息之后,才会将数据从通道中删除
- 数据传输的方式不是byte,而是一个个的event Flume使用事务性方法来确保事件的可靠传递
-
可恢复
- 当数据丢失了,只有从存储在磁盘的方式,才能将数据找回
Flume使用
监控端口数据
flume到flume
-
flume1
-
flume2