flume中的一些重要的知识点

flume中的一些重要的知识点

##1.flume的架构

client:客户端,运行agent的地方

source:数据源,负责接收数据

channel:管道,负责接收source端的数据,然后将数据推送到sink端

sink:接收channel端的数据并且持久化到目的系统

ineterceptor:拦截器,作用于source和sink,flume允许使用拦截器拦截数据

selector:选择器,作用于source端,决定数据发送的方式.

event:事件,相当于一条数据

agent:flume的客户端,一个agent运行在一个jvm里面,agent是flume运行的最小单元

2.如何保证数据的完整性

一:Flume的事务机制

​ Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。比如:spooling directory source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到channel且提交成功,那么source就将该文件标记为完成。同理,事务以类似的方式处理从channel到sink的传递过程,如果因为某种 原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到channel中,等待重新传递。

扫描二维码关注公众号,回复: 4203421 查看本文章

二:Flume的At-least-once提交方式

​ Flume的事务机制,总的来说,保证了source产生的每个事件都会传送到sink中。但是值得一说的是,实际上Flume作为高容量并行采集系统采用的是At-least-once(传统的企业系统采用的是exactly-once机制)提交方式,这样就造成每个source产生的事件至少到达sink一次,换句话说就是同一事件有可能重复到达。这样虽然看上去是一个缺陷,但是相比为了保证Flume能够可靠地将事件从source,channel传递到sink,这也是一个可以接受的权衡。如上博客中spooldir的使用,Flume会对已经处理完的数据进行标记。

三:Flume的批处理机制

​ 为了提高效率,Flume尽可能的以事务为单位来处理事件,而不是逐一基于事件进行处理。比如spooling directory source以100行文本作为一个批次来读取(BatchSize属性来配置,类似数据库的批处理模式)。批处理的设置尤其有利于提高file channle的效率,这样整个事务只需要写入一次本地磁盘,或者调用一次fsync,速度回快很多

四:多层代理

如果是第一层某个代理失败,那么可以考虑由第一层的其他节点来接管故障节点。如果是第二层代理停止运行,则为了防止数据丢失,只能让每一个第一层代理具有多个冗余的Avro sink,然后把这些sink安排到同一个sink组中,如果第二层代理中的某个代理出现问题,则该事件会被传递给该层sink组的其他代理来完成,以此来实现故障转移和负载均衡

猜你喜欢

转载自blog.csdn.net/weixin_43637653/article/details/84334759