Flume在同程的实践
Posted TC大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume在同程的实践相关的知识,希望对你有一定的参考价值。
简介
Flume 是cloudera公司开源的一款适用于数据收集、聚合和搬运的分布式,可靠的以及高可用的服务,其容错性、可定制化开发以及易拓展性也让flume在大数据的应用中越来越展现他的优势,被企业广泛使用,是顶级的Apache项目之一
常用的场景
各类MQ、日志-->Flume-实时计算(Storm)
各类MQ、日志-->Flume-离线计算(Hbase、hdfs)
各类MQ、日志-->Flume-存储介质(mysql、MongoDB、ElasticSearch)
系统要求
JRE 1.6及以上,推荐1.7
内存、硬盘要求是不同场景,不尽相同
官方的Flume-NG架构图
目前最新版本是1.7
Flume-NG主要有三个组件组成,可实现高度的定制化,就像你买来各种电脑组件,随意组装你想要的各种功能
Source:数据采集的源头,用于主动获取或者监听或接受外部事件源的信息,包装成event传递到下以目的地,常用的有avro,kafka,日志文件等
Channel:数据传输的通道,用来保存事件,在sink消费后,才会被清理掉,消费过程具有事务性操作特性,常用的有file channel,memory channel等
Sink:数据采集后的目的地,发送flume event到执行的外部目标,常用的到hdfs、es等
Flume安装部署
1.从官方下载最新的版本,直接解压就可以了
2.配置demo
agent_tc.sources = avro-AppSrv-source
agent_tc.sinks = hdfs-Cluster1-sink
agent_tc.channels = mem-channel-1
# set channel for sources, sinks
agent_tc.sources.avro-AppSrv-source.channel=mem-channel-1
agent_tc.sinks.hdfs-Cluster1-sink.channel=mem-channel-1
# properties of avro-AppSrv-source
agent_tc.sources.avro-AppSrv-source.type = avro
agent_tc.sources.avro-AppSrv-source.bind = localhost
agent_tc.sources.avro-AppSrv-source.port = 10000
# properties of mem-channel-1
agent_tc.channels.mem-channel-1.type = memory
agent_tc.channels.mem-channel-1.capacity = 1000
agent_tc.channels.mem-channel-1.transactionCapacity = 100
# properties of hdfs-Cluster1-sink
agent_tc.sinks.hdfs-Cluster1-sink.type = hdfs
agent_tc.sinks.hdfs-Cluster1-sink.hdfs.path = hdfs://namenode/flume/webdata
3.启动服务
第一种方式是加载本地文件,本地做简单测试的时候比较方面
bin/flume-ng agent --conf conf --conf-file conf/demo.properties --name agent_tc
第二种方式是加载到ZK上的配置,适用于集群,实现一次配置,多台机器共享的目的
bin/flume-ng agent --conf conf -z $ZK_SERVER -p /FlumeNode -name agent_tc
讲完基本原理和概念,下面到应用部分
下图是日志收集到ES的一个实践架构图
需求
需要收集线上集群上千台机器的日志,放到ES中
架构功能考虑如下
1.高效性
上百台机器不可能每台机器一个配置,故采用读取公共ZK的方式,让各个集群读取到同样的配置文件
使用正则表达式匹配不同的文件目录和文件名,统一采集的数据源
2.实时性
采用TailSource实现实时拉取新增的日志,然后实时发送到ES
3.可拓展性
定制化开发识别不同日志的不同换行符的开关
使用正则获取日志中关键的词如日志中记录的时间,日志等级,自定义event head中展示的部分
4.可用性
使用FileChannel,数据会持久到磁盘
使用MemoryChannel可能会丢失数据(当Agent进程挂掉时)
5.容错性
日志最后落到ES集群,多节点提高容错性
当然还有其他的配置,比较多个source、channel、sink混合使用,本次的sink可以作为下次的source实现消息的转发,还有负载均衡的配置等,用户可以根据实际情况灵活配置。
最后记录下工作中的二点思考
一.可用性
Agent进程挂掉
case1 :是整个物理机器或者docker等虚拟环境不可用,比如机房停电了
⑴ 对于采集本机日志来说,本机采集的日志信息或者监听的信息已经不可用,不存在服务恢复问题。
⑵ 对于外部发来的消息来说,使用failover模式,当此进程挂掉时,消息转到其他机器
case2 :flume的agent进程挂掉,其他进程服务还是正常的
⑴:采用Monitor方式及时发现立即告警
⑵:使用监控进程自动拉起来agent进程
⑶:特别重要的日志,建议持久化到磁盘
⑷:使用failover模式,当此进程挂掉时,消息转到其他机器
二.监控系统
进程的监控,第一时间知晓告警并恢复服务
Sink端的文件写入、存储写入等监控,第一时间知道文件写入或者存储写入是否正常
上游消息队列的积压监控,第一时间知道进程未正常服务,为定位和排查节约时间
文件个数、大小的监控,第一时间知晓Channel是否有积压,性能问题,及时做调整
以上是关于Flume在同程的实践的主要内容,如果未能解决你的问题,请参考以下文章
同程旅行王晓波:同程凤凰缓存系统在基于 Redis 方面的设计与实践(上篇)