Flume Agent内部原理

一、原理流程图

Flume Agent内部原理

  • 拦截器链 Intercepter:进行简单的数据清洗和过滤

  • 如果只有一个Sink和一个Channel的话那就直接传过来了

  • 如果有多个Sink的话想要接受Channel的的数据必须要经过Sink组(也即是SinkProcessor),然后SinkProcessor启动sink,sink不断到channel中去轮询,将channel中的event事件拿过来。

注意:同一个sink组(好多个sink)channel中的同一个数据只能被拉取一次

SinkProcessor有如下三种类型:

  • DefaultSinkProcessor对应的是单个的Sink
  • LoadBalancingSinkProcessor和FailoverSinkProcessor对应的是Sink
    Group,LoadBalancingSinkProcessor可以实现负载均衡的功能,FailoverSinkProcessor可以实现故障转移、错误恢复的功能。

Channel Selector 分为两种

  • Replicating Channel Selector (默认):
    将source过来的events发往所有的channel(相当于复制多份)
  • Multiplexing Channel Selector:多路Channel选择器,可以配置source发过来的events具体发往哪些Channel

**拦截器(Interceptor):**是简单的插入式组件,设置在Source和Source写入数据的Channel之间,Source接收到的事件在写入到Channel之前,拦截器都可以对时间进行拦截,转换或删除这些事件。拦截器也有很多类型,如正则表达式的拦截器,时间戳拦截器,可以为事件添加报头,或者移除现有报头等。某个Source可以配置成使用多个拦截器,这些拦截器按照配置的顺序依次被调用,这就是所谓的责任链模式。一旦拦截器处理完事件,拦截器链返回的事件列表传递到Channel列表,即通过Channel选择器为每个事件选择Channel。

Source:

  • Source可以监听一个或者多个网络端口,用于接收数据或者可以从本地文件系统读取数据。
  • 每个Source必须至少连接一个Channel。基于一些标准,一个Source可以写入几个Channel,复制事件到所有或某些Channel。

Channel:

  • Channel 是被动组件,用来缓冲Agent已经接受但还没写出到另一个agent或者存储系统的数据。
  • Channel 的行为像队列,Source写入他们,Sink从他们读取。
  • 多个Source可以安全的写入到相同的Channel ,并且多个Sink可以从相同的Channel进行读取。
  • 一个Sink只能从一个Channel 读取。
  • 如果多个Sink从相同的Channel 读取,它可以保证只有一个Sink将会从Channel 读取一个指定特定的事件。

Sink:

  • 连续轮询各自的Channel 来读取和删除事件。
  • Sink将事件推送到下一阶段,或到最终目的地。
  • 一旦在下一阶段或其目的地中的数据是安全的,Sink 通过事务提交通知Channel ,可以从Channel 中删除这些事件。

Flume 本身不限制Agent 中Source、Channel 和Sink的数量。因此Flume Source可以接收事件,并可以通过配置将事件复制到多个目的地。这使得Source通过 Channel处理器、拦截器和Channel 选择器,写入数据到 Channel成为可能。