规划、部署、监控Flume

  1. 规划一个Flume部署

    修复时间
    有两个类型的上限:MaxTTR,单个服务器的最大故障时间;
    MTSR,存储或索引集群的最大故障时间

  2. Flume Channel需要多少容量

    假设所有应用服务器事件的综合生产能力在高峰小时是每秒Pmax个事件,那么在这个时期产生事件的总数为:Tmax=Pmax * MaxTSR
    这是应该缓冲在整个Flume部署中的事件总数。但没有考虑托管Flume Agent的机器也可能失败的情况,所以为Flume集群添加一个额外的缓冲是很重要的。所以,在整个Flume部署中优异的整体Channel容量为:T=1.25 * Tmax

  3. Flume需要多少层

    当设计分层Flume部署时,要计算从层到HDFS的通信能力(假设最终数据写入HDFS)。直接写入到HDFS集群的机器数量应该是非常有限的,一般来说,保持写数据到HDFS集群的Agent的数量处于一个比较小的值是一个好主意。所需的Sink数量和Agent数量,基于特定的用例而有所不用。

    当写入到HDFS的Agent的总容量大于T,且HDFS层Agent的数量已经增加到超过8个时,在应用程序和写数据到HDFS的层之间最好再添加一个额外的层Tn。

    一旦Tn中Agent的数量和写入到HDFS层之间的Agent数量比率达到32:1,在应用程序和Tn之间就很有必要再增加一个额外的层了。

  4. 判定Flume能否再扩展或目的地存储系统或索引是否变慢

    大多数情况下,如果没有持续在日志中看到异常,且Channel容量增长没有失控,则意味着一切都好,可以发送更多的数据。否则,需要考虑增加Agent。

    如果Flume Sink清理Channel不够快,而且日志中没有超时,那么添加更多的Sink将有所帮助,直到JVM可以支持线程的最大数量。如果Channel清除的速度仍不够快,且Channel大小不断增加,意味着所有Sink结合起来清除Channel的速度都不如Source写入到Channel的速度快,表明需要在这层添加更多的Flume Agent,从而减少Source写速率和Sink清理速率之间的差值。

  5. 通过跨数据中心链接发送数据

    如果生产数据的应用程序在一个数据中心,而HDFS集群在另一个数据中心,应用程序为了避免在链接上的高延迟或失败发生,应该写入到Flume,让Flume处理延迟或失败。依靠Flume做缓冲,重试和回退以减少在这些链接上的阻塞。

    如果跨广域网的写操作职责交给Flume,不太可能发生重复和HDFS中的小文件失败的情况,因为RPC sink-source组合负责可靠的跨广域网传送数据。

    但是,让Flume的写操作跨广域网直接写入HDFS不是一个好主意,因为失败的可能性更大,因此,下面的设计是必要的:

    这里写图片描述
    即在两个数据中心均部署一层Flume作为缓冲。

  6. 层分片

    这里写图片描述

  7. 监控Flume

    Flume有一个度量框架,可以通过JMX或HTTP或Ganglia服务器展示出度量。由于JMX可以用来启动或停止Java应用程序,所以不建议允许通过JMX访问远程计算机。默认情况下该功能禁用,处于安全原因最好不要启用这个功能。
    为了给HTTP报告度量,以如下命令启动Agent:

    这里写图片描述
    以下命令启动Agent,可用于向Ganglia报告度量:

    这里写图片描述