Flume学习笔记(三)Flume 内部机制

Flume学习笔记(三)Flume 内部机制

前言

​ 本篇是 Flume 学习笔记的第三篇,主要整理 Flume 的事务机制以及 Event 如何在 Agent 中流转的整个过程。

Flume 事务机制

​ 为了保证数据的不丢失,Flume 框架在 Agent 进程中加入了俩个事物机制,分布为 Source --> Channel 和 Channel --> Sink,示意图如下:
在这里插入图片描述

  • Put 事务

    上图中 Source 将数据推送至 Channel 的过程即 Put 事务,其分为三个阶段 doPut,doCommit,doRollback

    • doPut:将 Source 中一个 batch 的数据放入 putList 缓存
    • doCommit:检查 Channel 是否能够容纳 putList 的数据若能够则将数据合并入 Channel
    • doRollback:若合并时发现 Channel 空间不够或发生异常则回滚数据防止数据丢失
  • Take 事务

    上图中 Sink 从 Channel 中拉取数据的过程即 Take 事务,其同样分文三个阶段 doTake,doCommit,doRollback

    • doTake:从 Channel 中拉取数据并放入 takeList 缓存
    • doCommit:将 takeList 中的数据发往目的地,若发送成功则清空 takeList
    • doRollback:发生异常执行回滚将 takeList 中的数据归还 Channel 防止数据丢失

​ 通过 Agent 内部的事务机制,Flume 能够保证正常运行情况下数据不会丢失,但是其并不能保证数据的不重复,例如在 Sink 写入 HDFS 的过程中 HDFS 没有正常的响应那么可能导致 Sink 再次发送相同的数据导致数据重复写入。

Flume Agent 内部原理

​ 在学习笔记第一篇中有讲过 Agent 内部包含三个组件 Source,Channel,Sink 而数据就是从 Source 到 Channel 再到 Sink,但这中间还有不少细节,本节就来剖析一下中间的细节,首先还是先来一张流程图,然后逐个讲解。
在这里插入图片描述

  1. Source 接受数据并将其包装成一个 Event 对象
  2. Source 将 Event 发送给 Channel Processor
  3. Channel Processor 将 Event 发往拦截器链,之所以叫拦截器链是因为其可以串联多个拦截器。还记得 Event 是由 Header 和 Body 组成的吗,Body 中记录了数据而 Header 的值是有拦截器写入的,拦截器可以过滤不需要的 Event 也可以在 Event 的 Header 中写入信息以供后续 Channel Selector 使用
  4. Channel Selector 接收经过拦截器链的 Event 数据并根据配置的 Channel Selector 类型来将 Event 发往 Channel,Channel Selector 有俩种类型:Replication 和 Multiplexing
    • Replication Channel Selector:直接将数据复制并发往与 Source 对接的所有 Channel
    • Multiplexing Channel Selector:会根据 Event 中的 Header 和 配置文件中所指定的将特定的 Event 发往特定的 Channel,可以实现将同一个 Source 接收的数据进行分类处理
  5. 将当前事件的去往的 Channel 发送给 Channel Processor
  6. Channel Processor 将 Event 推送至相应的 Channel
  7. 根据相应的 Sink Processor 的类型执行相应的 take 操作
    • Default Sink Processor:此为默认的类型,在此模式下一个 Channel 只能对接一个 Sink(防止数据重复)
    • LoadBalancing Sink Porcessor:在此类型下可以将多个 Sink 配置为一组,Channel 将数据以 轮询 的方式发送给组内所有 Sink
    • Failober Sink Processor:同样需要将多个 Sink 配置为一组,但与 LoadBalancing 不同的是 Channel 只会将数据发送给一个 Sink 而当其故障后才会将数据转而发送给组内的另一个 Sink,可以在组内配置 Sink 的优先级这样就可以指定改发往那个 Sink。

总结

  1. Flume 的 Agent 内部有完善的事务机制,通过 put 和 take 事务 Flume 能够保证在正常运行情况下数据不丢失
  2. Flume 可以通过 Interceptor 和 Channel Selector 来对同一个 Source 接收的数据进行分类处理
    erceptor 和 Channel Selector 来对同一个 Source 接收的数据进行分类处理
  3. 负载均衡与故障转移的 Sink Processor 都需要配置 Sink group 来使得 Channel 将数据按组的方式来发送
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值