为什么要用java重写logstash

 我来答
匿名用户
推荐于2018-05-07
展开全部

  现在ELK很流行,能快速搭建一套日志采集系统。其实自己一开始就不理解为什么后端日志采集这一层logstash 是用ruby来编写的,大家都知道像ruby这样的动态语言其实比较适合做web网站的快速开发(ror),像日志采集的后端应用,需要负者日志的采集和解析,尤其像解析日志会很耗cpu的,这样数据量一大很容易碰天花板。自己负者袋鼠云后端日志的采集和解析工作,前期用ruby版本的logstash,在4g 4core 的虚拟机上每小时只能处理800w条数据,这样的性能已经是自己做了很多优化的结果。后来在git上发现了hangout一个ITjob的实习生写的一个项目也是模仿ruby版本的logstash,用java重写,但是自己认为这个项目只是个demo,说白了只能自己玩玩,所以就萌生了自己用java重写logstash的想法。java版本的logstash基本的思路是每个input插件单独维护一个线程,filter和output公用一个线程,filter和output的线程数用户都可以自定义,默认跟机器的cpu核数相同,大部分的cpu消耗都在filter这层,所以filter线程数可以自定义,只要你的机器cpu够多,就能尽可能调大。而且java版本的logstash能保证数据的强一致性,举个列子从kafka消费数据,写入elasticsearch,有可能elasticsearch集群挂了,不能写入了,ruby版本是不能写入重复几次还是不行就扔掉了,这样就导致数据的丢失,但是java版本可以通过开关打开数据强一致性的判断,如果数据是由于elasticsearch集群挂了导致数据不能写入的,就会不断的重试这个数据直到成功,不会在消费队列里面新数据,这样就不会有数据的丢失。现在的java版本的logstash插件还是比较少,不像ruby版本的这么丰富,希望有更多的人参与进来。

  

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式