Flume-NG技术原理

Posted Hadoop大数据之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume-NG技术原理相关的知识,希望对你有一定的参考价值。

Flume源自Cloudera公司,原名Flume-OG(original generation),用于日志收集。现已加入到Apache下,改名为Flume-NG(next generation)。Flume是一个分布式、可靠、高可用的服务,它能够将不同数据源的海量日志数据进行高效收集、汇聚、移动,最后存储到一个中心化数据存储系统中,它是一个轻量级的工具,简单、灵活、容易部署,适应各种方式日志收集并支持failover和负载均衡。官方网站:http://flume.apache.org


一、Flume核心组件

术语 说明
Event 一个数据单元,由消息头(Header)和消息体(body)组成
Agent 独立的flume进程,包含Source、Channel、Sink
Source 数据源收集组件
Channel 数据管道,接收来自Source组件传递的Event
Sink Channel管道数据Event,往下个agent传递
Interceptor 拦截器

1)Agent结构

agent是Flume的核心,包含三个核心组件,分别是Source、Channel、Sink,通过这些组件将Event从一个地方流向下一个地方,如:

单个agent结构

数据由一个agent往下一个agent传递

Flume-NG技术原理

多个agent收集数据往一个agent传递

Flume-NG技术原理

agent的一个Source往多个Sink并将数据存储到不同的存储器上

生产应用部署

2)Source

Source是数据收集端,负责捕捉数据并将数据封装到事件(Event)里,最后将数据推送到Channel中,flume提供了很多内置的Source:

Source类型 说明
Exec Source 执行shell命令方式,如tail -F
Spool DirectorySource 监控目录新文件数据
Thrift Source 支持Thrift协议
Svslog Source 读取svslog数据,支持UDP和TCP两种协议
Avro Source 支持AVRO协议
HTTP Source 基于HTTP POST或GET数据源
Netcat Source 监控流经端口的
JMS Source 从jms系统中读取数据
...... ......

3)Channel

Channel是连接Source和Sink的组件,可以当做一个缓冲区或数据队列,它将数据存储在内存或磁盘上,直到Sink处理完该事件,比较常用的Channel,MemoryChannel和FileChannel:

Channel类型 说明
Memory Channel 将Event数据存储在内存
File Channel 将Event数据存储在磁盘中
JDBC Channel 将数据持久到数据库中
Kafka Channel 将数据往Kafka存储
Spillable Memory Channel 将数据持久化到内存和磁盘,当内存队列满了后将数据持久化到磁盘
Custome Channel 自定义channel

4)Sink

Sink从Channel中取出事件,将数据发送到别处,可以存储到本地文件、hdfs、kafka、hbase等,也可以是其它Agent的Source。

HDFS Sink 数据写入hdfs
HBase Sink 数据写入hbase数据库
Avro Sink 将数据转换为Avro Event,发送到配置的RPC端口上
Thrift Sink 将数据转换为Thrift Event,发送到配置的RPC端口上
Logger Sink 将数据写入到日志文件中
ElasticSearch Sink 将数据发送到搜索服务器集群
Custom Sink 自定义Sink
...... ......

5)拦截器

Flume提供了拦截器,当Source指定一个拦截器后,拦截器会得到Event数据,可以在拦截器中过滤提取数据,一个Source可以指定多个拦截器成为拦截器chain。

拦截器类型 说明
TimestampInterceptor 时间戳拦截器
HostInterceptor 主机名拦截器
StaticInterceptor 静态拦截器
RegexFilteringInterceptor 正则过滤拦截器
RegexExtractorInterceptor 正则提取拦截器
UUIDInterceptor UUID拦截器
MorphlineInterceptor ...
CustomInterceptor 自定义拦截器


二、负载均衡与故障转移

Sink groups允许组织多个sink到一个实体上,Sink processors能够提供在组内所有sink之间实现负载均衡的能力,而且在失败的情况下能够进行故障转移从一个sink到另外一个sink。

Property Name Default Description
sinks - Space-separated list of sinks that are participating in the group
processor.type default The component type name, needs to default、failover or load balance

1)负载均衡(load balance)

Load balancing sink processor提供了多个sink负载均衡的能力,它维护了一个active sinks列表,该列表中的负载均衡是分布式的。默认实现了round_robin(轮询调度)或者random(随机)的选择机制,默认配置是:round_robin(轮询调度),也可以通过继承AbstractSinkSelector类来实现自定义的选择机制。当被调用时,选择器根据配置文件的选择机制挑选下一个sink,并且调用该sink,如果所选的sink传递Event失败,则通过选择机制挑选下一个可用的sink,以此类推。

Property Name Default Description
processor.sinks - Space-separated list of sinks that are participating in the group
processor.type default The component type name, needs to be load_balance
processor.selector round_robin(轮询调度) Selection mechanism. Must be either round_robin, random or FQCN of custom class that inherits from AbstractSinkSelector

processor.selector.maxTimeOut

30000 Used by backoff selectors to limit exponential backoff (in milliseconds)

2)故障转移

Failover Sink Processor维护了一个sink的优先级列表,具有故障转移的功能。配置参数如下:

Property Name Default Description
sinks - Space-separated list of sinks that are participating in the group
processor.type default The component type name, needs to be failover
processor.priority.<sinkName> - Priority value. <sinkName> must be one of the sink instances associated with the current sink group A higher priority value Sink gets activated earlier. A larger absolute value indicates higher priority
processor.maxpenalty 30000 The maximum backoff period for the failed Sink (in millis)


以上是关于Flume-NG技术原理的主要内容,如果未能解决你的问题,请参考以下文章

flume介绍与原理

Flume概念与原理与Kafka优势对比

6-认证技术原理与应用

大数据技术之HBase原理分析

SSR技术原理是啥?

NB-IoT技术原理是怎样的