Flume

Flume

Flume 是 Cloudera
提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构,灵活简单。

  • 架构

    特点

    Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。

    Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中

    一般的采集需求,通过对flume的简单配置即可实现

    Flume针对特殊场景也具备良好的自定义扩展能力,

    因此,flume可以适用于大部分的日常数据采集场景。

    组件
    1 Agent

    Agent 是一个 JVM 进程,它以事件的形式将数据从源头送至目的地。

    Agent 主要有 3 个部分组成,Source、Channel、Sink。

    2 Source

    Source 是负责接收数据到 Flume Agent 的组件。Source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence、generator、syslog、http、legacy等。

    3 Sink

    Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 Flume Agent。

    Sink 组件目的地包括 hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义。

    4 Channel

    Channel 是位于 Source 和 Sink 之间的缓冲区。因此,Channel 允许 Source 和 Sink 运作在不同的速率上。Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个Sink 的读取操作。

    Flume 自带两种 Channel:Memory Channel 和 File Channel 以及 Kafka Channel。 Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下适用。如果需要关心数据丢失,那么 Memory Channel 就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

    File Channel 将所有事件写到磁盘。因此在程序关闭或机器宕机的情况下不会丢失数据。

    5 Event

    传输单元,Flume 数据传输的基本单元,以 Event 的形式将数据从源头送至目的地。

    Event 由和两部分组成,用来存放该的一些属性,为结构,用来存放该条数据,形式为字节数组

  • 拓扑结构

    复制和多路复用

    source获取的数据将通过ChannelSelector的类型来决定要将数据如何传送给channel。

    ChannelSelector的种类:

    1.Replication 复制,将数据拷贝成多个副本发送给多个channel

    2.Multipling 多路复用,将指定类型(可以通过设置header的方式区别数据的类型)的数据发送给指定类型sink对应的channel

    故障转移和负债均衡

    为了防止sink故障或则压力过大,我们可以设置sinkProcess的类型来优化

    SinkProcess的种类:

    1.fairover //故障转移,当一个sink故障时,数据会发送到另外的sinkgrops中的sink上,根据优先级选择。

    2.loadbalancing //负载均衡,当sinkgroups中的某个或某几个负载过大,会自动分流给sinkgroups中的其他sink

    聚合

    在实际业务中,我们有时候需要将各个机器发过来的数据根据类型进行汇总,可以通过avro这种类型进行机器间的数据传输。并通过自定义的规则进行分类、聚合(可以通过%获取flume中的参数,获取头信息需要用%{})

  • 自定义flume组件

    自定义Interceptor

    自定义拦截器需要实现Interceptor接口,并重写其方法(根据实际情况重写)。方法如下。

    void initialize(); //初始化方法

    Event intercept(Event var1); //获取单个事件的方法

    List<Event> intercept(List<Event> var1); //获取事件集合的方法

    void close(); //关闭方法,一般不写

    public interface Builder extends Configurable { Interceptor build();} //静态内部类,用于构造拦截器对象

    自定义Source

    1.SourceProcess提供了两种机制: PollableSource(轮询拉取)和EventDrivenSource(事件驱动)

    2自定义Source需要继承AbstractSource和实现Configurable,也可以选择实现Source的事件机制的接口(如上面的两种)

    常用的方法: 一般只实现process即可

    public Status process(){} //对数据进行处理的方法,需要将数据封装成Event对象,并放入channel

    public long getBackOffSleepIncrement() { } //得到封装失败后睡眠的增长时间

    public long getMaxBackOffSleepInterval() { } //得到退避的最大时间

    public void configure(Context context) {} //对配置进行操作

    自定义Inteceptor

    1.SinkProcess提供了两种机制:RoundRobinSinkSelector(轮询选择器)和RandomOrderSinkSelector(随机分配选择器)

    2.自定义Sink需要继承AbstractSink,实现Configurable

    常用的方法

    configure(Context context)//初始化 context(读取配置文件内容)

    process()//从 Channel 读取获取数据(event),这个方法将被循环调用。 //需要获取sink绑定的channel中的事务对象,开启事务。

  • flume监控

    1.通过ganglia

    2.通过flume自带的monitor

    3.通过第三方监控平台

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值