大数据系统中通常需要采集的日志有:
系统访问日志
用户点击日志
其他业务日志(比如推荐系统的点击日志)
在收集日志的时候,一般分为三层结构:采集层、汇总层和存储层,而不是直接从采集端将数据发送到存储端,这样的好处有:
如果存储端如Hadoop集群、Kafka等需要停机维护或升级,对部署在应用服务器上的采集端没有影响,只需要汇总层做好数据的缓冲,在存储端恢复正常后继续写入数据。
采集层只负责数据的采集,由汇总层统一维护数据的路由逻辑(比如发送到hdfs还是kafka?),由于采集端所在的应用服务器一般数量较多,且会随着业务的扩展而不断增加,这种方式可以降低日志采集配置的维护成本,降低大数据应用对业务系统的影响
基于三层结构的flume日志采集系统架构一般如下图所示:
说明:
对于采集层agent,一般要求尽快将日志发送出去,避免在采集层堆积数据,所以使用memory的channel,sink统一使用avro;对于汇总层agent,要求可以尽量保证数据的缓冲,所以使用file channel,并且尽量调大容量,对于要求实时处理的数据,可以使用SSD的磁盘以提高处理速度,source统一使用avro。
各agent的配置如下:
【Agent-1】:位于采集层,用于收集应用A产生的日志,这些日志需要保存到HDFS中用于离线分析,同时也需要发送给Kafka用于实时的计算(如用户点击日志)。
【Agent-2】:位于采集层,用于收集应用B产生的日志,这些日志只需要发送给Kafka用于实时的计算。
【Agent-3】:位于汇总层,用于处理【Agent-1】发送过来的数据,由于需要同时将数据发送给HDFS和Kafka,所以配置了两个channel。
【Agent-4】:位于汇总层,用于处理【Agent-2】发送过来的数据
领取专属 10元无门槛券
私享最新 技术干货