Flume的理解
Posted chen8023miss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume的理解相关的知识,希望对你有一定的参考价值。
Flume背景及应用场景
- Flume是什么?
- 由Cloudera公司开源;
- 分布式、可靠、高可用的海量日志采集系统;
- 数据源可定制,可扩展;
- 数据存储系统可定制,可扩展。
- 中间件:屏蔽了数据源和数据存储系统的异构性
- Flume特点
- 可靠性
- 保证数据不丢失
- 可扩展性高性能
- 各组件数目可扩展
- 吞吐率很高,能满足海量数据收集需求- 可管理性
- 可动态增加和删除组件 - 文档丰富,社区活跃
- 已成为Hadoop生态系统标配
- 可靠性
- Flume OG和NG两个版本
- Flume OG
- OG:“Original Generation”
- 0.9.x或cdh3以及更早版本
- 由agent、collector、master等组件构成
- Flume NG
- NG:“Next/New Generation”
- 1.x或cdh4以及之后的版本
- 由Agent、Client等组件构成
- 为什么要推出NG版本
- 精简代码
- 架构简化
- Flume OG
1 Flume OG基本架构
- agent
- 用于采集数据
- 数据流产生的地方
- 通常由source和sink两部分组成
- Source用于获取数据,可从文本文件,syslog,HTTP等获取数据;
- Sink将Source获得的数据进一步传输给后面的Collector。
- Flume自带了很多source和sink实现
- syslogTcp(5140) | agentSink("localhost",35853)
- tail("/etc/services") | agentSink("localhost",35853)
- Collector
- 汇总多个Agent结果
- 将汇总结果导入后端存储系统,比如HDFS,HBase
- Flume自带了很多collector实现
- collectorSource(35853) | console
- collectorSource(35853) | collectorSink("file:///tmp/flume/collected", "syslog");
- collectorSource(35853) | collectorSink("hdfs://namenode/user/flume/ ","syslog");
- Agent与Collector对应关系
- 可手动指定,也可自动匹配
- 自动匹配的情况下,master会平衡collector之间的负载
- Master
- 管理协调 agent 和collector的配置信息;
- Flume集群的控制器;
- 跟踪数据流的最后确认信息,并通知agent;
- 通常需配置多个master以防止单点故障;
- 借助zookeeper管理管理多Master。
- 容错机制设计
2 Flume NG基本架构
- Flume NG核心概念
- Event
- Client
- Agent
- Source
- Channel
- Sink
- 其他组件:Interceptor、Channel Selector、Sink、Processor
- Event
- Event是Flume数据传输的基本单元
- Flume以事件的形式将数据从源头传送到最终的目的
- Event由可选的header和载有数据的一个byte array构成。
- 载有的数据对flume是不透明的
- Header是容纳了key-value字符串对的无序集合,key在集合内是唯一的。
- Header可以在上下文路由中使用扩展
- Client
- Client是一个将原始log包装成events并且发送它们到一个或多个agent的实体。
- 目的是从数据源系统中解耦Flume
- 在flume的拓扑结构中不是必须的
- Client实例
- Flume log4j Appender
- 可以使用Client SDK (org.apache.flume.api)定制特定的Client
- Agent
- 一个Agent包含Source, Channel, Sink和其他组件;
- 它利用这些组件将events从一个节点传输到另一个节点或最终目的;
- agent是flume流的基础部分;
- flume为这些组件提供了配置、生命周期管理、监控支持。
- Agent之Source
-
- Source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个Channel。
- 包含event驱动和轮询2种类型
- 不同类型的Source:
- 与系统集成的Source: Syslog, Netcat
- 自动生成事件的Source: Exec
- 用于Agent和Agent之间通信的IPC Source: Avro、Thrift
- Source必须至少和一个channel关联
- Agent之Channel与Sink
- Agent之Channel
- Channel位于Source和Sink之间,用于缓存进来的event;
- 当Sink成功的将event发送到下一跳的channel或最终目的,event从Channel移除。
- 不同的Channel提供的持久化水平也是不一样的:Channel支持事务,提供较弱的顺序保证
- Memory Channel: volatile
- File Channel: 基于WAL(预写式日志Write-Ahead Logging)实现
- JDBC Channel: 基于嵌入Database实现
- 可以和任何数量的Source和Sink工作
- Agent之sink
- Sink负责将event传输到下一跳或最终目的,成功完成后将event从channel移除。
- 不同类型的Sink:
- 存储event到最终目的的终端Sink. 比如: HDFS, HBase
- 自动消耗的Sink. 比如: Null Sink
- 用于Agent间通信的IPC sink:
- 必须作用于一个确切的channel
- 其他几个组件
- Interceptor
- 作用于Source,按照预设的顺序在必要地方装饰和过滤events。
- Channel Selector
- 允许Source基于预设的标准,从所有Channel中,选择一个或多个Channel。
- Sink Processor:
- 多个Sink可以构成一个Sink Group。Sink Processor可以通过组中所有Sink实现负载均衡;也可以在一个Sink失败时转移到另一个。
- Interceptor
以上是关于Flume的理解的主要内容,如果未能解决你的问题,请参考以下文章