1. flume是什么
flume是一种日志收集或数据采集工具,可以从各种各样的数据源(服务器)采集数据传输(汇聚)到大数据生态的各种存储系统中(hdfs,hbase,kafka)等
2. flume的工作原理是什么:
flume是一种日志收集和数据采集的工具,将flume部署在日志服务器上,将日志文件通过source从日志服务器上读取文件,然后写入到channel中,然后sink在从channel中读取数据,写入到hdfs文件系统中
3. flume的核心架构
flume中的核心是由一个个agent组成的一个简单或者是复杂的传输通道,对于每一个agent都是从数据源读取数据,并发往下一个目的地,agent中三个组件的设计思想主要是为了,source和sink之间解耦合,实现异步操作.
4. flume 中的核心概念:
Source:
是agent中的采集组件,用来和数据源对接,以获取数据,source有各种各样的内置实现,比如我们实际生产中经常用到的taildir source 组件
Sink:
sink组件是agent中的下沉组件,用于往下一级agent传递数据或者是向最终的存储系统传递数据,sink组件从channel中取出event然后根据目标存储的需求,转成其他形式输出;
Channel:
传输通道组件,用来将source读取数据传递到sink过程中间的一个缓存组件
Event:
数据在channel中封装形式,source从数据源中读取数据,然后在封装成event对象,放入channel中,event封装对象主要由两部分组成:Headers 和 body ;
Headers:是一种map集合,用来携带一些kv的元数据信息.
body:就是一种字节数组byte[],装载具体的数据内容
interceptor 拦截器:
拦截器的工作是在source读取数据源之后,source产生的event对象会被拦截器根据需求进行拦截处理,比如自定义给event中的headers自定义key和value
channel selector:
一个source可以对接多个channel,则event在多个channel之间的传递策略,就是通过配置channel selector决定的,channel selector 有两种实现:replicating(复制) ,multiplexing(多路复用)
sink processor :
当一个channel对应多个sink,sink就会组成一个sink组,event对象在sink中是如何进行传递的,就需要靠sink processor来决定,sink processor 有两种形式,一种是:load balance(负载均衡)及sink组中的每一个sink依次循环取channel中的event对象,另一种是:fail over (自动切换和恢复机制) sink组中的一个sink一直保持优先使用机制,其他的sink处于一种等待状态,当优先使用的sink挂掉之后,在从等待的sink 选则一个,接替上一个sink的工作;
Transaction:
事务控制机制,flume中有使用了两种独立的事务控制,一种是put操作:source 读取数据源,将event到channel中,另一种是take操作:sink从channel中获取event并写入到目标存储
事务控制的特点:
事务的实现程度,取决于运行时所选择的具体的组件实现类;
再好的组件的组合,也只实现到了at least once!(不会丢失数据,但可能产生重复传输)
事务实现的核心点,就是记录状态(比如source,记录自己完成的数据的偏移量
5. flume中的事务控制是如何设计的
1) flume中的事务控制有两个独立的阶段,一种是put操作,一种是take操作
2) put操作:source 读取数据到channel中这是一个事务控制,一旦事务中所有的事件全部传递到channel且提交成功,那么soucrce就将event batch标记为完成。如果source在将数据传递到channel过程中出现宕机,事务就会回滚,下一次开机就会根据上一次记录的状态从新读取数据,重新传递到channel中
3)take操作:sink从channel中取数据,如果不发生宕机,并且将sink取出的event对象写入到目标存储位置,这事务成功,返回ok,如果sink从channel中取event对象写入目标文件系统,出现某种原因导致这事务失败,事件就会回滚,所有的事件就会保持在channel中,等待重新传递
6.flume的操作步骤
1.先将flume安装在需要采集的服务器上,上传,解压,即可
2.根据不同的需求,选择要用的source 类型,channel 类型和 sink类型
3. 根据选择的类型,编写配置文件,将文件放入指定的目录中
4.在bin目录下启动客户端命令:bin/flume-ng agent -n a1 -c conf/ -f ./agentconf/xxx.properties -Dflume.root.logger=INFO,console