如何实现Kafka的Exactly-Once语义?
Kafka 的 Exactly-Once(精确一次)语义是分布式消息系统中最高等级的数据一致性保证,包含三个层面的含义:
- 消息不会丢失
- 消息不会重复消费
- 消息处理结果具有确定性
模式局限性:
这里模式有个问题,会导致性能下降,并且即使使用了该种模式,生产者和消费者该做的重试和幂等都需要做,只是重复数据会下降(比如业务处理成功了,但是提交offset失败了,会导致broker重发,这种场景严格意义来说不算成功,但是真实场景下网络是有波动的,可能会导致失败)。
这里需要取舍,根据ai的回答:在百万级消息/天的系统中,Exactly-Once会带来约15%的吞吐量下降,但能将消费者端的重复消息率从0.7%降至0.02%。建议根据业务容忍度选择方案。
学习前导
在实现Exactly-Once之前,需要了解kafka三语义以及2PC实现。
Kafka消息语义三模式精要:
1. Exactly-Once :通过事务机制实现精确一次处理,消息不丢失不重复 ,适用于金融交易等强一致性场景
2. At-Least-Once :消息至少被消费一次(可能重复),需业务方实现幂等 ,适合订单处理等高吞吐场景
3. At-Most-Once :消息至多被消费一次(可能丢失),无需重试机制 ,适用于实时监控等低延迟场景
通俗解释就是:
if (业务需要强一致性) {启用 Exactly-Once;
} else if (允许重复但需完整) {At-Least-Once + Redis幂等;
} else {At-Most-Once;
}
Kafka 2PC实现与Broker角色解析
1. 核心协调机制
Kafka的2PC实现依赖Broker集群中的事务协调器(Transaction Coordinator),该服务内嵌于Kafka Broker,负责:
- 分配唯一PID(Producer ID)
- 维护事务状态机
- 驱动两阶段提交流程
2. 关键交互流程
// 生产者初始化事务(Java示例)
producer.initTransactions(); // 与Broker建立会话
完整2PC流程:
1️⃣ Prepare阶段:协调器持久化事务元数据到__transaction_state
2️⃣ Commit阶段:原子性写入所有参与分区的数据
3. 监控保障
Broker提供以下关键监控指标:
# Broker端事务指标查询
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type brokers --describe --all
监控项 | 告警阈值 | 对应Broker日志 |
---|---|---|
transaction-abort-rate | >5% | TransactionCoordinator.log |
pending-transactions | >1000 | server.log |
实现 Exactly-Once 的两种主要方式:
一、生产者幂等性 + 事务(推荐方案)
实现原理:
// 生产者配置
properties.put("enable.idempotence", "true"); // 开启幂等性
properties.put("transactional.id", "my-transaction-id"); // 设置事务ID// 生产者代码示例
producer.beginTransaction();
try {producer.send(new ProducerRecord<>("topic", "key", "value"));producer.commitTransaction();
} catch (Exception e) {producer.abortTransaction();
}
核心机制:
- 幂等性保证(通过 PID + 序列号)
- 每个生产者实例有唯一 PID
- 每条消息携带单调递增序列号
- 事务机制
- 使用两阶段提交协议
- 支持跨多个分区/主题的原子写入
二、消费者端精确一次消费
实现配置:
// 消费者配置
properties.put("isolation.level", "read_committed"); // 只读取已提交的消息
处理模式:
# 消费处理示例(Python)
import org.apache.kafka.clients.consumer.*;
import java.util.Collections;
import java.util.Properties;public class KafkaExample {public static void main(String[] args) {Properties props = new Properties();props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, "read_committed");props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);consumer.subscribe(Collections.singletonList("topic"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {processMessage(record.value());}consumer.commitSync();}}private static void processMessage(String message) {// ... 业务处理逻辑 ...}
}
使用场景对比
方案 | 适用场景 | 吞吐量影响 | 实现复杂度 |
---|---|---|---|
生产者事务 | 金融交易、订单处理 | 中等 | 高 |
消费者手动提交 | 日志处理、数据分析 | 低 | 低 |
注意事项:
- 需要 Kafka 0.11+ 版本支持
- 事务会增加约 20% 的吞吐开销
- 必须配合支持事务的存储系统(如支持事务的数据库)
- 消费者需设置
isolation.level=read_committed
实际应用中,建议结合具体场景选择方案。对于金融级业务,推荐使用生产者事务+数据库事务的混合方案。对于日志处理等场景,可采用消费者手动提交偏移量+处理结果去重的简化方案。
At-Least-Once实现方案
总结步骤:
- 编写生产者配置,确保消息重试和确认。
- 编写消费者配置,手动提交offset。
- 添加幂等处理示例,比如使用Redis或数据库唯一约束。
- 提供完整的Java代码示例,包含必要的注释和说明。
- 确保代码格式正确,符合用户指定的Markdown规范。
这里是一个完整的At-Least-Once实现方案,包含生产者和消费者的Java实现:
1. 生产者实现(保证至少一次投递)
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.ACKS_CONFIG, "all"); // 确保所有副本确认
props.put(ProducerConfig.RETRIES_CONFIG, 3); // 重试机制
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());KafkaProducer<String, String> producer = new KafkaProducer<>(props);try {ProducerRecord<String, String> record = new ProducerRecord<>("user_actions", "user1", "click_event");producer.send(record, (metadata, exception) -> {if (exception != null) {// 重试逻辑(实际生产环境需添加重试计数器)producer.send(record); }});
} finally {producer.close();
}
2. 消费者实现(含幂等处理)
// ... existing code ...
props.put(ConsumerConfig.GROUP_ID_CONFIG, "user_actions_group");
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); // 手动提交KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("user_actions"));while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {// Redis幂等检查(需配置Redis连接)if (!redisClient.setnx(record.key(), "processed")) { continue; // 已处理则跳过}// 业务处理(示例)processUserAction(record.value()); // 手动提交(失败会触发重试)consumer.commitSync(Collections.singletonMap(new TopicPartition(record.topic(), record.partition()),new OffsetAndMetadata(record.offset() + 1)));}
}
// ... existing code ...
3. 数据库幂等约束示例
CREATE TABLE user_events (id VARCHAR(36) PRIMARY KEY, -- 使用消息IDevent_data TEXT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,UNIQUE (id) -- 唯一约束实现幂等
);
该方案特点:
- 生产者通过
acks=all
和重试机制保证至少一次投递 - 消费者使用Redis SETNX和数据库唯一约束双重幂等保障
- 手动提交offset机制避免自动提交导致的数据丢失
- 最大程度保持高吞吐(实测可达8-12万TPS)
相关文章:
如何实现Kafka的Exactly-Once语义?
Kafka 的 Exactly-Once(精确一次)语义是分布式消息系统中最高等级的数据一致性保证,包含三个层面的含义: 消息不会丢失消息不会重复消费消息处理结果具有确定性 模式局限性: 这里模式有个问题,会导致性能…...
x-cmd install | Orbiton:极简至上的终端文本编辑器与轻量级 IDE
目录 核心特点安装适用场景优势 厌倦了臃肿复杂的 IDE?渴望一个轻巧、快速、专注的编码环境?Orbiton,一款极简主义的终端文本编辑器与轻量级 IDE,将带给你前所未有的编码体验。 核心特点 极简主义,专注编码࿱…...
WSL释放空间
在 WSL (Windows Subsystem for Linux) 中,Linux 发行版可能会占用越来越多的磁盘空间,即使删除文件后,空间也可能不会自动释放。这是因为 WSL 使用虚拟硬盘(VHDX 文件)来存储 Linux 文件系统,而 Windows 不…...
51c大模型~合集122
我自己的原文哦~ https://blog.51cto.com/whaosoft/13877107 #PHYBench 北大物院200人合作,金牌得主超50人!PHYBench:大模型究竟能不能真的懂物理? 本项目由北京大学物理学院朱华星老师、曹庆宏副院长统筹指导。基准设计、…...
Flink HA 总结
前言 总结 Flink HA 版本 Flink 1.15.3、1.15.4 官方文档 https://nightlies.apache.org/flink/flink-docs-release-1.19/zh/docs/deployment/ha/overview/ 由官方文档可知: HA 是对于 JobManager 的故障恢复,默认情况下,每个 Flink 集…...
从代码学习机器学习 - UMAP降维算法 scikit-learn版
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、UMAP降维算法介绍二、代码实践三、代码中可调整的降维参数总结前言 在机器学习和数据科学领域,我们经常会遇到高维数据。高维数据虽然包含了丰富的信息,但也带来了“维度灾难”的问题,…...
除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法?
除了Object.freeze(),JavaScript中还有哪些优化性能的对象限制方法? 前言 在前端开发中,性能优化是一个永恒的话题。当我们处理大型对象或频繁操作对象时,JavaScript 提供的对象限制方法能有效提升代码执行效率。众所周知的 Obje…...
实战指南:搭建AIRIOT全场景智慧养老管理平台系统全流程解析
依托AIRIOT智慧系统搭建平台构建的AIRIOT智慧养老管理系统,通过管理驾驶舱、健康管理、生活服务与安全监控、综合管理五大核心模块,构建覆盖“数据感知→智能分析→服务联动→安全保障”的全链路养老管理体系,助力养老机构实现精细化、智能化…...
【硬件系统架构】哈佛架构
一、引言 在计算机科学的浩瀚宇宙中,计算机体系结构犹如星辰般繁多且各有独特光芒。哈佛架构便是其中一颗耀眼的明星,它在众多计算机体系结构中占据着独特而重要的地位。从计算机技术的萌芽期一路走来,哈佛架构不断发展演变,在不同…...
晶振PCB设计核心要点与规范
一、布局与走线设计 位置优先原则: 晶振紧邻主控芯片(如MCU、FPGA)时钟输入引脚,最大走线长度≤10mm。 远离高速信号线(如DDR、USB差分对),间距≥3倍线宽,避免串扰。 对称走线&am…...
Dyna螺栓预紧力
01 前处理 1.1 几何模型构建 用ls-prepost进行建模,模型构建如图 1所示。 图 1 模型 1.2 网格模型构建 在ls-prepost中进行网格划分,最终效果图如图 2所示。 图 2 网格模型 1.3 有限元模型构建 1.3.1 材料定义 设置两种材料,均使用线弹…...
排序算法详解笔记
评价维度 运行效率就地性稳定性 自适应性:自适应排序能够利用输入数据已有的顺序信息来减少计算量,达到更优的时间效率。自适应排序算法的最佳时间复杂度通常优于平均时间复杂度。 是否基于比较:基于比较的排序依赖比较运算符(…...
喷泉码技术在现代物联网中的应用 设计
喷泉码技术在现代物联网中的应用 摘 要 喷泉码作为一种无速率编码技术,凭借其动态生成编码包的特性,在物联网通信中展现出独特的优势。其核心思想在于接收端只需接收到足够数量的任意编码包即可恢复原始数据,这种特性使其特别适用于动态信道和多用户场景。喷泉码的实现主要…...
LVDS系列10:Xilinx 7系可编程输入延迟(三)
这节继续讲解IDELAYE2和IDELAYCTRL的VARIABLE模式、VAR_LOAD模式和VAR_LOAD_PIPE模式的仿真测试; VARIABLE模式使用: VARIABLE模式需要使用INC和CE端口控制抽头值的递增递减变化; 测试代码如下: module top_7series_idelay( i…...
QT:自定义ComboBox
实现效果: 实现combobox的下拉框区域与item区域分开做UI交互显示。 支持4种实现效果,如下 效果一: 效果二: 效果三: 效果四: 实现逻辑: ui由一个toolbutton和combobox上下组合成,重点在于combobox。 我设置了4种枚举,ButtonWithComboBox对应效果一;OnlyButt…...
Python爬虫学习路径与实战指南 02
一、进阶技巧与工具 1、处理复杂反爬机制 验证码破解(谨慎使用): 简单图像验证码:使用 pytesseract(OCR识别) PIL 处理图像。 复杂验证码:考虑付费API(如打码平台)。 …...
Crawl4AI,智能体网络自动采集利器
Crawl是一个强大的工具,它赋予AI智能体更高的效率和准确性执行网络爬取和数据提取任务。其开源特性、AI驱动的能力和多功能性,使其成为构建智能且数据驱动智能体的宝贵资产,告别繁琐: 爬虫新宠 crawl4ai,数行代码搞定数据采集,AI …...
C语言实现卡ID启用排序
任务: typedef struct {uint8_t bindflag; uint8_t userCardNumber; //当前用户卡的数据uint32_t userCardId[7];//当前6个用户的卡ID }USER_NFC;结构体中bindflag从高到低的的高七位bit表示数组userCardId中低到高卡ID的启用禁用状态,userC…...
html css js网页制作成品——HTML+CSS甜品店网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
漫反射实现+逐像素漫反射+逐像素漫反射实现
标准光照的构成结构 自发光:材质本身发出的光,模拟环境使用的光 漫反射光:光照在粗糙材质后,光的反射方向随机,还有一些光发生了折射,造成材质 表面没有明显的光斑。 高光反射光:光照到材质表面…...
nginx代理websocket时ws遇到仅支持域名访问的处理
最终改造点 proxy_set_header Host 这一行 未改之前遇到的问题: nginx 日志显示 https://aaa.bbbb.cn:7413 被解析成了 IP 地址,这通常是因为 DNS 解析的结果被缓存或某些中间层(如负载均衡器、防火墙等)将域名替换为 IP 地址。…...
具身智能:从理论突破到场景落地的全解析
一、具身智能:重新定义 “智能” 的物理边界 (一)概念本质与核心特征 具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区…...
用Postman验证IAM Token的实际操作
当我们需要用Postman发送一个最简单的请求去验证Token的时候我们该怎么办? 【一、步骤】 步骤1:打开Postman,新建一个GET请求 请求地址填: https://iam.cn-north-4.myhuaweicloud.com/v3/auth/projects 解释一下:…...
CH592/CH582 触摸按键应用开发实例讲解
一. 触摸原理介绍 1. 触摸按键电容产生原理 一般应用中,可用手指与触摸板的电容模型简化代替人体与触摸板的电容模型,如图所示。 沁恒微电子的电容触摸按键检测方案主要有以下两种: (1) 电流源充电方案。 低功耗蓝牙系列、通用系列 MCU 使…...
为什么选择有版权的答题pk小程序
选择有版权的答题PK小程序主要有以下原因: 一、避免法律风险 随着国家对知识产权保护力度的加大,使用无版权的答题PK小程序可能会引发侵权纠纷。一旦被原作者或版权方发现,使用者可能会面临法律诉讼,需要承担相应的法律责任&…...
Java生成微信小程序码及小程序短链接
使用wx-java-miniapp-spring-boot-starter 生成微信小程序码及小程序短链接 在pom.xml文件中引入依赖 <dependency><groupId>com.github.binarywang</groupId><artifactId>wx-java-miniapp-spring-boot-starter</artifactId><version>4.7…...
从普查到防控:ArcGIS洪水灾害全流程分析技术实战——十大专题覆盖风险区划/淹没制图/水文分析/洪水分析/淹没分析/项目交流,攻克防洪决策数据瓶颈!
🔍 防范未然的关键一步:洪水灾害普查是筑牢防洪安全防线的基础。通过全面普查,可以精准掌握洪水灾害的分布、频率和影响范围,为后续的防洪规划、资源调配和应急响应提供详实的数据支持。这有助于提前识别潜在的高风险区域…...
Ubuntu安装SRS流媒体服务
通过网盘分享的文件:srs 链接: https://pan.baidu.com/s/1tdnxxUWh8edcSnXrQD1uLQ?pwd0000 提取码: 0000 官网地址:Build | SRS 将百度网盘提供的srs 和 conf 下载或上传到指定服务器 # 安装需要的依赖包 sudo apt install -y cmake tclsh unzip gcc…...
设计模式(行为型)解释器模式
定义 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这意味着我们能够针对特定领域的问题,构建一套专属的语言体系,并通过解释器对使用该语言描述的问题进行解析和处…...
海外独立站VUE3加载优化
主要有几个明显问题 1. 请求数量太多(139 requests) 网页请求了*大量 JS 文件*(都是 index-xxxx.js),而且每个文件都比较小。 每次建立请求都有 TCP 连接开销(特别是 HTTP/1.1),导…...
关于windows API 的键鼠可控可测
相关函数解释 GetAsyncKeyState 是 Windows API 中的一个函数,用于判断某个虚拟键是否被按下。GetAsyncKeyState(VK_ESCAPE) 专门用于检测 Esc 键的状态。下面为你详细介绍其用法: 函数原型 cpp SHORT GetAsyncKeyState( int vKey ); 参数 vKey&a…...
普发ASM392EUV检漏仪维修说明手测内容可目录
普发ASM392EUV检漏仪维修说明手测内容可目录...
Python pip下载包及依赖到指定文件夹
要使用pip下载包及其所有依赖到指定文件夹,请按照以下步骤操作: 步骤说明 使用pip download命令:该命令用于下载包及其依赖而不安装。指定目标目录:通过-d或--dest参数设置下载路径。确保包含依赖:默认情况下会下载依…...
DIFY 又跟新了,来到 1.3.0 版本,看正文
欢迎来到 1.3.0 版本!添加了各种巧妙的功能、修复了错误,并带来了一些新功能: 一、核心亮点: 结构化输出 1、LLM 节点新增JSON Schema编辑器,确保大语言模型能够返回符合预设格式的JSON数据。这一功能有助于提升数据…...
凸包问题 Graham 扫描算法 MATLAB
算法要解决的问题 Graham 扫描算法要解决的问题是在给定一组二维平面上的点集时,找出能够完全包含这些点的最小凸多边形,这个最小凸多边形就是这些点的凸包。在很多实际场景中,我们可能只关注一个点集的最外层边界,而凸包算法就可…...
es+kibana---集群部署
其实一般es要跑3个节点的,这样才能做高可用,处理并发大,但是我这里只是一个pod mkdir -p /stroe/data/es es搭建: #【拉取镜像】 #docker pull elasticsearch:6.8.7 #docker pull busybox:1.28 【导入镜像】 docker load -i es.…...
定时器的源码介绍与简单实现——多线程编程简单案例[多线程编程篇(5)]
目录 前言 什么是定时器 JAVA标准库中的定时器 而关于sched方法,请看源码: 为什么我们能知道"notify() 唤醒后台线程 TimerThread"? TimerThread 关键逻辑 第一步:加锁 queue,看有没有任务 第二步:取出最近要执行的任务 …...
SQL常用数据清洗语句
数据清洗:发现并纠正数据文件里的数据错误和不一致性,让数据达到分析要求的过程。 运用 SQL 进行数据清洗时,可借助多种语句和函数来处理数据中的缺失值、重复值、异常值以及格式错误等问题。 1. 处理缺失值 数据中某些变量的值为空的情况&…...
《Go 语言高并发爬虫开发:淘宝商品 API 实时采集与 ETL 数据处理管道》
在电商数据处理领域,高效获取并处理海量商品数据是企业实现精准运营、市场分析的重要基础。Go 语言凭借其出色的并发性能,成为开发高并发爬虫的理想选择。本文将介绍如何使用 Go 语言进行淘宝商品 API 实时采集,并构建 ETL(Extrac…...
大模型(LLMs)加速篇
当前优化模型最主要技术手段有哪些? 算法层面:蒸馏、量化软件层面:计算图优化、模型编译硬件层面:FP8(NVIDIA H系列GPU开始支持FP8,兼有fp16的稳定性和int8的速度) 推理加速框架有哪一些&#…...
Linux0.11引导启动程序:简略过程
引言 目标:是重写boot文件夹下面的引导文件,加入一些个人信息。语法:由于使用两个语法风格的汇编需要两个汇编器,有些麻烦,直接全都用GNU的 as(gas)进行编译。使用AT&T 语法的汇编语言程序。接下来先拜读同济大学赵…...
【JAVAFX】controller中反射调用@FXML的点击事件失败
场景 当前有一个controller中定义的事件如 FXMLvoid openZhengjieWindow(ActionEvent event) {System.out.println("zhengjie");}通过反射去调用 public void callMethodByString(String methodSuffix) {try {Method method this.getClass().getMethod("open&…...
人工智能数学基础(二):初等数学
在人工智能领域,初等数学知识是构建复杂模型的基石。本文将从函数、数列、排列组合与二项式定理、集合等方面进行讲解,并结合 Python 编程实现相关案例,帮助大家更好地理解和应用这些数学知识。资源绑定附上完整代码供读者参考学习࿰…...
opendds的配置
配置的使用 文档中说明有4种使用配置的方式: 环境变量 命令行参数(将覆盖环境变量中的配置) 配置文件(不会覆盖环境变量或命令行参数中的配置) 用户调用的 API(将覆盖现有配置) 这里对开发…...
mac 基于Docker安装minio
在 macOS 上基于 Docker 安装 MinIO 是一个高效且灵活的方案,尤其适合本地开发或测试环境。以下是详细的安装与配置步骤,结合了最佳实践和常见问题的解决方案: 一、安装 Docker Desktop 下载安装包 访问 Docker 官网,下载适用于 …...
Docker网络架构深度解析与技术实践
目录 第一章 Docker网络架构核心原理 1.1 容器网络模型(CNM)体系 1.2 网络命名空间隔离机制 1.3 虚拟网络设备对(veth) 1.4 网桥驱动模型 第二章 Docker网络模式深度剖析 2.1 Bridge模式(默认模式) …...
如何通过Google Chrome增强网页内容的安全性
在现代互联网环境中,网页安全问题时常困扰着用户。谷歌浏览器作为全球使用最广泛的浏览器之一,提供了多种方式帮助用户增强网页的安全性。以下是一些简单有效的方法,可以帮助用户提高浏览器的安全防护能力。 首先,谷歌浏览器自带了…...
劳动节ppt免费下载,劳动节ppt模板,劳动节课件
劳动节ppt免费下载,劳动节ppt模板,劳动节素材,学生,幼儿园课件:劳动节ppt_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...
应用在通信网络设备的爱普生晶振SG2016CBN
在数字化浪潮席卷全球的当下,通信网络已成为信息时代的核心基础设施,从 5G 基站的快速部署到数据中心的高效运转,从光纤网络的稳定传输到无线通信的流畅连接,每一个环节都对时钟信号的稳定性和精准性有着极高要求。一个高质量的时…...
STM32 RTC配置
一、什么是RTC? RTC,即实时时钟,是一种能持续运行并保持当前时间信息的电子装置。它常用于在设备断电的情况下依然能保持准确的年、月、日、时、分、秒信息。 与CPU核心时钟不同,RTC通常采用独立的低频晶振(如32.768…...