如何优化kafka和mysql处理百万级消息计算和落库

一.业务场景

最近业务需要,做了性能优化操作。百万级消息在kafka中秒级传输。cpu密集计算分钟级完成,然后在mysql中秒级落库.模型cpu计算提高了1倍,落表速度提高了5倍,2分钟内完成.

如下序列图:

业务系统A发送千级别消息到中转系统B.B收到消息后拆解为百万级的消息发送到kafka.模型C收到kafka消息后需要大量的cpu计算,计算完后返回百万级消息给系统B,B合并结果消息后,写入批次的数据到缓存redis.B返回给A批次成功通知,A读取redis的百万级数据后插入数据库.

二.业务问题

处理百万级消息,碰到如下问题.

1.通过kafa发送接收,如何加快速度.

2.通过多个系统传递,如何存储.

3.计算完,百万条记录存储数据库,如何快速写表.

三.优化方案

(一).kafka消息优化

1.扩大topic的partition数量,两位数级别.

2.springboot的注解@KafkaListener,修改concurrency,根据机器数计算,比如2台机器,单台设置为partition数量/服务器数.

3.接收到消息后,建立动态线程池,异步处理消息.线程池队列大小在千级别,核心和最大线程数在百级别,策略为CallerRunsPolicy.具体大小配置在压力测试中根据cpu和内存大小使用情况获得。支持配置中心的动态推送,服务器压力处于高峰时,可以推送修改线程池的corePoolSize,maximumPoolSize,减小压力.

4.cpu密集计算型.模型端接收kafka消息处理时,使用线程池处理,核心线程数改为cpu核数的至少2倍.

(二).服务间数据传输

1.服务间传输消息时,只传输批次号。约定redis缓存key,数据存入redis,全部从缓存获取.

(三).百万条记录写库优化

1.mysql优化

1.可以使用mysql提供的load指令加载大量数据,查看@@local_infile开关是否生效.我们没有使用这个.

2.关闭唯一性校验,查看 @@UNIQUE_CHECKS配置,涉及数据正确性。没有使用这个.

3.修改max_allowed_packet为500mb,它代表MySQL服务端或者客户端接收一次传送数据包的最大大小。

4.修改innodb_log_buffer_size为256mb,这个代表innodb 数据库引擎写日志缓存区。

5.修改innodb_log_file_size,innodb 数据库引擎UNDO日志的大小,减少数据库checkpoint操作。

2.java代码优化

1.业务系统接收到批次处理消息后,做两层分发。第一层提交到线程池处理,比如百万级数据数据,分到10个线程。每个线程处理十万数据.第二层单线程内分批提交,比如一次提交5000条数据,10万条数据,每个线程只需要提交20次.这个具体大小设置需要根据压测结果得到.这里最复杂的是解决多线程的事务一致性问题.

2.第一层提交到多线程时,需要自己统计提交到每个线程的数据量,主线程可以使用CountDownLatch等待子线程处理完成。主线程根据总数据量,线程数计算提交到每个子线程的数据量.

3.第二层子线程处理分为两种情况,不处理事务一致,insert语句执行时,事务直接提交了,这个比较简单.如果处理多线程事务一致,事务在主线程中一起提交,需要在子线程中新建事务,拷贝主线程事务到子线程,返回主线程zi子事务对象,在主线程中遍历事务,一起commit或者rollback.模拟两阶段提交,类似分布式事务,只是在主线程中统一控制事务状态.

java端的优化代码,@我索取.

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

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

相关文章

深度学习基础知识-Batch Normalization(BN)超详细解析

一、背景和问题定义 在深层神经网络(Deep Neural Networks, DNNs)中,层与层之间的输入分布会随着参数更新不断发生变化,这种现象被称为内部协变量偏移(Internal Covariate Shift)。具体来说,由…

NLP算法工程师精进之路:顶会论文研读精华

1.学术能力培养 全部论文资料下载: 将论文和 GitHub 资源库匹配 papers with code https://paperswithcode.com/OpenGitHub 新项目快报Github pwc:https://github.com/zziz/pwc GitXiv:http://www.gitxiv.com/ 文章撰写 Overleaf [Autho…

从倍压整流到二极管钳位与限幅

何为倍压整流?这里直接引用“百度百科”解释,如下述。 在一些需用高电压、小电流的地方,常常使用倍压整流电路。倍压整流,可以把较低的交流电压,用耐压较高的整流二极管和电容器,“整”出一个较高的直流电…

Java项目实战II基于Java+Spring Boot+MySQL的工程教育认证的计算机课程管理平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着工程教…

uniapp开发小程序【简单的实现点击下拉选择性别功能】

一、展示效果 二、代码 <template><view><view class="form_box"><view class="item"

硅谷甄选(9)SKU模块

SKU模块 8.1 SKU静态 <template><el-card><el-table border style"margin: 10px 0px"><el-table-column type"index" label"序号" width"80px"></el-table-column><el-table-columnlabel"名称…

Flutter Color 大调整,需适配迁移,颜色不再是 0-255,而是 0-1.0,支持更大色域

