Flume 面试

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

Flume不会丢失数据,根据Flume的架构原理,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink也是事务性的,所以这两个环节不会出现数据的丢失;
惟一可能丢失数据的状况是Channel采用memoryChannel,agent宕机致使数据丢失,或者Channel存储数据已满,致使Source再也不写入,未写入的数据丢失。web

可是有可能形成数据的重复,例如数据已经成功由Sink发出,可是没有接收到响应,Sink会再次发送数据,此时可能会致使数据的重复。数据库

2、Flume 与 Kafka 的选取?

采集层主要可使用 Flume、Kafka 两种技术。数组

Flume:Flume 是管道流方式,提供了不少的默认实现,让用户经过参数部署,及扩展 API。缓存

Kafka:Kafka 是一个可持久化的分布式的消息队列。安全

Kafka 是一个很是通用的系统。你能够有许多生产者和不少的消费者共享多个主题Topics。相比之下,Flume 是一个专用工具被设计为旨在往 HDFS,HBase 发送数据。它对HDFS 有特殊的优化,而且集成了 Hadoop 的安全特性。因此,Cloudera 建议若是数据被多个系统消费的话,使用 kafka;
若是数据被设计给 Hadoop 使用,使用 Flume。正如大家所知 Flume 内置不少的 source 和 sink 组件。然而,Kafka 明显有一个更小的生产消费者生态系统,而且 Kafka 的社区支持很差。但愿未来这种状况会获得改善,可是目前:使用 Kafka 意味着你准备好了编写你本身的生产者和消费者代码。若是已经存在的 Flume Sources 和 Sinks 知足你的需求,而且你更喜欢不须要任何开发的系统,请使用 Flume。Flume 可使用拦截器实时处理数据。这些对数据屏蔽或者过量是颇有用的。Kafka 须要外部的流处理系统才能作到。服务器

Kafka 和 Flume 都是可靠的系统,经过适当的配置能保证零数据丢失。然而,Flume 不支持副本事件。因而,若是 Flume 代理的一个节点奔溃了,即便使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。若是你须要一个高可靠行的管道,那么使用Kafka 是个更好的选择。架构

Flume 和 Kafka 能够很好地结合起来使用。若是你的设计须要从 Kafka 到 Hadoop 的流数据,使用 Flume 代理并配置 Kafka 的 Source 读取数据也是可行的:你没有必要实现本身的消费者。你能够直接利用Flume 与HDFS 及HBase 的结合的全部好处。你可使用ClouderaManager 对消费者的监控,而且你甚至能够添加拦截器进行一些流处理。分布式

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

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

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

1)Flume 的 channel 分为不少种,能够将数据写入到文件。oop

2)防止非首个 agent 宕机的方法数能够作集群或者主备

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

Flume 采集日志是经过流的方式直接将日志收集到存储层,而 kafka 是将缓存在 kafka集群,待后期能够采集到存储层。

Flume 采集中间停了,能够采用文件的方式记录以前的日志,而 kafka 是采用 offset 的方式记录以前的日志。

6、flume 有哪些组件,flume 的 source、channel、sink 具体是作什么的?

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

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

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

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

或者 HBase)。

7、为何使用Flume?

8、Flume组成架构?

9、FlumeAgent内部原理?

十.Flume Event

它是数据流的基本单元,由一个装载数据的字节数组(byte payload)和一系列可选的字符串属性来组成(可选头部).

11、Flume agent

Flume source 消耗从相似于 web 服务器这样的外部源传来的 events.

Flume source 组件能够处理各类类型、各类格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy.

Flume channel

Channel 是链接Source和Sink的组件, 是位于 Source 和 Sink 之间的数据缓冲区。

Flume channel 使用被动存储机制. 它存储的数据的写入是靠 Flume source 来完成的, 数据的读取是靠后面的组件 Flume sink 来完成的.

Channel 是线程安全的,能够同时处理几个 Source 的写入操做和几个 Sink 的读取操做。

Flume 自带两种 Channel:

Memory Channel是内存中的队列。

Memory Channel在不须要关心数据丢失的情景下适用。

若是须要关心数据丢失,那么Memory Channel就不该该使用,由于程序死亡、机器宕机或者重启都会致使数据丢失。

File Channel。

File Channel将全部事件写到磁盘。所以在程序关闭或机器宕机的状况下不会丢失数据。

还能够有其余的 channel: 好比 JDBC channel.

  1. Flume sink

Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者发送到另外一个Flume Agent。

Sink 是彻底事务性的。

在从 Channel 批量删除数据以前,每一个 Sink 用 Channel 启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink 就利用 Channel 提交事务。事务一旦被提交,该 Channel 从本身的内部缓冲区删除事件。若是写入失败,将缓冲区takeList中的数据归还给Channel。

Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。

12、Flume的事务机制

Flume的事务机制(相似数据库的事务机制):Flume使用两个独立的事务分别负责从Soucrce到Channel,以及从Channel到Sink的事件传递。好比spooling directory source 为文件的每一行建立一个事件,一旦事务中全部的事件所有传递到Channel且提交成功,那么Soucrce就将该文件标记为完成。同理,事务以相似的方式处理从Channel到Sink的传递过程,若是由于某种缘由使得事件没法记录,那么事务将会回滚。且全部的事件都会保持到Channel中,等待从新传递。

相关文章
相关标签/搜索