FLUME-NG 使用总结

1、Flume-NG 概述

Flume-NG 是一个分布式、可靠、可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。由原来的 Flume OG 到现在的 Flume NG,进行了架构重构,并且现在 NG 版本完全不兼容原来的 OG 版本。经过架构重构后,Flume NG 更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持 failover 和负载均衡。

2、Flume-NG 架构设计要点

Flume 的架构主要有以下几个核心概念:
(1)Event:一个数据单元,带有一个可选的消息头;
(2)Flow:Event 从源点到达目的点的迁移的抽象;
(3)Client:操作位于源点处的 Event,将其发送到 Flume Agent;
(4)Agent:一个独立的 Flume 进程,包含组件 Source、Channel、Sink;
(5)Source:用来消费传递到该组件的 Event;
(6)Channel:中转 Event 的一个临时存储,保存有 Source 组件传递过来的 Event;
(7)Sink:从 Channel 中读取并移除 Event,将 Event 传递到 Flow Pipeline 中的下一个 Agent(如果有的话)。

Flume NG架构,如图所示:
在这里插入图片描述
外部系统产生日志,直接通过 Flume 的 Agent 的 Source 组件将事件(如日志行)发送到中间临时的 channel 组件,最后传递给 Sink 组件,HDFS Sink 组件可以直接把数据存储到 HDFS 集群上。

一个最基本Flow的配置,格式如下:

# 定义这个 agent 中各个组件的名字(此 agent 别名为 a1)
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置 source 组件:r1
a1.sources.r1.type = ...
a1.sources.r1.bind = ...
a1.sources.r1.port = ...
# 描述和配置 sink 组件:k1
a1.sinks.k1.type = ...
# 描述和配置 channel 组件,此处使用是内存缓存的方式
a1.channels.c1.type = ...
a1.channels.c1.capacity = ...
a1.channels.c1.transactionCapacity = ...
# 描述和配置 source channel sink 之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

我们可以根据实际需求或业务来修改各组件名称(a1,r1,k1,c1)。
下面详细说明:
a1 表示配置一个 Agent 的名称,一个 Agent 肯定有一个名称。r1 是 Agent的 Source 组件的名称,消费传递过来的 Event。c1 是 Agent 的Channel 组件的名称。k1 是 Agent 的 Sink 组件的名称,从 Channel 中消费(移除)Event。

上面配置内容中,第一组中配置 Source、Sink、Channel,它们的值可以有1个或者多个;
第二组中配置 Source 将把数据存储(Put)到哪一个 Channel 中,可以存储到 1 个或多个 Channel 中,同一个 Source 将数据存储到多个Channel 中,实际上是 Replication;
第三组中配置 Sink 从哪一个 Channel中取(Task)数据,一个 Sink 只能从一个 Channel 中取数据。
第四组中配置 Channel 中数据存储方式。
第五组中描述和配置 source channel sink 之间的连接关系。

3、Flow Pipeline

下面,根据官网文档,我们展示几种Flow Pipeline,各自适应于什么样的应用场景:
(1)多个Agent顺序连接:
在这里插入图片描述
可以将多个Agent顺序连接起来,将最初的数据源经过收集,存储到最终的存储系统中。这是最简单的情况,一般情况下,应该控制这种顺序连接的Agent的数量,因为数据流经的路径变长了,如果不考虑failover的话,出现故障将影响整个Flow上的Agent收集服务。

(2)多个Agent的数据汇聚到同一个Agent:
在这里插入图片描述
这种情况应用的场景比较多,比如要收集Web网站的用户行为日志,Web网站为了可用性使用的负载均衡的集群模式,每个节点都产生用户行为日志,可以为每个节点都配置一个Agent来单独收集日志数据,然后多个Agent将数据最终汇聚到一个用来存储数据存储系统,如HDFS上。

(3)多路(Multiplexing)Agent:
在这里插入图片描述
这种模式,有两种方式,一种是用来复制(Replication),另一种是用来分流(Multiplexing)。
Replication方式,可以将最前端的数据源复制多份,分别传递到多个channel中,每个channel接收到的数据都是相同的,配置格式,如下所示:

# Listthe sources, sinks and channels for the agent
.sources=
.sinks=
.channels=
# setlist of channels for source (separated by space)
.sources..channels=
# setchannel for sinks
.sinks..channel=
.sinks..channel=
.sources..selector.type= replicating

上面指定了selector的type的值为replication,其他的配置没有指定,使用的Replication方式,Source1会将数据分别存储到Channel1和Channel2,这两个channel里面存储的数据是相同的,然后数据被传递到Sink1和Sink2。
Multiplexing方式,selector可以根据header的值来确定数据传递到哪一个channel,配置格式,如下所示:

# Mappingfor multiplexing selector
.sources..selector.type= multiplexing
.sources..selector.header=
.sources..selector.mapping.=
.sources..selector.mapping.=
.sources..selector.mapping.=
.sources..selector.default=

上面selector的type的值为multiplexing,同时配置selector的header信息,还配置了多个selector的mapping的值,即header的值:如果header的值为Value1、Value2,数据从Source1路由到Channel1;如果header的值为Value2、Value3,数据从Source1路由到Channel2。

(4)实现 load balance功能:
在这里插入图片描述
Loadbalancing Sink Processor能够实现load balance功能,上图Agent1是一个路由节点,负责将Channel暂存的Event均衡到对应的多个Sink组件上,而每个Sink组件分别连接到一个独立的Agent上,示例配置,如下所示:

a1.sinkgroups= g1
a1.sinkgroups.g1.sinks= k1 k2 k3
a1.sinkgroups.g1.processor.type= load_balance
a1.sinkgroups.g1.processor.backoff= true
a1.sinkgroups.g1.processor.selector= round_robin
a1.sinkgroups.g1.processor.selector.maxTimeOut=10000

实现failover功能:
FailoverSink Processor能够实现failover功能,具体流程类似loadbalance,但是内部处理机制与load balance完全不同:Failover Sink Processor维护一个优先级Sink组件列表,只要有一个Sink组件可用,Event就被传递到下一个组件。如果一个Sink能够成功处理Event,则会加入到一个Pool中,否则会被移出Pool并计算失败次数,设置一个惩罚因子,示例配置如下所示:

a1.sinkgroups= g1
a1.sinkgroups.g1.sinks= k
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值