在之前的 3.10 里&#xff0c; Flutter 的 Impeller 在 iOS 上支持了 P3 广色域图像渲染&#xff0c;但是当时也仅仅是当具有广色域图像或渐变时&#xff0c;Impeller 才会在 iOS 上显示 P3 的广色域的颜色&#xff0c;而如果你使用的是 Color API&#xff0c;会发现使用的还是…

动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙

许多企业正面临由混合和多云环境运营复杂性所引发的危机&#xff0c;它们普遍耗巨资于物理和虚拟设备的持续维护、修补和升级上&#xff0c;而针对不同云环境下的应用部署则需要特有的技能来管理众多繁杂的工具和服务。为助力企业应对上述挑战&#xff0c;F5公司发布了BIG-IP N…

如何用Python同时抓取多个网页:深入ThreadPoolExecutor

背景介绍 在信息化时代&#xff0c;数据的实时性和获取速度是其核心价值所在。对于体育赛事爱好者、数据分析师和投注行业而言&#xff0c;能否快速、稳定地抓取到实时比赛信息显得尤为重要。特别是在五大足球联赛中&#xff0c;能够在比赛进行时获得比分、控球率等实时数据&a…

(转载)Tools for Learning LLVM TableGen

前提 最近在学习有关llvm的东西&#xff0c;其中TableGen占了一部分&#xff0c;所以想特意学习下TableGen相关的语法。这里找到了LLVM官网的一篇介绍TableGen的博客&#xff0c;学习并使用机器翻译为中文。在文章的最后也添加了一些学习TableGen的资源。 原文地址&#xff1…

LARGE SCALE GAN TRAINING FORHIGH FIDELITY NATURAL IMAGE SYNTHESIS

ABSTRACT 尽管最近在生成图像建模方面取得了进展&#xff0c;但成功地从复杂的数据集(如ImageNet)生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此&#xff0c;我们在迄今为止尝试的最大规模上训练生成对抗网络&#xff0c;并研究这种规模特有的不稳定性。我们发现…

组队学习专用——task05

目录 一、基本原理 1. 决策树的基本思想 2. 决策树划分过程中可能遇到的特殊情况 (1) 单一类别终止&#xff1a; (2) 属性用尽&#xff1a; (3) 样本空缺&#xff1a; 3. 决策树的结构 二、信息量、信息熵 1. 信息量 2. 信息熵 三、决策树 1. ID3 决策树&#xff08…

Linux RAID 技术详解:原理、配置、管理及故障处理

本文档深入探讨 Linux 软件 RAID 技术&#xff0c;涵盖 RAID 原理、各种 RAID 级别、mdadm 命令详解、配置步骤、管理方法以及高级故障处理和性能调优策略。 一、 RAID 原理与架构 RAID (Redundant Arrays of Independent Disks&#xff0c;独立磁盘冗余阵列) 技术并非单一技…

「C/C++」C/C++标准库 之 <cstring> 字符串操作库

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明目…

单细胞数据分析(一):10X数据生成seurat数据对象

文章目录 介绍加载R包数据链接导入数据过滤细胞:移除双重细胞合并所有seurat数据对象输出结果系统信息介绍 在单细胞基因组学研究中,Seurat是一个流行的R包,用于单细胞基因表达数据的分析和探索。以下是如何从10X基因注释数据生成Seurat数据对象,并对该数据进行过滤的步骤…

day13:FTP服务

一&#xff0c;FTP概述 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是用于在计算机之间传输文件的协议。它工作在网络的应用层&#xff0c;通过 TCP 协议进行数据传输&#xff0c;默认端口号为 21&#xff08;命令端口&#xff0c;另外…

从0开始的STM32学习之旅:使用中断完成等待型任务(理论部分)

目录 中断 NVIC 中断优先级 先说说一般我们聊到的中断优先级 STM32中的NVIC中断优先级表示 API CubeMx配置说明 很好&#xff0c;我们在之前的学习中已经完成了简单的GPIO输入输出驱动的控制&#xff0c;我们的下一步就是仔细了解一下中断这个事情。 中断 中断这个事情…

使用Python进行数据分析入门

文章目录 Python环境搭建安装Anaconda验证安装 必备库介绍NumPyPandasMatplotlibSciPy 数据导入与清洗导入数据清洗数据 数据探索与分析描述性统计相关性分析 数据可视化绘制直方图 高级主题机器学习深度学习 总结 随着大数据时代的到来&#xff0c;数据分析变得越来越重要。Py…

RabbitMQ + JMeter组合,优化你的中间件处理方式!

RabbitMQ是实现了高级消息队列协议&#xff08;AMQP&#xff09;的开源消息中间件&#xff0c;它是基于Erlang语言编写的&#xff0c;并发能力强&#xff0c;性能好&#xff0c;是目前主流的消息队列中间件之一。 RabbitMQ的安装可参照官网&#xff08; https://www.rabbitmq.c…

python 爬虫 入门 五、抓取图片、视频

目录 一、图片、音频 二、下载视频&#xff1a; 一、图片、音频 抓取图片的手法在上一篇python 爬虫 入门 四、线程&#xff0c;进程&#xff0c;协程-CSDN博客里面其实有&#xff0c;就是文章中的图片部分&#xff0c;在那一篇文章&#xff0c;初始代码的28&#xff0c;29行…