• flume框架原理


    一、flume事物

    在这里插入图片描述

    上图所示

    Source向Channel推送数据前会开启一个Put事物
    Put事物流程:

    1. 调用doPut方法将数据先写入到临时缓冲区putList
    2. 再调用doCommit方法检测channel内存队列是否足够
    3. 如果内存够则将数据写入到channel中,如果内存空间不够则调用doRollback方法,回滚数据,将数据写入到source中

    sink向Channel拉取数据前会开启一个Take事物
    Take事物流程:

    1. 调用doTake将数据先写入到临时缓冲区takeList中,之后将数据发送到HDFS中
    2. 再调用doCommit方法,如果数据全部发送成功,则清除临时缓冲区takeList
    3. 如果发生不成功则调用doRollback方法,将临时缓冲区takeList中的数据归还给channel内存队列

    二、flume内部原理

    在这里插入图片描述

    1. Source接收数据
    2. Source将数据传给Channel Processor(处理器)
    3. 将事件传给拦截器(进行数据的处理),然后再将数据传给Channel Processor
    4. Channel Processor将数据发送给Channel Selector(选择器)
      选择器有两大策略
      Replicatiing Channel Selector(默认的)复制机制:将Source发来的数据发给所有的Channel。比如一个Source绑定了两个Channel,就把同样的一份数据发给两个Channel
      Multiplexing Channel Selector多路复用机制:可以配置参数,将Source发来的数据选择性的发给哪些Channel
    5. 然后数据再返回给Channel Processor(处理器)
    6. 根据上面的选择器的策略,将事件写入相应的Channel
    7. sink Processor(sink组)主动向Channel拉取数据
      三种拉取策略
      DefaultSinkProcessor:对应的是单个Sink
      LoadBalancingSinkProcessor:可以实现负载均衡的功能,数据分散给多个sink拉取数据
      FailoverSinkProcessor:故障转移,可以错误恢复的功能。可以在多个sink中设置优先级,比如优先级最高的sink在拉取数据时挂掉了,那么在剩下的sink中,选择优先级最高的继续进行拉取数据;如果挂掉的sink恢复了,则会使用优先级最高的进行拉取数据
  • 相关阅读:
    四则运算Java版
    小程序如何设置首选配送公司
    Linux 如何排查网络问题
    Vue3 - watch 侦听器(超详细使用教程)
    latex-minted高亮代码配置
    018-第三代软件开发-整体介绍
    在Linux中使用docker【中】(常见命令上)
    naiveui的table实现可滚动的恒居中空数据处理
    ROS的程序编写流程
    共n级台阶,每次可以上1级或2级台阶,有多少种上法?
  • 原文地址:https://blog.csdn.net/weixin_44604159/article/details/127716078