袋鼠云日志:java版logstash不止提升5倍性能
Posted 袋鼠云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了袋鼠云日志:java版logstash不止提升5倍性能相关的知识,希望对你有一定的参考价值。
袋鼠云有三款自主研发的SaaS产品:袋鼠云日志、EasyDB、EasyCloud。
其中,袋鼠云日志是基于开源的ELK栈进行开发的一款商业化日志集中、搜索、分析工具。
在之前的文章里,袋鼠小妹也多次强调过,为了拥有更强大的性能,袋鼠云日志中的Logstash部分,开发GG已经对其进行了优化和升级。
今天,就由袋鼠云日志的开发GG思枢同学来为大家具体讲讲,相比于原来的Logstash,袋鼠云进行了哪些优化?优化的过程遇到了什么问题?优化的实际效果如何?
以下正文:
写之前这里先打个广告,java版本的logstash已经开源:。
首先说说大家最关心的性能问题。
当时袋鼠云的云日志系统的日志接收端是ruby版本的logstash,存储使用的是elasticsearch,前端的展示没有使用原生的kibana,而是自己写了一套前端。
本人是负责日志接收端的logstash开发人员,主要负责基于ruby版本的logstash编写一些公司业务需要的插件。
当时为了提升性能做了各种优化,比如用java重写了一些模块,再用ruby调用这些模块,比如ip的解析模块,但是最终优化的结果只是单机4core、4g的虚拟机每小时最多能处理800万的数据而已(我们的场景跟大部分人一样都是订阅kafka的消息,再经过一些filter(瓶颈主要是这里比较耗cpu)写入elasticsearch)。
袋鼠云日志的搜索功能
因为logstash的核心代码是用ruby语言开发,虽然运行在jruby上,但是由于中间涉及到数据结构的转化,性能跟原生的java语言运行在jvm上肯定是有所差距的。
所以当时抱着尽可能最大程度上提升性能,更好地满足用户需求的目的,用java重写了logstash,并把需要用到的插件也进行了重写。在同样的4core、4g虚拟机环境下,每小时能处理4000万数据,性能有了近5倍的提升。
下面是java logstash 和 ruby logstash(2.3.2版本)按照logstash官方测试方案做的性能对比:
以上三种场景的处理效率
java版本logstash性能分别是ruby版本logstash的2.99倍、4.15倍、3.49倍。
除了5倍性能的提升,java版本的logstash在保证数据不丢失方面也有了一定的突破。
ruby 版本的logstash,对保证数据防丢失这块没做太多的设计。
举个列子:数据从kafka消费再output到elasticsearch,一旦elasticsearch集群不可用,ruby logstash会自动重试几次,如果还不成功就会放弃继续消费kafka里的数据,而且重试的动作也是elasticsearch插件自身来完成的,logstash本身并没有对数据防丢失做设计。
而java 版本logstash 的BaseOutput 这个抽象类里面有个failedMsgQueue队列,每个output实例维护一个,output 插件需要自身判断哪些数据失败了,再调用addFailedMsg方法把失败的数据写入到failedMsgQueue队列里。java logstash一旦发现failedMsgQueue里面有数据就会调用sendFailedMsg这个方法来消费这里的数据,直到数据消费完成才会去消费input里的数据。这个逻辑是可以通过consistency这个属性来控制的。该属性默认是关闭的。
还有一点是input和output插件都提供了release方法,这个主要是为了jvm退出时要执行一些动作而设计的。
因为大部分的input和output插件在获取和发送数据时都会先放在一个集合里面,再去慢慢消耗集合里面的数据。这样jvm退出时,插件就可以各自实现自己的逻辑,从而保证jvm退出前,集合里面的数据彻底消耗完。当然如果你强制杀死该进程(kill -9)那就没法保证了。
现在我们的elasticsearch插件已经实现了数据防丢失逻辑,并且已经在我们的生产环境稳定的跑了很长时间了。
注释:有人问jlogstash跟hangout有什么区别,这里就不做说明了,有兴趣的同学可以看看这两个的源码就知道区别了。
最后希望jlogstash能为一些开发者解决一些问题,也希望有更多的人参与到jlogstash的开发里来。
也欢迎大家点击最下方阅读原文,体验最新版本的袋鼠云日志(https://log.dtstack.com)
袋鼠云是由多名前阿里云资深技术专家创立,核心员工来自阿里巴巴、神州数码等。
作为阿里云重要的合作伙伴,专注于为企业客户提供云计算和大数据技术服务及产品。
阿里云数加平台首个金牌合作伙伴
阿里云区域服务商和云市场供应商
ID:dtstack
以上是关于袋鼠云日志:java版logstash不止提升5倍性能的主要内容,如果未能解决你的问题,请参考以下文章
袋鼠云研发手记 | Easy[V]数据可视化揭秘:Threejs倒影解析