17.3 Chukwa的可靠性

容错能力是Chukwa设计的一个重要指标。即使在系统崩溃、网络连接中断情况下,也不能丢失数据。Chukwa的方案与其他分布式系统在本质上的不同是其分布式存储日志的方式。该方式会将数据源的相应状态写入数据节点,由Agent管理节点崩溃的情况,Agent通常会为自己的状态设置检查点(Checkpoint)。该Checkpoint描述了每一个当前被监控的数据流,并且清查有多少来自流中的数据已经被提交到DataSink上。在节点崩溃后,Chukwa使用后台管理工具去重启Agent。

在Agent进程恢复后,每一个Adaptor将从最近的Checkpoint状态重启。这意味着Agent将重新发送没有提交的数据,或者重新发送在最后的Checkpoint记录之后所提交的数据。在恢复过程中所产生的重复块将通过Archiving作业滤除掉。跟踪文件状态的Adaptor通过文件的定位固定偏移量来恢复文件内容,并且Adaptor也能够监控临时数据源,如网络的套接字。在这种情况下,Adaptor通过重新发送数据就能很容易恢复丢失的数据,因此丢失数据将不是一个大的麻烦,例如丢失一分钟的系统度量信息。因为在默认提供封装好的库的Adaptor中已经缓存了来自不稳定数据源的数据,所以就可以建立不带容错机制的Collector。Agent将检查Collector对于文件系统的状态,这个状态会起到侦测系统故障并从故障中恢复的作用。恢复则完全由Agent处理,并不需要从失效的Collector中获取信息。然后Agent发送数据到Collector, Collector将写数据存储到HDFS文件中,并且也定位了数据在文件中的位置。这个位置很容易就能确定,因为每一个文件仅是通过一个Collector写的,唯一需要满足的要求就是排列数据和增加其长度。

Collector将不监控已写入的文件,也不存储每一个Agent状态,轮询Collector而不是直接对文件系统访问是为了减少文件系统主节点的负载,把Agent从存储系统的烦琐中解脱出来。在出现故障时,Agent将恢复上一个Checkpoint,并且选择一个新的Collector。