日志数据采集存储

海量日志采集

在业务高峰期下,会有同时成千上万个客户端建立连接,实时上报日志数据。

在上面的高峰期场景下,日志采集服务会有不小的压力,如果程序代码逻辑处理稍有不当,就会造成服务卡顿、CPU 占用过高、内存溢出等问题。

为了解决上面的大量连接实施上报数据的场景,日志采集服务决定使用 Netty 框架进行开发。

这里直接给出日志采集程序使用 Netty 后的一些优化点,

采集日志异步化

针对客户端连接上报日志的采集流程异步化处理有三个方案,给大家介绍一下,

  • 普通版:采用阻塞队列 ArrayBlockingQueue 得生产者消费者模式,对上报的日志数据进行异步批量处理,在此场景下,通过生产者将数据缓存到内存队列中,然后再消费者中批量获取内存队列的日志数据保存入库,好处是简单易用,坏处是有内存溢出风险。
  • 进阶版:采用 Disruptor 队列,也是一个基于内存的高性能生产者消费者队列,消费速度对比 ArrayBlockingQueue 有一个数量级以上得性能提升,附简介说明:https://www.jianshu.com/p/bad7b4b44e48。Disruptor 内存高性能消息队列_disruptor队列-CSDN博客
  • 终极版:也是公司日志采集程序最后采用的方案。采用 kfaka 消息队列中间件,先持久日志上报数据,然后慢慢消费。虽然引入第三方依赖会增加系统复杂度,但是 kfaka 在大数据场景表现实在是太优秀了,这一点也是值得。

采集日志压缩

对上报后的日志如果要再发送给其他服务,是需要进行压缩后再处理,这一步是为了避免消耗过多网络带宽。

在 Java 里通常是指序列化方式,Jdk 自带得序列化方式对比 Protobuf、fst、Hession 等在序列化速度和大小的表现上都没有优势,甚至可以用垃圾形容。

Java 常用的序列化框架有下面这些,

  • JDK 自带的序列化:性能较差,占用空间大,无法跨语言,好处是简单易用,通用性强。
  • JSON:常用的 JSON 库有 Jackson、Gson、Fastjson 等。性能较好,占用空间少,跨语言支持广泛,但是无法序列化复杂对象。
  • Protocol Buffers:由 Google 开源,基于 IDL 语言定义格式,编译器生成对象访问代码。性能高效占用空间小,但是需要提前定义 Schema。
  • Thrift:Facebook 开源,与 Protocol Buffers 类似。定制生态不如 PB 完善,但是支持多语言交互。
  • Avro:Hadoop 生态圈序列化框架,支持数据隔离与进化,动态读写,性能可靠性好,占用空间较小。但是使用复杂,通用性较差。
  • Hessian:一款开源的二进制远程通讯协议,使用简单方法提供了RMI功能,主要用于面向对象的消息通信。支持跨平台、多语言支持、使用简单,缺点是传递复杂对象性能会下降,不适合安全性高的应用。

如果兼容性要求不高可以选择 JSON,如果要求效率以及传输数据量越小越好则 PB/Thrift/Avro/Hessian 更合适。

数据落库选型

像日志这种大数据量落库,都是新增且无修改得场景建议使用 Clickhouse 进行存储,好处是相同数据量下对比 MySQL 占用存储更少,查询速度更快,坏处就是并发查询性能比较低,相比 MySQL 使用不算那么成熟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数组(java)

目录 数组的定义和使用: 数组的初始化: 遍历数组: 数组是引用类型 初始JVM的内存分布 再读引用变量 认识null 数组的应用场景 作为函数的参数 作为函数的返回值 数组练习 数组转字符串 排序 冒泡排序 数组逆序 数组求平均…

代码随想录-算法训练营day07【哈希表02:四数相加、赎金信、三数之和、四数之和】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第三章 哈希表part02 今日任务 ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结 详细布置 454.四数相加II 建议:本题是 使用map 巧妙解决的问题,好好体会一下 …

tsReact 创建项目

