首页 > 代码库 > Flume学习笔记

Flume学习笔记

在HDFS中,文件只作为目录项存在,在文件关闭前,其长度一直显示为0。如果在一段时间内将数据写到文件中,但却没有将其关闭,那么一旦客户端出现网络中断,什么都得不到,只有一个空白的文件。

Flume的agent由三个部件构成:source、channel、sink.

其结构图如下:

技术分享

三者之间的关系如下:

  • source将event写到一个或多个channel中。
  • channel作为event从source到sink传输的保留区。
  • sink只从一个channel接收event。
  • agent可能会有多个source、channel、sink。

channel包含内存channel和文件channel2种。

flume传输的基本单位叫event.它由0个或多个头与体组成。头是一些键值对,可用于路由判定或是承载其他结构化信息。体是字节数组,包含实际负载。event结构如下图:

技术分享

拦截器是位于source和sink之间。可以用拦截器检查和修改flume的event,可在source创建event后或是sink发送event前链接0个或多个拦截器。

 技术分享

通道选择器负责将数据从一source转向一个或多个channel上。flume自带两个通道选择器,可以包含大多数据使用场景。

  • 复制通道选择器(默认)将event的副本放到每个事先配置好的通道中。
  • 多路通道选择器会根据某些头信息将event写到不同的通道中。

 示例:

技术分享

2处的机器生成2种类型数据(即三角形与矩形),对应代理使用了多路通道选择器将这两种数据划分到了不同的通道中。矩形与1处机器产生的数据合并后分到了数据中心1,三角形分到数据中心2中的ES中。

注意:数据转换可能发生在任何source之后以及任何sink之前。

 

Flume学习笔记