开发者学堂课程【Flume 基础应用实战-企业全场景解决方案:Apache Flume- 运行机制 & 运行结构图】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/715/detail/12766
Apache Flume- 运行机制 &;运行结构图
内容介绍:
一、Flume 的运行机制
二、Flume 的运行结构图
三、小结
一、Flume 的运行机制
Flume 有三个核心的组件。
Source: 采集源,用于跟数据源对接,以获取数据;
Sink:下沉地,采集数据的传送目的,用于往下一级 agent 传递数据或者往最终存储系统传递数据;
Channel:agent 内部的数据传输通道,用于从 source 将数据传递到 sink,临时缓存数据。
这三个组件就构成了 Flume 的核心角色,叫做 Agent,它本身是一个java进程,因为 Flume 是用 java 语言开发的。一般来说,在哪台机器上需要进行数据的收集传递就在这台机器上去启动一个进程 agent 即可,它里面配置好相关的三个组件,就可以完成数据的传递。在它运行的过程当中,有一点需要强调,当它收集完各种各样数据的时候,数据并不是以原生的形式在里面流转,而是做了一个包装,这个包装的数据单位叫做 event,可以把 event 看成一个数据包,它里面有数据的头信息,还有数据的体信息。在它的头信息中,有它自己携带的一些相关属性,重要的是它把涉及到的的数据本身放在它的 body 当中,相当于把数据做了包装。因此,在 Flume 的内部,最小的数据单元叫做 event,event 下面不可以再分。可以把它形象的理解为在 Flume 整个框架当中,一个个 event 在不停的流动,event 中包装了数据源,这就是一个非常简单的 Flume 运行机制。在实际开发过程中,要做的最大的工作量是通过配置文件指定清楚当中的 Source 、Sink 、Channel 分别是什么类型以及有哪些配置参数。
二、采集系统结构图
在企业中,用 Flume 进行数据采集,通常会有两种情况,一个叫简单的单 Flume采集,一个是复杂的多个 Flume 之间的相互串联采集。
第一个图,也就是采集数据的方案非常简单清晰明了,这时只要启动一个 Flume 的进程即可,在这一个进程中,有 Source 、Sink 、Channel 来对接数据源和目的地就可以搞定,这叫单 Agent 采集数据。
如果公司当中有非常多的流水线,不同业务线,不同数据源,就需要做一个庞大的数据采集传递,这时就可以使用多个 Agent 之间进行所谓的串联数据的采集。图中可以看到有4个 Agent,首先前面3个 Agent 分别对接3台不同的服务器,然后这3个 Agent 把收集的数据统一汇总到 Agent 4,第4个 Flume 上,接着第4个 Flume 再经过 S,最终把数据存储到 HDFS 当中,这种情况叫做 Flume 之间的串联。
这里有多个不同的 Flume 软件,可以猜想它是一个分布式软件,但是要强调的是在这四个进程当中没有哪个叫主进程,没有哪个叫从进程,它们的地位都是一样的,相当于我们每一个人都是数据的传递员,手拉手一起配合来进行数据的传递,因此如果有人说 Flume 是一个主从集群,这时候应该清楚 Flume 当中没有主从,地位都一样,都叫做 Agent, 这样就可以满足企业当中一个复杂的结构。
三、小结
1、Flume 的运行机制:
(1)Flume 本身是 java 程序,在需要采集数据机器上启动-->agent 进程;
(2)agent 进程里面包含了 :source sink channel;
(3)在 Flume 中,数据被包装成 event,真实的数据是放在 event body 中,event是 Flume 中最小的数据单元。
2、运行架构
(1)简单架构:只需要部署一个 agent 进程即可
(2)复杂架构:多个 agent 之间的串联,相当于大家手拉手共同完成数据的采集传输工作,在串联的架构中没有主从之分,大家的地位都是一样的。
Flume 的运行机制和架构,简单了解这么多即可,因为在实际过程中,我们不需要去开发里面的 source sink channel,官方已经提供好各种类型的 source sink channel,我们只需要做一件事,就是根据业务场景去官方找对应类型的 source sink channel,然后把它写在配置当中,就可以满足于业务需求了。