Flume的三大核心组件

Flume的三大核心组件:

  • Source:数据源
  • Channel:临时存储数据的管道
  • Sink:目的地

接下来具体看一下这三大核心组件都是干什么的

Source

  • Source: 数据源:通过source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的 channel
    Flume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka的 等等、当然了,如果这里面没有你喜欢的,他也是支持自定义的

在这我们挑几个常用的看一下:

  • Exec Source:实现文件监控,可以实时监控文件中的新增内容,类似于linux中的tail -f 效果。 在这需要注意 tail -F 和 tail -f 的区别
    tail -F
    等同于–follow=name –retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果 再次创建相同的文件名,会继续追踪
    tail -f
    等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止 在实际工作中我们的日志数据一般都会通过log4j记录,log4j产生的日志文件名称是固定的,每天定时给文件重命名
    假设默认log4j会向access.log文件中写日志,每当凌晨0点的时候,log4j都会对文件进行重命名,在 access后面添加昨天的日期,然后再创建新的access.log记录当天的新增日志数据。 这个时候如果想要一直监控access.log文件中的新增日志数据的话,就需要使用tail -F
  • NetCat TCP/UDP Source: 采集指定端口(tcp、udp)的数据,可以读取流经端口的每一行数据
  • Spooling Directory Source:采集文件夹里新增的文件
  • Kafka Source:从Kafka消息队列中采集数据

前面我们分析的这几个source组件,其中execsource 和 kafkasource在实际工作中是最 常见的,可以满足大部分的数据采集需求。

channel

Channel: 接受Source发出的数据,可以把channel理解为一个临时存储数据的管道
Channel的类型有很多:内存、文件,内存+文件、JDBC等

接下来我们来分析一下:

  • Memory Channel:使用内存作为数据的存储
    优点是效率高,因为就不涉及磁盘IO
    缺点有两个
    1:可能会丢数据,如果Flume的agent挂了,那么channel中的数据就丢失了。
    2:内存是有限的,会存在内存不够用的情况
  • File Channel:使用文件来作为数据的存储
    优点是数据不会丢失 缺点是效率相对内存来说会有点慢,但是这个慢并没有我们想象中的那么慢,所以这个也是比较常用的一种channel。
  • Spillable Memory Channel:使用内存和文件作为数据存储,即先把数据存到内存中,如果内存中数据达到阈值再flush到文件中
    优点:解决了内存不够用的问题。
    缺点:还是存在数据丢失的风险

sink

Sink:从Channel中读取数据并存储到指定目的地
Sink的表现形式有很多:打印到控制台、HDFS、Kafka等,

注意:Channel中的数据直到进入目的地才会被删除,当Sink写入目的地失败后,可以自动重写, 不会造成数据丢失,这块是有一个事务保证的。

常用的sink组件有:

  • Logger Sink:将数据作为日志处理,可以选择打印到控制台或者写到文件中,这个主要在测试的时候使用
  • HDFS Sink:将数据传输到HDFS中,这个是比较常见的,主要针对离线计算的场景
  • Kafka Sink:将数据发送到kafka消息队列中,这个也是比较常见的,主要针对实时计算场景,数据不落盘,实时传输,最后使用实时计算框架直接处理。
    原文作者:简单随风
    原文地址: https://blog.csdn.net/lt326030434/article/details/118926483
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