在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
Logstash开发采集上亿级别数据,需求属于日志采集的范畴,Logstash本身不支持反序列化功能,需要自定义开发ruby插件来支持,使用MLSQL结合UDF的方式进行流式处理。MLSQL写入hdfs会产生大量的小文件,需要单独开发合并文件的功能,写入es的数据是需要数仓结合其他业务数据进行建模,用离线处理的方式。
开发背景:公司业务系统做优化改造,同时为了能够实现全链路监控需收集所有业务系统之间的调用日志;数据情况:每天20亿以上;机器成本:3台kafka集群;2台logstash采集机器;技术:Java,MQ,MLSQL,Logstash。
采集流程:
MLSQL 消费MQ:原始日志产生侧通过protobuf进行序列化推送至mq,然后通过MLSQL进行反序列化并进行简单的etl处理后,再推送至MQ;
通过Logstash进行消费MQ:通过logstash消费经过MLSQL处理后的数据,并在这里通过ruby进行再次的加工处理,最后写入es和hdfs(一部分流程推送到es是业务侧使用,而另一部分写入hdfs是提供给数仓使用)
数仓建模:通过数仓建模,将最后的指标结果推送至es提供给业务侧使用,主要是借鉴这个需求讲解Logstash在实际场景中的使用以及优化。
Logstash开发流程:
1、确定日志格式
一个日志文件里肯定是不止一种日志格式,也有可能是标准化的格式,这里需要跟日志产生侧进行确认格式。
2、调试grok
确定好日志格式后,编写grok语法,然后进行调试,本人是通过kibana6自带的grok debug进行调试。结合该需求背景,最后经过logstash采集的时候,其实已经通过MLSQL进行了处理,最后Logstash消费的是格式就是一个json字符串,所以不需要grok语法。
3、调试ruby
结合该需求,使用ruby进行一些清洗逻辑
4、优化
优化工作在整个需求开发周期的比例较大,数据量较大资源较少,具体优化思路如下:
(1)MLSQL优化
这部分的优化工作主要是在反序化这块,剔除一部分无用字段,以及提前过滤一部分数据量,一部分注册UDF的代码:
(2)Kafka端优化
因kafka集群是集团共用,所以kafka端的优化其实只涉及到消费端的优化。这里只调节数据压缩、消费者线程数这两个参数。
(3)hdfs优化
logstash写入hdfs的部分不用使用自带的webhdfs插件,而是自定义的插件。
因自定义插件中涉及到文件锁的问题,会通过比对前后两次文件是否一致来进行文件最后的刷写,所以这里只能通过减少文件的更新频率来减少上下文的切换以及刷写操作
(4)ES优化
es部分的优化也只是涉及到写优化,比如批量写入、调大线程数、增加refresh间隔、禁止swapping交换内存、禁止refresh和replica操作,调大index buffer等操作。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java开发仓库管理系统设计应用有哪些意义?
Java开发仓库管理系统设计应用有哪些意义?仓库管理系统设计合理应用可以使仓库管理更加标准化、提高效率,节约成本、员工登录模块的实现;仓库管理系统实现、原材料管理模块、产品入库管理模块、产品出库管理模块的只能管理。
8085
2019-08-02 17:42:22
Java开发中并发工具类有哪些?如何学习?
并发编程不但能大大提高代码的执行效率,也可以提高用户体验的好感度。Java编程语言中,在JDK的并发包中提供了几个非常实用的并发工具类。其中CountDownL _atch、CyclicBarrier、Semaphore工具类提供了并发编程流程控制的手段,Exchanger工具类则提供了在线线程间的交换数据的手段。下面小编就为大家详细介绍一下这些并发工具类。
5628
2019-11-08 18:42:57
零基础学Java难吗?需要学多长时间?
零基础学Java难吗?需要学多长时间?都说万事开头难,编程零基础的初学者学习Java的难度可想而知,再加上Java本身的内容多,许多自学者学了大半年后都是从入门到放弃。因此建议大家尤其是初学者,最好报培训班进行系统化地学习。那么报培训班需要学多长时间呢?具体时间因人而异,一般是学到四到六个月就可以达到就业的水平。
8435
2019-12-31 16:05:44
SpringMVC注解解析
今天我们要来梳理的是请求映射注解@RequestMapping。相信大家对SpringMVC注解并不陌生,下面就来让我们一起来解析SpringMVC注解的内容吧,包括SpringMVC注解的概念和属性、mvc命名空间引入和组件扫描。
4116
2020-04-30 10:03:02
Java常用设计模式及应用场景介绍
Java常用设计模式有哪些?设计模式是设计代码结构,方便开发或后期调整,学习Java必须要掌握一些常用设计模式,如单例模式、模板方法、工厂模式、建造者模式、适配器模式等。主要培养常用设计模式和代码抽取优化能力,可能涉及6大设计原则及23种设计模式。
5223
2021-04-12 16:02:05