Flume的简介
Flume
是一种分布式的,可靠的、高可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。
Flume
目前只有
Linux
系统的启动脚本,没有
Windows
环境的启动脚本。
Flume的体系结构
Flume
运行的核心是
Agent
。
Flume
是以
agent
为最小的独立运行单位。一个
agent
就是一个
JVM
。它是一个完整的数据收集工具,含有三个核心组件,分别是source
、
channel
、
sink
。通过这些组件,
Event
可以从一个地方流向另一个地方。如下图所示:
组件及其作用
- Client:
客户端, Client 生产数据,运行在一个独立的线程中- Event :一个数据单元,消息头和消息体组成。( Events 可以是日志记录、 avro 对象等。)- Flow :Event 从源点到达目的点的迁移的抽象。- Agent :一个独立的 Flume 进程,运行在 JVM 中,包含组件 Source 、 Channel 、 Sink 。每台机器运行一个 agent ,但是一个 agent 中可以包含多个 sources 和 sinks 。- Source :数据收集组件。 source 从 Client 收集数据,传递给 Channel- Channel :管道,负责接收 source 端的数据,然后将数据推送到 sink 端。- Sink :负责从 channel 端拉取数据,并将其推送到持久化系统或者是下一个 Agent 。- selector :选择器,作用于 source 端,然后决定数据发往哪个目标。- interceptor :拦截器, flume 允许使用拦截器拦截数据。允许使用拦截器链,作用于 source 和 sink 阶段。
Flume的部署
单一数据模型
在单个
Agent
内由单个
Source, Channel, Sink
建立一个单一的数据流模型,如下图所示,整个数据流为
Web Server --> Source --> Channel --> Sink --> HDFS。
多数据流模型
1
)多
Agent
串行传输数据流模型
2)多 Agent 汇聚数据流模型
3)单 Agent 多路数据流模型
4)Sinkgroups 数据流模型
小总结
在 flume 提供的数据流模型中,几个原则很重要。Source--> Channel1. 单个 Source 组件可以和多个 Channel 组合建立数据流,既可以 replicating 和 multiplexing 。2. 多个 Sources 可以写入单个 ChannelChannel-->Sink1. 多个 Sinks 又可以组合成 Sinkgroups 从 Channel 中获取数据,既可以 loadbalancing 和 failover 机制。2. 多个 Sinks 也可以从单个 Channel 中取数据。3. 单个 Sink 只能从单个 Channel 中取数据根据上述 5 个原则,你可以设计出满足你需求的数据流模型。