全局安装create-react-app 脚手架 npm install -g create-react-app 或者 yarn add -g create-react-app初始化项目 $ npx create-react-app demo --template typescriptnpm run eject 释放配置文件 通过脚手架创建完项目后,会发现没有任何 配置文件(…

C++| QT自定义信号和槽

前言:之前学习QT都是使用自带的信号进行槽函数触发,一直没有找到需要使用自定义信号的场景,但最近读QT项目代码的时候,应用到了自定义信号,所以特地写这篇总结一下。 QT自定义信号和槽 信号和槽为什么要自定义信号如何…

CSRF漏洞初解

CSRF漏洞初解 1.什么是CSRF漏洞 CSRF(Cross-Site Request Forgery)漏洞是一种Web应用程序安全漏洞,也被称为"One-Click Attack"或"Session Riding"。它利用了Web应用程序对用户在其他网站上已经验证过的身份的信任&…

数据——关键生产要素

数据作为数字经济时代的关键生产要素,逐步融入生产生活各方面,深刻影响并重构着经济社会运行和社会治理,已成为影响未来发展的关键战略性资源。近年来,我国高度重视发展数字经济、数据要素及其市场化配置改革,发布了一…

多模态对齐方案

最全 LMM 模型结构(13种)综述本文中我们介绍了 13 中常见的大型多模态模型(Large Multimodal Models, LMM),包括 BLIP-2,LLaVA、MiniGPT、Qwen-VL 以及 Ferret 等。https://mp.weixin.qq.com/s/EnK7F0yPYmX…

C语言入门(第二天:判断、循环)

一、基础语法 1.1 位运算符(&#xff01;&#xff01;重点) 运算符术语示例结果&按位与011 & 1012个都为1才为1&#xff0c;结果为001|按位或011 & 101有1个为1就为1&#xff0c;结果为111^按位异或011 ^ 101不同的为1&#xff0c;结果为110~取反011100<<左…

使用Python实现自动化网页答题功能-模拟考试篇

介绍 在驾驶员考试网站上进行模拟考试python自动答题 自动化原理 该脚本使用了自动化模块 DrissionPage 中的 ChromiumPage 类来实现网页的自动化操作。通过定位网页元素和模拟点击操作&#xff0c;完成了选择答案和提交答卷的过程。 用途与注意事项 用途&#xff1a;该脚本…

LLM推理框架Triton Inference Server学习笔记(二): Triton模型部署流程(stey by stey)

官方文档查阅: TritonInferenceServer文档 1. 写在前面 上一篇文章对triton inference server进行了一个整体的介绍&#xff0c;解答了三个经典问题what, why, how。 这篇文章就开始转入实践&#xff0c; 从实践的角度整理Triton模型部署的全流程&#xff0c; 如果我有一个训…

系统架构最佳实践 -- 卡券系统架构设计

目录 1.卡券类型的设计&#xff1a; 2.用户领取和使用流程&#xff1a; 3.卡券发放与管理&#xff1a; 4.卡券核销与统计&#xff1a; 5.安全性和防欺诈&#xff1a; 随着电子商务的迅速发展&#xff0c;卡券系统成为了各种商家吸引用户和促销的重要手段。在设计和实现卡券…

分享一个预测模型web APP的功能模块和界面的设计

一个临床预测模型web APP功能模块与界面设计 随着医疗技术的不断进步&#xff0c;web APP是临床预测模型在医学领域的应用的重要形式。这里分享一个web APP的设计&#xff0c;手里有医学预测模型的可以尝试将其构建成webAPP&#xff0c;进而在临床实践中体验预测模型带来的便利…

【Druid】数据库连接超时

现象&#xff1a; 接口请求&#xff0c;10秒钟超时&#xff0c;看了一下&#xff0c;是sql查询耗时太长了&#xff0c;数据还没来得及返回&#xff0c;连接就断开了。 连接断开&#xff0c;上层应用直接报错。。 这些问题&#xff0c;都是。。。知道答案后&#xff0c;就觉得&…

CTF工具下载(1)----随波逐流

为什么要写这个博客喃&#xff0c;因为随波逐流每隔一段时间就会更新&#xff0c;要下载最新版本才能用&#xff0c;但是每次都会有点麻烦&#xff0c;所以写一个博客记录下。 1.进入官网&#xff0c;点击 2.进入城通网盘 3.进入编码工具 4.点击最新版本的随波逐流就下载了&am…

在Mac主机上连接Linux虚拟机

前言 最近醉心于研究Linux&#xff0c;于是在PD上安装了一个Debian Linux虚拟机&#xff0c;用来练练手。但是每次在mac和Linux之间切换很是麻烦&#xff0c;有没有一种方法&#xff0c;可以在mac终端直接连接我的虚拟机&#xff0c;这样在mac终端上就可以直接操控我的Linux虚…

咸鱼之王_手游_开服搭建架设_内购修复无bug运营版

视频演示 咸鱼之王_手游_开服 游戏管理后台界面 源码获取在文章末尾 源码获取在文章末尾 源码获取在文章末尾 或者直接下面 https://githubs.xyz/y28.html 1.安装宝塔 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &…

(2024,IXC2-4KHD,LVLM,动态图像分割,高分辨率图像处理)InternLM-XComposer2-4KHD

InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方…

【云计算】云数据中心网络(二):弹性公网 IP

云数据中心网络&#xff08;二&#xff09;&#xff1a;弹性公网 IP 1.什么是弹性公网 IP2.弹性公网 IP 的类型2.1 多线 EIP2.2 任播 EIP2.3 单线静态 EIP2.4 精品 EIP2.5 识别不同类型的 IP 的地址 3.弹性公网 IP 功能3.1 自带公网 IP 地址上云3.2 尽力找回公网 IP 地址3.3 连…

【学习心得】神经网络知识中的符号解释②

我在上篇文章中初步介绍了一些神经网络中的符号&#xff0c;只有统一符号及其对应的含义才能使我自己在后续的深度学习中有着一脉相承的体系。如果对我之前的文章感兴趣可以点击链接看看哦&#xff1a; 【学习心得】神经网络知识中的符号解释①http://t.csdnimg.cn/f6PeJ 一、…

3. 安装arrach结构的Mysql

提示&#xff1a;arm的centos上面安装arrach结构的Mysql 文章目录 前言一、查看已经安装过的并卸载mysql二、创建mysql用户组1.设置用户组2. 安装3.设置启动4.查看密码5.修改登录密码6.授权7.修改连接8.设置参数 常见问题排查1. 启动失败查看&#xff1a;2. 用户操作3. 踩坑解决…