Flume
引言
大数据要解决三件事,存储,传输,计算。Flume的定位是在传输这一块,其需求是采集不同框架,集群的日志,要求是高可靠性。比如后端程序一般不和大数据框架部署在同一个集群,但是作为数据平台,我们需要事实获取到相关程序的日记、记录、数据等等,例如电商系统,用户点击的瞬间已经开始计算下一次推荐。
基本架构
- flume的基本存在是一个Agent,这是一个jvm进程
- 通过三个模块来管理数据传输的功能,分别是source,负责输入源对接,sink负责输出目标对接,channel负责传输工作
Flume内部工作流程
事务
Source,Channel,Sink之间的传输单元为Event,推送和拉取事件由事务管理。
- Put事务,将数据写入putList,提交,channel提交失败进行回滚
- take事务,将数据读入takeList
Processor
除此之外,Flume中还使用Processor来对Event进行过滤,通道选择,Sink输出形式等操作。
- 拦截器,对事件进行处理
- Channel Selector
- Replicating,重复
- Multiplexing,多路
- Sink Processor
- DefaltSinkProcessor,默认,单一
- LoadBalancingSinkProcessor,负载均衡
- FailoverSinkProcessor,故障转移
常见拓扑结构
Agent串联, 常用,相当于不同集群的日志传输代理。
多路复用
故障转移
聚合,非常常用,例如多框架日记收集聚合。
Flume架构搭建
自定义Interceptor
按照
source的event发送给interceptor,然后再转发给channel selector。
需要在配置文件里申明自定义interceptor
a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = com.atguigu.flume.interceptor.CustomInterceptor$Builder a1.sources.r1.selector.type = multiplexing a1.sources.r1.selector.header = type a1. |