1、Flume有哪些组件,具体有什么作用

flume多个agent运行 flume 多个source_Source


1)source:用于采集数据,Source 是产生数据流的地方,同时 Source 会将产生的数据

流传输到 Channel,这个有点类似于 Java IO 部分的 Channel。

2)channel:用于桥接 Sources 和 Sinks,类似于一个队列。

3)sink:从 Channel 收集数据,将数据写到目标源(可以是下一个 Source,也可以是 HDFS

或者 HBase)。

2、什么是flume

flume最初是分布式、高可用的日志收集系统。
不仅限于日志收集,还可以通过简单的配置收集不同数据源的海量数据并准确高效的传输到不同的数据中心
flume通过可扩展、插件化、组合式、高可用、高容错的设计模式,为用户提供了简单、高效、准确的轻量化大数据采集工具

3、Flume调优

source :
1 ,增加 source 个数,可以增大 source 读取能力。
2 ,具体做法 : 如果一个目录下生成的文件过多,可以将它拆分成多个目录。每个目录都配置一个 source 。
3 ,增大 batchSize : 可以增大一次性批处理的 event 条数,适当调大这个参数,可以调高 source 搬运数据到 channel 的性能。
channel :
1 ,memory :性能好,但是,如果发生意外,可能丢失数据。
2 ,使用 file channel 时,dataDirs 配置多个不同盘下的目录可以提高性能。
3 ,transactionCapacity 需要大于 source 和 sink 的 batchSize 参数
sink :
增加 sink 个数可以增加消费 event 能力

4、Flume的事物机制

Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务(flume ng开始,也就是1.X版本)分别负责从Soucrce到Channel,以及从Channel到Sink的事件传递。Source 到 Channel 是 Put 事务,Channel 到 Sink 是 Take 事务,比如spooling directory类型的source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到Channel且提交成功,那么Soucrce就将该文件标记为完成。同理,事务以类似的方式处理从Channel到Sink的传递过程,如果因为某种原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到Channel中,等待重新传递

5、Flume的拦截器

Source将Event写入到Channel之前可以使用拦截器对Event进行各种形式的处理,Source和Channel之间可以有多个拦截器,不同拦截器使用不同的规则处理Event,包括时间、主机、UUID、正则表达式等多种形式的拦截器。

6、Flume的选择器

Source 发送的 Event 通过 Channel 选择器来选择以哪种方式写入到 Channel 中,Flume 提供三种类型 Channel 选择器,分别是复制、复用和自定义选择器。
复制选择器: 一个Source以复制的方式将一个Event同时写入到多个Channel中,不同的 Sink 可以从不同的Channel中获取相同的 Event,比如一份日志数据同时写Kafka和HDFS,一个Event同时写入两个Channel,然后不同类型的Sink发送到不同的外部存储。
复用选择器: 需要和拦截器配合使用,根据Event的头信息中不同键值数据来判断 Event 应该写入哪个Channel中。

7、flume 和 kafka 采集日志区别,采集日志时中间停了,怎么记录之前的日志?

Flume 采集日志是通过流的方式直接将日志收集到存储层,而 kafka 是将缓存在 kafka集群,待后期可以采集到存储层。
Flume 采集中间停了,可以采用文件的方式记录之前的日志,而 kafka 是采用 offset 的方式记录之前的日志。

8、flume 管道内存,flume 宕机了数据丢失怎么解决?

1)Flume 的 channel 分为很多种,可以将数据写入到文件。
2)防止非首个 agent 宕机的方法数可以做集群或者主备

9、数据怎么采集到 Kafka,实现方式?

使用官方提供的 flumeKafka 插件,插件的实现方式是自定义了 flume 的 sink,将数据从channle 中取出,通过 kafka 的producer 写入到 kafka 中,可以自定义分区等。

10、Flume 采集数据会丢失吗?

不会,Channel 存储可以存储在 File 中,数据传输自身有事务。