大数据实战:如何实时采集上亿级别数据?
背景介绍
公司业务系统做优化改造,同时为了能够实现全链路监控,需收集所有业务系统之间的调用日志。
数据情况:每天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本身不支持反序列化功能,需要自定义开发ruby插件来支持,但这样一来开发成本较高,且不好维护,所以使用了MLSQL结合UDF的方式进行流式处理
原因二:
大家在对最后的输出流程可能会有疑惑,为什么不直接通过MLSQL来写入到hdfs和es呢,这里有两点:
1.MLSQL写入hdfs会产生大量的小文件,需要单独开发合并文件的功能
2.最后写入es的数据是需要数仓结合其他业务数据进行建模的,而MLSQL在这点做的不太好,所以这里走的是离线处理的方式
说到这里,具体的场景需要结合公司的实际情况来进行决策的,有些同学或许会想为什么不用flume进行日志采集呢?那这里就不做过多的解释了,白菜萝卜各有所爱,适合自己的才是最好的!废话不多说,接下来进入正题,结合该需求场景,如何使用较少的成本完成大数据量的采集呢?以及如何优化呢?
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等操作
--end--扫描下方二维码添加好友,备注【交流】
可私聊交流,也可进资源丰富学习群
大数据实战:如何实时采集上亿级别数据?相关推荐
- 使用mongodb处理上亿级别数据
最近接到一个任务关于效能监控平台的开发,该效能平台要求监控日志的发送量以及成功率等信息,了解到需求,由于每天将会有平均200万的日志信息,最大接近400万,这数据还是十分庞大的,哪么半年下来起码有6亿 ...
- 大数据实战-callLog项目(通话记录数据分析)之数据生产
文章目录 前言 生成基础数据 Maven依赖 姓名-手机号列表 时间维度表 自动随机生成 生成时间戳 生成一定范围内的long数据 代码 调用演示 获得随机的时间戳 代码 调用示例 生成一行记录 打包 ...
- Mysql如何快速制造千万级上亿条数据?
大前提 首先确保当前表中至少有一条数据. 思路 对表中数据进行指数型增加,n的2,3,4,-,x次方的递增. 命令:INSERT INTO 表名(字段1,字段2,-,字段n) SELECT (字段1, ...
- ElasticSearch 在数十亿级别数据下,如何提高查询效率?
来源:https://zhuanlan.zhihu.com/p/60458049 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就 ...
- 【ElasticSearch】ElasticSearch在数十亿级别数据下,如何提高查询效率? 性能优化
1.概述 转载:https://zhuanlan.zhihu.com/p/60458049 这里面主要有个filesystem cache 服务这个想法很好. 面试题 es 在数据量很大的情况下(数十 ...
- hive上亿级别的表关联 调优
环境:公司决定使用宽表,将10个相关的大表进行全量关联 (1个上亿级别的表,5个上千万的表,剩下的表都不到百万的表) 花了两天的时间研究,测试 例如: a~g这几个表中,a表为上亿级别的表,5个上千万 ...
- R语言data.table导入数据实战:data.table使用by函数进行数据分组(aggregate)
R语言data.table导入数据实战:data.table使用by函数进行数据分组(aggregate) 目录 R语言data.table导入数据实战:data.table使用by函数进行数据分组( ...
- ES 在数据量很大的情况下(数十亿级别)如何提高查询效率?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | advanced-java 来源 | http ...
- es 查询语法_ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
点击上方☝SpringForAll社区 轻松关注! 及时获取有趣有料的技术文章 本文来源:http://8rr.co/GFLb 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 e ...
- 【华为云技术分享】上亿条数据,如何查询分析简单又高效?
正值618大促,小张遇到了一个棘手的问题,需要在一周内将公司近1年电商部门的营收和线下门店经营数据进行联合分析. 这将产生哪些数据难题呢? 数据孤岛:电商部门的数据存在数仓A.门店经营收入数据存在数仓 ...
最新文章
- 质量追溯和防窜货管理解决分析
- 区块链分布式账本Hyperledger Fabric介绍
- so使用原则(要么不支持,要么全部支持) 固定的运行平台 指定目录:System.load(/data/data/package-name/mydir/libmath.so);
- 一种简单的不需要查询UI5文档就能获得所有API的小技巧
- 鸿蒙科技与文化,数字阅读 | “华为鸿蒙”:当现代科技遇到古典文化
- 惊了,掌握了这个炼丹技巧的我开始突飞猛进
- 作者:张宇中(1969-),男,中国电信股份有限公司云计算分公司首席数据分析师、大数据分析顾问。...
- 轮询调度算法 Round Robin
- IE兼容性问题解决方案
- DevCon.exe 导出output至指定文件
- 支持iphone的打印服务器,无需购买WiFi打印机,实现电脑、iPad、iPhone共享无线打印...
- Java -- 定时任务实现方式
- 这样是不是就能把系统设计好??
- COMSOL有限元仿真深度指南:为结构件添加预应变
- 某开发机器人公司面试
- 理解shell命名空间扩展
- verilog HDLBits Verilog语法
- android支持gif图片格式,Android 支持Gif动态图 的imagview
- SegmentFault 技术周刊 Vol.4 - 这份 Android 有点甜
- 从零开始Tableau | 11.表计算-计算依据
热门文章
- EXCEL数据处理小结(SQL)
- RF无线射频电路设计干货分享
- goeasy服务器发送(发布)消息,python服务端使用GoEasy实现websocket消息推送
- 第33篇-steam密码参数分析
- gsp计算机系统内审结论,GSP计算机系统内审表.docx
- STM32 cubemx驱动ws2812b灯条
- 微信小程序录制视频功能实现
- Linux安装 deb包命令
- InletexEMC绿色好用的电脑屏幕共享软件
- [Windows] 【黑科技】在线视频一键下载器:无尽一键视频下载v0.2主流视频网站想下就下...