Flume
Flume
Sqoop 是一个主要在 Hadoop 和关系数据库之间进行批量数据迁移的工具。
Flume 简介
什么是 Flume ?
Flume 是一个分布式海量数据采集、聚合和传输系统。
特点
- 基于事件的海量数据采集
- 数据流模型:Source -> Channel -> Sink
- 事务机制:支持重读重写,保证消息传递的可靠性
- 内置丰富插件:轻松与各种外部系统集成
- 高可用:Agent 主备切换
- Java 实现:开源,优秀的系统设计
应用场景
Flume 原理
Flume 基本概念
- Event:事件,最小数据传输单元,由 Header 和 Body 组成。
- Agent:代理,JVM 进程,最小运行单元,由 Source、Channel、Sink 三个基本组件构成,负责将外部数据源产生的数据以 Event 的形式传输到目的地
- Source:负责对接各种外部数据源,将采集到的数据封装成 Event,然后写入 Channel
- Channel:Event 暂存容器,负责保存 Source 发送的 Event,直至被 Sink 成功读取
- Sink:负责从 Channel 读取 Event,然后将其写入外部存储,或传输给下一阶段的 Agent
- 映射关系:1 个 Source -> 多个 Channel,1 个 Channel -> 多个 Sink,1 个 Sink -> 1 个 Channel
Flume 基本组件
Source 组件
- 对接各种外部数据源,将采集到的数据封装成 Event,然后写入 Channel
- 一个 Source 可向多个 Channel 发送 Event
- Flume 内置类型丰富的 Source,同时用户可自定义 Source
Channel 组件
- Event 中转暂存区,存储 Source 采集但未被 Sink 读取的 Event
- 为了平衡 Source 采集、Sink 读取的速度,可视为 Flume 内部的消息队列
- 线程安全并具有事务性,支持 Source 写失败重写和 Sink 读失败重读
Sink 组件
- 从 Channel 读取 Event,将其写入外部存储,或传输到下一阶段的 Agent
- 一个 Sink 只能从一个 Channel 中读取 Event
- Sink 成功读取 Event 后,向 Channel 提交事务,Event 被删除,否则 Channel 会等待 Sink 重新读取
Flume 数据流
单层架构
优点:架构简单,使用方便,占用资源较少
缺点
如果采集的数据源或 Agent 较多,将 Event 写入到 HDFS 会产生很多小文件
外部存储升级维护或发生故障,需对采集层的所有 Agent 做处理,人力成本较高,系统稳定性较差
系统安全性较差
数据源管理较混乱