Flume知识点总结

1.为什么会用到 Flume?

实时读取服务器本地磁盘的数据,将数据写到分布式文件系统当中(HDFS/Kafka/Hbase/ElasticSearch)Flume 在这中间充当一个中间件的作用,进行比如现在的推荐,实时的推荐的广告等等。
Flume知识点总结_第1张图片
Flume知识点总结_第2张图片

2.讲一下 Flume 的事务机制(Flume 的流式处理过程)

Flume知识点总结_第3张图片
Flume知识点总结_第4张图片
Flume知识点总结_第5张图片

  • source 数据的常见类型: spooling directory,exec,avro,netcat,最常用的是Taildir,
    Taildir 既能实现断点续传,又可以保证数据不丢失,还能进行实时监控。

  • channel : Memory Channel 和 File Channel。
    Memory Channel 基于内存存储,在不需要担心数据丢失的情况下适用。
    File Channel 是 Flume 的持久化 Channel,就算系统宕机也不会丢失数据。

  • sink 组件常见的包括 HDFS、Kafka、logger、avro、File 等。

2、你是如何实现 Flume 数据传输的监控,你用的什么监控工具,你监控的是什么内容?

采用 Ganglia 工具做监控,Ganglia 有可视化的组件可以检测数据传输的一些过程指标,通过 Ganglia 的监测图,可以判断数据是否丢失。
比如比较 EventTakeAttemptCount 与 EventTakeSuccessCount 比较,如果前者远远大于后者,可能是 Channel 容量设置过小的原因,或者数据 Channel 接收时发生丢失。可以用来监控每一天每个广告位上的广告数据信息的采集,广告数据是落在后端服务器的的本地文件系统里,通过Flume 采集发送到 HDFS 和 ES 里面。

3.讲一下 Flume 的 Channel Selectors ,以及它们的区别

主要有两种类型:Replicating Channel Selector (default)和 Multiplexing Channel Selector。
二者的区别就是: Replicating 会将 Source 发过来的 events 发往所有 Channel,而 Multiplexing 可以选择该发往哪些 Channel。

4.Flume 调优(主要是参数方面的调优)

1. Source

增加 source 个数(使用 Taildir Source 时可增加 FileGroups 的个数),可以增大 Source 的读取数据的能力。

Batchsize 参数决定一次批量运输到 Channel 的 event 条数,适当调大这个参数可以提高 Source 搬运 Event 到 Channel 时的性能。

2. Channel

type 选择 memory 时 Channel 的性能最好,但是如果 Flume 进程意外挂掉可能会丢失数据。 type 选择 file 时 Channel 的容错性更好,但是性能上会比 memory channel 差。

使用 file Channel 时 dataDirs 配置多个不同盘下的目录可以提高性能。Capacity 参数决定 Channel 可容纳最大的 event 条数。 transactionCapacity 参数决定每次Source 往 channel 里面写的最大 event 条数和每次 Sink 从 channel 里面读的最大 event 条数。
transactionCapacity 需要大于 Source 和 Sink 的 batchSize 参数。

3. Sink

适当增加 Sink 的个数,可以增加 Sink 的消费 event 能力。 Sink 也不是越多越好,太多的话, Sink 会占用系统资源,造成系统资源的不必要浪费。

batchSize 参数决定 Sink 一次批量从 Channel 读取的 event 条数,适当调大这个参数可以提高 Sink 从 Channel 搬出 event 的性能。

3. Flume 的事务机制

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

你可能感兴趣的:(学习记录)