Kafka 消费者组进度监控方法解析
#作者:张桐瑞
文章目录
- 前言
- 一、使用 Kafka 自带命令行工具 kafka-consumer-groups 脚本
- 二、使用 Kafka Java Consumer API 编程
- 三、使用 Kafka 自带的 JMX 监控指标
前言
在 Kafka 消息队列系统中,对于 Kafka 消费者而言,监控其消费进度,即消费者滞后程度,是一项至关重要的工作。这一滞后程度通常以 “消费者 Lag” 或 “Consumer Lag” 来表示。
所谓消费者 Lag,指的是消费者当前落后于生产者的程度。具体而言,若 Kafka 生产者向某主题成功生产了一定数量的消息,而消费者当前消费的消息数量少于该数量,两者的差值即为消费者 Lag。例如,当生产者向某主题成功生产 100 万条消息,而消费者仅消费了 80 万条消息时,该消费者的 Lag 值即为 20 万条消息。
通常情况下,Lag 的计量单位为消息数量。虽然在实际业务讨论中,我们常从主题级别探讨 Lag,但 Kafka 在底层监控 Lag 时,是基于分区进行的。若要获取主题级别的 Lag 值,则需要手动汇总该主题下所有分区的 Lag 值,将其累加后得到最终的主题级 Lag 值。
消费者 Lag 是衡量消费者运行状态的关键指标。在正常运行状态下,消费者的 Lag 值应维持在较低水平,理想状态下甚至接近于 0。这意味着消费者能够及时处理生产者发送的消息,消费滞后程度极小,系统数据流转顺畅。反之,若消费者的 Lag 值较大,则表明其处理消息的速度无法跟上生产者的生产速度。随着时间推移,Lag 值可能会持续增大,进而对下游消息的处理速度产生负面影响,导致整个业务流程效率降低。
更为严重的是,当消费者处理速度过慢时,其所消费的数据可能已不在操作系统的页缓存中。此时,消费者不得不从磁盘读取数据,这将显著增加数据读取延迟,进一步拉大与生产者之间的差距,形成 “马太效应”,即 Lag 值原本较大的消费者处理速度会越来越慢,Lag 值也会愈发增大,最终可能导致消息积压严重,影响业务的正常运行。
鉴于上述情况,在实际业务场景中,运维人员和开发人员必须密切关注消费者的消费进度。一旦发现 Lag 值呈现逐步增加的趋势,应立即展开排查,准确定位问题根源,并及时采取有效措施进行处理,以避免对业务造成损失。
接下来,将详细介绍三种监控 Kafka 消费者消费进度(即消费者 Lag)的方法。
一、使用 Kafka 自带命令行工具 kafka-consumer-groups 脚本
kafka-consumer-groups 脚本是 Kafka 提供的用于操作和管理消费者相关功能的命令行工具,位于 Kafka 安装目录的 bin 子目录下。该工具不仅可以用于管理消费者组,还能够监控独立消费者(Standalone Consumer)的 Lag 值。独立消费者是指未使用消费者组机制的消费者程序,其与消费者组的区别在于,独立消费者通过调用 KafkaConsumer.assign () 方法直接消费指定分区,而消费者组则通过调用 KafkaConsumer.subscribe () 方法进行主题订阅,但两者均需配置 group.id 参数。
使用 kafka-consumer-groups 脚本监控 Lag 值的操作较为简便,通过以下命令即可查看指定消费者的 Lag 值:
$ bin/kafka-consumer-groups.sh --bootstrap-server <Kafka broker连接信息> --describe --group <group名称>
其中,<Kafka broker连接信息>为 Kafka 集群中 broker 的主机名与端口号组合,如localhost:9092;<group名称>则为消费者程序中配置的 group.id 值。
例如,当执行上述命令并指定 Kafka 集群连接信息为localhost:9092,消费者组名为testgroup时,可能得到如下输出信息:
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
test 0 714285 714285 0 consumer-1 localhost test-client-1
test 1 714286 714286 0 consumer-2 localhost test-client-2
... ... ... ... ... ... ... ...
在上述输出中,各字段含义如下:
TOPIC:表示消费者订阅的主题名称。
PARTITION:代表主题的分区编号。
CURRENT-OFFSET:是指该消费者组当前在对应分区上最新消费消息的位移值。
LOG-END-OFFSET:表示对应分区当前最新生产的消息的位移值。
LAG:即消费者 Lag 值,通过LOG-END-OFFSET减去CURRENT-OFFSET计算得出,反映了消费者在该分区上落后于生产者的消息数量。
CONSUMER-ID:为消费者实例的 ID。
HOST:显示消费者连接的 Kafka broker 主机名。
CLIENT-ID:表示消费者客户端的 ID。
在实际监控中,我们重点关注LAG列的值。理想状态下,该列所有值应趋近于 0,这表明消费者能够及时消费生产者发送的消息,不存在消费滞后情况。若LAG值较大,则意味着消费者存在消费滞后问题,需要进一步排查原因。
在使用该脚本时,可能会出现以下两种特殊情况:
- 当运行脚本后,输出信息中CONSUMER-ID、HOST和CLIENT-ID列没有值,同时提示 “Consumer group ‘testgroup’ has no active members.”。这种情况是由于在运行 kafka-consumer-groups 脚本时,对应的消费者程序尚未启动,即当前消费者组没有任何活跃成员。不过,此时LAG列的值依然是有效的,可以准确反映消费者组的 Lag 情况。
- 若运行脚本后,命令未返回任何结果,这可能是因为所使用的 Kafka 版本较旧,其 kafka-consumer-groups 脚本尚不支持查询非活跃消费者组的信息。针对这一问题,可选择升级 Kafka 版本,或者采用其他监控方法来获取消费者 Lag 信息。
二、使用 Kafka Java Consumer API 编程
在许多实际应用场景中,通过命令行工具查询 Lag 的方式可能无法满足自动化监控的需求。为此,Kafka 社区提供的 Java Consumer API 提供了更为灵活的程序化监控方案。
Java Consumer API 分别提供了查询当前分区最新消息位移和消费者组最新消费消息位移的方法,利用这些方法,我们可以计算出对应的 Lag 值。以下代码展示了如何通过 Java Consumer API 监控给定消费者组的 Lag 值:
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.ListConsumerGroupOffsetsResult;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.TopicPartition;
import org.apache.kafka.common.record.OffsetAndMetadata;import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;public class KafkaConsumerLagMonitor {public static Map<TopicPartition, Long> lagOf(String groupID, String bootstrapServers) throws TimeoutException {Properties props = new Properties();props.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);try (AdminClient client = AdminClient.create(props)) {ListConsumerGroupOffsetsResult result = client.listConsumerGroupOffsets(groupID);try {Map<TopicPartition, OffsetAndMetadata> consumedOffsets = result.partitionsToOffsetAndMetadata().get(10, TimeUnit.SECONDS);props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); // 禁止自动提交位移props.put(ConsumerConfig.GROUP_ID_CONFIG, groupID);props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());try (final KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props)) {Map<TopicPartition, Long> endOffsets = consumer.endOffsets(consumedOffsets.keySet());return endOffsets.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(),entry -> entry.getValue() - consumedOffsets.get(entry.getKey()).offset()));}} catch (InterruptedException e) {Thread.currentThread().interrupt();// 处理中断异常return Collections.emptyMap();} catch (ExecutionException e) {// 处理ExecutionExceptionreturn Collections.emptyMap();} catch (TimeoutException e) {throw new TimeoutException("Timed out when getting lag for consumer group " + groupID);}}}
}
在上述代码中,关键步骤如下:
- 通过AdminClient.listConsumerGroupOffsets方法获取给定消费者组的最新消费消息的位移。
- 使用KafkaConsumer.endOffsets方法获取订阅分区的最新消息位移。
- 执行相应的减法操作,计算出 Lag 值,并将结果封装进一个Map对象中,其中Map的键为TopicPartition,值为对应的 Lag 值。
需要注意的是,此代码仅适用于 Kafka 2.0.0 及以上版本,因为在 Kafka 2.0.0 之前的版本中,不存在AdminClient.listConsumerGroupOffsets方法。在实际应用中,可将lagOf方法集成到生产环境的监控程序中,实现对消费者 Lag 的自动化监控。
三、使用 Kafka 自带的 JMX 监控指标
在实际的大规模监控场景中,通常会借助成熟的监控框架,如 Zabbix 或 prometheus来进行系统监控。上述两种监控消费者 Lag 的方法在集成到现有监控框架时存在一定困难,而 Kafka 默认提供的 JMX 监控指标则为解决这一问题提供了有效途径。
Kafka 消费者提供了一个名为kafka.consumer:type=consumer-fetch-manager-metrics,client-id="{client-id}"的 JMX 指标,其中包含多个与消费者消费状态相关的属性。与监控消费者 Lag 值密切相关的有两组属性:records-lag-max和records-lead-min。其中,records-lag-max表示在测试窗口时间内,该消费者曾经达到的最大 Lag 值;records-lead-min表示消费者最新消费消息的位移与分区当前第一条消息位移的差值中的最小值,即最小 Lead 值。
Lag 值反映了消费者落后于生产者的消息数量,而 Lead 值则从另一个角度展示了消费者与分区起始消息的距离。Lag 值与 Lead 值相互关联,Lag 值越大,Lead 值越小,反之亦然。
在监控过程中,引入 Lead 值具有重要意义。仅关注 Lag 值可能无法及时察觉潜在的严重问题。例如,当 Lag 值逐渐增大时,我们通常会意识到消费者处理速度变慢,追不上生产者的节奏,但在某些情况下,这可能被认为是可接受的。然而,当监测到 Lead 值越来越小,甚至接近 0 时,就需要高度警惕,这可能预示着消费者端即将出现消息丢失的情况。
由于 Kafka 中的消息默认会设置留存时间(通常为 1 周),若消费者程序处理速度过慢,导致其要消费的数据即将被 Kafka 删除,此时若不及时处理,将会出现消息被删除的情况。这可能引发两种不良后果:一是消费者重新从起始位置消费数据,造成数据重复处理;二是消费者从最新的消息位移处开始消费,导致之前未及时消费的消息被跳过,从而出现消息丢失的假象。这两种情况都会对业务数据的完整性和准确性产生严重影响。
因此,在实际生产环境中,同时监控 Lag 值和 Lead 值至关重要。通过 JConsole 工具可以方便地查看这些 JMX 指标。例如,当使用 JConsole 监控client-id为consumer-1的消费者时,在给定的测量周期内,若最大 Lag 值为 714202,最小 Lead 值为 83,则表明该消费者存在较大的消费滞后性,需要及时排查原因并进行优化。
此外,Kafka 消费者还在分区级别提供了额外的 JMX 指标,其名称为
kafka.consumer:type=consumer-fetch-manager-metrics,partition=“{partition}”,topic=“{topic}”,client-id=“{client-id}”。以client-id为consumer-1,主题为test,分区为0为例,通过该 JMX 指标可以获取到分区级别的 Lag 和 Lead 值,并且还包含records-lag-avg和records-lead-avg两个属性,用于计算平均 Lag 值和平均 Lead 值。在实际监控场景中,这些分区级别的平均指标能够更全面地反映消费者在各个分区上的消费情况,为精准定位问题提供有力支持。
综上所述,通过上述三种方法,即使用 Kafka 自带命令行工具、Java Consumer API 编程以及 JMX 监控指标,能够实现对 Kafka 消费者组消费进度(消费者 Lag)的有效监控。在实际应用中,可根据具体的业务需求和技术架构选择合适的监控方法,以确保 Kafka 消息队列系统的稳定运行,保障业务的正常开展。
相关文章:
Kafka 消费者组进度监控方法解析
#作者:张桐瑞 文章目录 前言一、使用 Kafka 自带命令行工具 kafka-consumer-groups 脚本二、使用 Kafka Java Consumer API 编程三、使用 Kafka 自带的 JMX 监控指标 前言 在 Kafka 消息队列系统中,对于 Kafka 消费者而言,监控其消费进度&a…...
国产大模型 “五强争霸”,决战 AGI
中国 AI 大模型市场正经历一场史无前例的洗牌!曾经 “百模混战” 的局面已落幕,字节、阿里、阶跃星辰、智谱和 DeepSeek 五大巨头强势崛起,形成 “基模五强” 新格局。这场竞争不仅是技术实力的较量,更是资源、人才与生态的全面博…...
lesson01-PyTorch初见(理论+代码实战)
一、初识PyTorch 二、同类框架 PyTorchVSTensorFlow 三、参数 对比 四、PyTorch生态 四、常用的网络层 五、代码分析 import torch from torch import autogradx torch.tensor(1.) a torch.tensor(1., requires_gradTrue) b torch.tensor(2., requires_gradTrue) c tor…...
几种运放典型应用电路
运算放大器简称:OP、OPA、OPAMP、运放。 一、电压跟随器 电压跟随器顾名思义运放的输入端电压与运放的输出电压相等 这个电路一般应用目的是增加电压驱动能力: 比如说有个3V电源,借一个负载,随着负载电流变大,3V就会变小说明3V电源带负载能力小,驱动能力弱,这个时候…...
Mybatis——动态sql
<if> 实现方式 动态标签 <if> 条件判断,进行sql语句拼接 成立则拼接 <where> 进行条件子句拼接,防止and重复 if案例 crtl alt L 格式化 <foreach>——用于批量操作(删除) <include>...
技术社区集锦
推荐地址 社区汇总地址 https://juejin.cn/post/7468935497799286834 社区 项目ValueValueGitHubgithub.com-----Giteegitee.com-----StackOverflowstackoverflow.com全球知名的技术问答网站博客园www.cnblogs.com开发者的知识分享社区稀土掘金juejin.cn技术内容分享与交流平…...
【Elasticsearch】DSL 篇
Elasticsearch 之 DSL 篇 介绍 Elasticsearch 提供了基于 JSON 的 DSL 语句来定义查询条件,其 JavaAPI 就是在组织 DSL 条件。 先学习 DSL 的查询语法,然后再基于 DSL 来对照学习 JavaAPI,就会事半功倍 json 格式,好理解&#…...
常见 RPC 协议类别对比
RPC(Remote Procedure Call,远程过程调用)协议是分布式系统中实现跨进程通信的核心机制之一。它允许客户端像调用本地函数一样调用远端服务器上的函数。 根据通信方式、数据编码方式和平台兼容性不同,常见的 RPC 协议分为以下几类…...
React系列——nvm、node、npm、yarn(MAC)
nvm,node,npm之间的区别 1、nvm:nodejs版本管理工具。nvm 可以管理很多 node 版本和 npm 版本。 2、nodejs:在项目开发时的所需要的代码库 3、npm:nodejs包管理工具。nvm、nodejs、npm的关系 nvm 管理 nodejs 和 npm…...
LeetCode 热题 100 230. 二叉搜索树中第 K 小的元素
LeetCode 热题 100 | 230. 二叉搜索树中第 K 小的元素 大家好,今天我们来解决一道经典的二叉搜索树问题——二叉搜索树中第 K 小的元素。这道题在 LeetCode 上被标记为中等难度,要求查找二叉搜索树中的第 K 小的元素。 问题描述 给定一个二叉搜索树的根…...
vscode - 笔记
1 IDE就用vscode,安装Remote-SSH插件通过SSH访问树莓派里的文件夹 写在开始:阿尔法Linux开发板学习开始 - 银色的音色 - 博客园 2 VSCode之Linux C/C开发和调试 VSCode之Linux C/C开发和调试 CMake代码编译 json配置_哔哩哔哩_bilibili 3 VS Code 凭…...
使用VSCode编辑Markdown+PlantUml
vscode :https://code.visualstudio.com/ 什么是markdown: Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。 Markdown 编写的文档可以导出 HTML 、Word、图像、PDF、Epub 等多种格式的文档。 在vscode上安装MarkDown相关…...
关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?
文章目录 关于 Golang GC 机制的一些细节:什么是根对象?GC 机制的触发时机?简要回顾 Golang GC 三色标记法的工作流程什么是根对象?GC 的触发时机? 关于 Golang GC 机制的一些细节:什么是根对象?…...
内存虚拟盘(RAMDisk)是什么?
内存虚拟盘(RAMDisk)是一种通过软件将计算机的部分物理内存(RAM)模拟为硬盘驱动器的技术,利用内存的高速读写特性显著提升数据访问效率。以下从原理、优势、实现方式及应用场景等方面详细解析: 1. 技术原…...
深入浅出入侵检测系统(IDS)的工作原理与应用场景
网络安全界的“火眼金睛”:入侵检测系统IDS 一、IDS简介:网络安全界的“火眼金睛” 在计算机安全领域,有一个“火眼金睛”的角色,它能在网络世界中识破各种“妖魔鬼怪”的伪装,及时发出警报,保护我们的数…...
AISBench benchmark评测工具实操-精度评测场景-采用命令行指定模型和数据集的方式
一、环境信息 1.1.硬件设备 昇腾Atlas800 I A2:910A 01:00.0 Processing accelerators: Huawei Technologies Co., Ltd. Device d801 (rev 20) 1.2.软件信息 1.2.1模型: DeepSeek-R1-Distill-Qwen-1.5B 1.2.2.物理机系统: NAME="EulerOS" VERSION="2.0 …...
HTTP GET报文解读
考虑当浏览器发送一个HTTP GET报文时,通过Wireshark 俘获到下列ASCII字符串: GET /cs453/index.html HTTP/1.1 Host: gaia.cs.umass.edu User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040804 Netscape/7.2 (ax) Acc…...
南审计院考研分享会 经验总结
汪学长 – 中科大 计科专硕 初试准备 数学先做真题,模拟题刷的越多分越高;408真题最重要,模拟题辅助;英语只做真题;政治9月份开始背 代码能力在低年级培养的重要性和路径 考研不选择机构原因 因为机构里面学习的框…...
Android多媒体——媒体解码流程分析(十四)
NuPlayer 的解码模块相对比较简单,统一使用了一个基类 NuPlayerDecoderBase 管理,该类中包含了一个 MediaCodec 的对象,实际解码工作全靠 MediaCodec。 一、解码器创建 解码器创建的入口在 NuPlayer 的 NuPlayer::instantiateDecoder() 函数调用时。NuPlayer 在执行 start(…...
学习threejs,使用Physijs物理引擎,通过控制重力,实现多米诺骨牌效果
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Physijs 物理引擎1.1.1 ☘️…...
自由学习记录(60)
Lecture 16 Ray Tracing 4_哔哩哔哩_bilibili 老师说的“高频采样”问题是什么? 现在考虑一个特殊情况: ❗ 一个像素内,图像信号变化很剧烈(高频): 比如: 细网格纹理 马赛克背景 很高频的…...
Gartner《分布式和微服务架构中数据架构》学习心得
一、简介 随着信息技术的不断发展,软件架构也在持续演变以适应不断变化的业务需求。从传统的单体架构向分布式和微服务架构转变,给数据的管理带来了新的挑战和机遇。《Working With Data in Distributed and Microservices Architectures》研究针对在分布式和微服务架构中处…...
谷歌web第三方登录
1.在谷歌控制台创建客户端信息 https://console.cloud.google.com/auth/clients 注:在重定向的url中一定要是https开头的。 创建完成之后主要获取三个信息 clientID、secret、redirctUrl 2.配置pom <dependency><groupId>com.google.auth</group…...
ConfigMap 和 Secret 是否支持热更新
在 Kubernetes 中,ConfigMap 和 Secret 是否支持热更新取决于它们的使用方式和应用程序的行为。以下是详细分析: 1. ConfigMap 的热更新 场景 1:通过 Volume 挂载到 Pod 支持热更新: 如果 Pod 通过 volume 挂载 ConfigMap&#…...
时序数据库IoTDB分布式系统监控基础概述
在分布式系统环境中,系统性能调优与瓶颈定位一直是工程实践与架构设计中的关键挑战。面对诸如系统性能无法提升、查询延迟增加等问题,需要一套有效的监控体系来洞察系统的内部状态与运行情况。 可观测性概念 随着分布式架构的普及,可观测性…...
【乱码】前端js流式输出因为Uint8Array字节不完整导致乱码问题
【乱码】流式输出因为Uint8Array字节不完整导致乱码问题 function push() {reader.read().then(({ done, value }) > {if (done) { 问题代码 var a new Uint8Array([115,44,32,115,101,114,105,102,34,62,230]) var b new Uint8Array([156,136,60,47,115,112,97,110,62…...
PDF Base64格式字符串转换为PDF文件临时文件
需求描述: 在对接电子病历系统与河北CA,进行免密文件签章的时候,两者系统入参不同,前者是pdf文件,base64格式;后者要求File类型的PDF文件。 在业务中间层开发时,则需要接收EMR侧提供的base64格式…...
ClickHouse详解
ClickHouse 是一款开源的列式数据库管理系统(DBMS),由 Yandex 开发,专为联机分析处理(OLAP)设计,具备高性能、低延迟、海量数据处理能力,广泛应用于日志分析、用户行为分析、指标监控…...
Go语言中的函数类型参数:深入理解`func()`
在Go语言中,函数是一等公民,可以作为参数传递、作为返回值,甚至赋值给变量。其中,func()作为一种特殊的函数类型,在Go的并发编程、回调机制和接口设计中扮演着重要角色。本文将全面解析func()的用法、原理和最佳实践。…...
deepseek梳理java高级开发工程师微服务面试题-进阶版
高级Java微服务面试题与深度解析 一、Spring Cloud核心组件深度剖析 1. Eureka服务注册发现机制 题目:详细分析Eureka的AP特性实现原理,包括服务注册、续约、剔除和自我保护机制,并说明与Nacos的CP模式区别。 答案: Eureka A…...
Math工具类全面指南
Math工具类全面指南 前言一、Math 类的基础特性1.1 类的声明与常量1.2 数据类型支持 二、基础算术运算2.1 绝对值运算2.2 取整运算2.2.1 floor():向下取整2.2.2 ceil():向上取整2.2.3 round():四舍五入取整 2.3 最大值与最小值 三、三角函数与…...
为什么 Linux 上默认没有 host.docker.internal
在 Linux 环境中,host.docker.internal 是 Docker 为容器提供的一个特殊 DNS 名称,用于指向宿主机的 IP 地址(类似 macOS/Windows 中的行为)。但这个功能在 Linux 上默认不启用,需要手动配置才能使用。以下是详细解释和…...
HTML 颜色全解析:从命名规则到 RGBA/HSL 值,附透明度设置与场景应用指南
一、HTML 颜色系统详解 HTML 中的颜色可以通过多种方式定义,包括颜色名称、RGB 值、十六进制值、HSL 值等,同时支持透明度调整。以下是详细分类及应用场景: 1. 颜色名称(预定义关键字) HTML 预定义了 140 个标准颜色名…...
HTTP / HTTPS 协议
目录 一、前言: 二、Fiddler 抓包工具: 三、http 协议: 1、http 请求: 1.(1)请求行: 1、(2) 请求头: 1、(3) 请求正文: 2、http 响应: 2、(1) 状态码&#x…...
使用GRPO训练调度事件的语言模型!
参考:https://huggingface.co/blog/anakin87/qwen-scheduler-grpo 现在是2025年,在DeepSeek热潮之后,每个人都想使用GRPO训练自己的推理模型。 作为一名实践者,我也想这样做:仅使用提示和奖励来训练语言模型是一件非常…...
关于 js:9. Node.js 后端相关
一、Node 环境搭建与执行流程 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让 JS 不再局限于浏览器内,而是可以在服务器、终端、本地脚本中运行。 核心定位:让我们可以用 JS 写本地程序、脚本、爬虫、加密逻辑、hook 工具、…...
More Effective C++:改善编程与设计(上)
More Effective C: 目录 More Effective C: 条款1:仔细区别pointers和 references 条款2:最好使用C转型操作符 条款3:绝对不要以多态方式处理数组 条款4:非必要不要提供default constructor 条款5:对定制的“类型转换函数”保持警觉 …...
SCDN如何有效防护网站免受CC攻击?——安全加速网络的实战解析
在互联网安全威胁日益复杂化的今天,CC(Challenge Collapsar)攻击已成为网站运营者面临的主要挑战之一。这种攻击通过模拟大量合法用户请求,消耗服务器资源,导致正常用户无法访问。而**安全内容分发网络(SCD…...
关于并发编程AQS的学习
目录 1. AQS的核心作用 2. AQS的核心结构 3. 关键方法 4. AQS的应用示例 4.1、ReentrantLock的实现 4.2、CountDownLatch的实现 5. AQS的优势 6. 对比其他同步机制 前言 AQS(AbstractQueuedSynchronizer) 是Java并发编程中一个核心的同步器框架…...
16S18S基础知识(1)
相关内容: https://blog.csdn.net/weixin_34315189/article/details/86397125?fromshareblogdetail&sharetypeblogdetail&sharerId86397125&sharereferPC&sharesource2302_80012625&sharefromfrom_link https://metagenome.blog.csdn.net/art…...
Java Spring Boot 控制器中处理用户数据详解
目录 一、获取请求参数1.1 获取查询参数1.2 获取路径参数 二、处理表单提交2.1 处理表单数据 三、处理 JSON 数据3.1 接收 JSON 数据 四、返回 JSON 数据五、处理文件上传5.1 单文件上传5.2 多文件上传 六、总结 在 Spring Boot 应用开发中,控制器(Contr…...
AI产品上市前的“安全通行证“
首席数据官高鹏律师团队 如今AI 产品如雨后春笋般涌现,从智能音箱到自动驾驶汽车,从语音助手到医疗诊断软件,它们正全方位渗透进我们的生活。然而,在 AI 产品迈向市场、走进千家万户之前,有一系列强制性安全认证如同坚…...
sql server 2019 将单用户状态修改为多用户状态
记录两种将单用户状态修改为多用户状态,我曾经成功过的方法,供参考 第一种方法 USE master; GO -- 终止所有活动连接 DECLARE kill_connections NVARCHAR(MAX) ; SELECT kill_connections KILL CAST(session_id AS NVARCHAR(10)) ; FROM sys.dm_ex…...
[滑动窗口]越短越合法(可转化成越长越合法)
题目链接 题意 给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于k 的连续子数组的数目。 首先当ans增加时 我们认为r固定 方法一、转化成越长越合法 思路 算出乘积 ≥ k \ge k ≥k的子数组数量 再用所有子数组数量减去上面算出来…...
idea中编写spark程序
### 在 IntelliJ IDEA 中配置和编写 Spark 程序 要在 IntelliJ IDEA 中高效地开发 Spark 程序,需要完成一系列必要的环境配置以及项目搭建工作。以下是详细的说明。 --- #### 1. 安装与配置 IntelliJ IDEA 为了确保 IDE 可以支持 Scala 开发,首先需要…...
机器学习入门(一)
机器学习入门(一) 文章目录 机器学习入门(一)一、机器学习分类1.1 监督学习1.2 半监督学习1.3 无监督学习1.4 强化学习 二、scikit-learn工具介绍scikit-learn安装 三、数据集3.1 sklearn玩具数据集介绍3.2 sklearn现实世界数据集…...
力扣每日一题之移动零
题目说明: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 思路分析:我们可以考虑使用双指针来解答该题。双指针分…...
GaiaEx 盖亚:从合规出发,一家新兴交易平台的全球化路径探索
在加密货币交易平台日益激烈的竞争中,监管趋严、安全要求提升、用户体验优化已成为行业发展的三大核心议题。2025年初正式上线的GaiaEx 盖亚交易所,正是在这一市场背景下,以“合规 产品 生态”的多维路径,逐步建立起自身的发展方…...
车载网关--- 职责边界划分与功能解耦设计
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
EasyRTC嵌入式音视频通信SDK打造带屏IPC全场景实时通信解决方案
一、方案概述 在智能安防与物联网快速发展的背景下,带屏IPC(网络摄像机)不仅承担着视频采集与监控的基础功能,还逐渐向多样化交互与智能化方向演进。EasyRTC作为一款强大的实时通信框架,具备低延迟、高稳定性、跨平…...