一、各中间件对比
序号 | 名称 | 简介 | 架构 | 功能 | 安装环境 | 优势 | 劣势 | 社区活跃程度 |
1 | Scribe | Scribe是facebook开源的日志系统,用于大规模日志分析处理,通常与Hadoop结合,使用scribe向HDFS中push日志 |
| scribe从各种数据源上收集数据,放到一个共享队列上,然后push到后端的中央存储系统上 开发语言 C | a.安装thrift依赖软件 g++,boost, autoconf, libevent, Apache ant, JDK b.安装thrift c.安装Hadoop d.安装scribe | 1.由于采用了thrift,客户端可以采用各种语言编写 2.scribe为日志收集提供了一种容错且可扩展的方案 3.代码量少 | 1.维护成本较高 a安装复杂,依赖的包 需要设置的环境变量非常多 b.版本差异较大,各个版 本存在兼容问题 | 1.代码停止维护 2.社区活跃度低,相关资料较少 |
2 | Flume | Flume(NG)是Cloudera开源的一个分布式、可靠的系统,能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中 |
| 重构后的NG版本,它具有基于流式数据流的简单而灵活的架构,服务可靠性机制和故障转移、恢复机制,容错能力 开发语言 Java | jdk | 1.支持集成各种主流系统和框架:Hadoop、HBase、Hive、Kafka、es、Thrift、Avro等 2.代码模块清晰 | 1.sink在向后端存储输出时,如果后端性能跟不上,agent会有oom的问题 2.消耗内存资源 | 1.apache 顶级开源项目,文档及社区活跃度还可以。2017年10月4日发布1.8.0release版 2.美团点评等再用 |
3 | Logstash | Logstash是一个开源的服务端数据处理管道,可以同时从多个源中获取数据,进行转换,然后将其发送到指定位置 |
| logstash的input组件可以收集业务日志,安全日志,访问日志等,通过filters组件解析过滤后,由ouput组件存储到指定位置, 开发语言 Jruby | jdk | 1.几乎可以访问任何数据,输出源可以和多种外部应用结合file,redis,kafka,mq 2.支持各种自定义插件 3.通常和es、Kibana结合使用,整合较好,ELK的方案比较成熟 4.代码是ruby+java写的 | 1.运行在Jvm之上 2.消耗CPU和内存资源 3.ruby写的,一些疑难问题需要结合源码排查的需要一些时间 | 1.社区活跃 2.业内用的比较多,linkedin、斗鱼、挖财等 |
4 | Beats Filebeat | Filebeat是Elastic Stack的一部分,提供轻量型方法,用于转发日志文件 |
| 定制采集日志文件,主要解决Logstash耗费资源的问题,一般Filebeat进行采集,LogStash去抽取过滤存储到es 开发语言 Golang | 1.轻量 2.对服务器资源占用低 | 1.功能单一 2.输入源不同,需要不同的beat去获取数据 | 1.社区活跃度一般 2.比较新,观望中 | |
5 | Chukwa | Chukwa是一个用于监视大型分布式系统的开源数据收集系统。其建立在Hadoop分布式文件系统(HDFS)和Map/Reduce之上,并继承了Hadoop的可扩展性和健壮性 |
| 通过agent采集数据存储到hdfs,经mapreduce计算后分析数据 开发语言 Java | a.hadoop b.maven | 1.大规模日志采集 2.代码量多 | 1.和其它组件集成不好 2.实时性差 | 1.apache 顶级开源项目 2.社区活跃度低 |