当前位置: 首页 > news >正文

TDengine 数据订阅设计

简介

数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。

基本概念

主题

与 Kafka 一样,使用 TDengine 数据订阅需要定义主题。TDengine 的主题可以是数据库、超级表,或者一个查询语句。数据库订阅和超级表订阅主要用于数据迁移,可以把整个库或超级表在另一个集群还原出来。查询语句订阅是 TDengine 数据订阅的一大亮点,它提供了更大的灵活性,因为数据过滤与预处理是由 TDengine 而不是应用程序完成的,所以这种方式可以有效地减少传输数据量与应用程序的复杂度。

如下图所示,每个主题涉及的数据表分布在多个 vnode(相当于 Kafka 的 partition)上,每个 vnode 的数据保存在 WAL 文件中,WAL 文件中的数据是顺序写入的。由于 WAL 文件中存储的不只有数据,还有元数据、写入消息等,因此数据的版本号不是连续的。
在这里插入图片描述

TDengine 会为 WAL 文件自动创建索引以支持快速随机访问。通过灵活可配置的文件切换与保留机制,用户可以按需指定 WAL 文件保留的时间以及大小。通过以上方式,WAL 被改造成一个保留事件到达顺序的、可持久化的存储引擎。

对于查询语句订阅,在消费时,TDengine 根据当前消费进度从 WAL 文件直接读取数据,并使用统一的查询引擎实现过滤、变换等操作,然后将数据推送给消费者。

生产者

生产者是与订阅主题相关联的数据表的数据写入应用程序。生产者可以通过多种方式产生数据,并将数据写入数据表所在的 vnode 的 WAL 文件中。这些方式包括 SQL、Stmt、Schemaless、CSV、流计算等。

消费者

消费者负责从主题中获取数据。在订阅主题之后,消费者可以消费分配给该消费者的 vnode 中的所有数据。为了实现高效、有序的数据获取,消费者采用了推拉(push 和 poll)相结合的方式。

当 vnode 中存在大量未被消费的数据时,消费者会按照顺序向 vnode 发送推送请求,以便一次性拉取大量数据。同时,消费者会在本地记录每个 vnode 的消费位置,确保所有数据都能被顺序地推送。

当 vnode 中没有待消费的数据时,消费者将处于等待状态。一旦 vnode 中有新数据写入,系统会立即通过推送方式将数据推送给消费者,确保数据的实时性。

消费组

在创建消费者时,需要为其指定一个消费组。同一消费组内的消费者将共享消费进度,确保数据在消费者之间均匀分配。正如前面所述,一个主题的数据会被分布在多个 vnode 中。为了提高消费速度和实现多线程、分布式地消费数据,可以在同一消费组中添加多个消费者。这些消费者首先会均分 vnode,然后分别对分配给自己的 vnode 进行消费。例如,假设数据分布在 4 个 vnode 上:

  • 当有 2 个消费者时,每个消费者将消费 2 个 vnode;
  • 当有 3 个消费者时,其中 2 个消费者各消费 1 个 vnode,而剩下的 1 个消费者将消费剩余的 2 个 vnode;
  • 当有 5 个消费者时,其中 4 个消费者各分配 1 个 vnode,而剩下的 1 个消费者则不参与消费。

在这里插入图片描述

在一个消费组中新增一个消费者后,系统会通过再平衡(rebalance)机制自动完成消费者的重新分配。这一过程对用户来说是透明的,无须手动干预。再平衡机制能够确保数据在消费者之间重新分配,从而实现负载均衡。

此外,一个消费者可以订阅多个主题,以满足不同场景下的数据处理需求。TDengine 的数据订阅功能在面临宕机、重启等复杂环境时,依然能够保证至少一次消费,确保数据的完整性和可靠性。

消费进度

消费组在 vnode 中记录消费进度,以便在消费者重启或故障恢复时能够准确地恢复消费位置。消费者在消费数据的同时,可以提交消费进度,即 vnode 上 WAL 的版本号(对应于 Kafka 中的 offset)。消费进度的提交既可以通过手动方式进行,也可以通过参数设置实现周期性自动提交。

当消费者首次消费数据时,可以通过订阅参数来确定消费位置,也就是消费最新的数据还是最旧的数据。对于同一个主题及其任意一个消费组,每个 vnode 的消费进度都是唯一的。因此,当某个 vnode 的消费者提交消费进度并退出后,该消费组中的其他消费者将继续消费这个 vnode,并从之前消费者提交的进度开始继续消费。若之前的消费者未提交消费进度,新消费者将根据订阅参数设置值来确定起始消费位置。

值得注意的是,不同消费组中的消费者即使消费同一个主题,它们之间也不会共享消费进度。这种设计确保了各个消费组之间的独立性,使得它们可以独立地处理数据,而不会相互干扰。下图清晰地展示了这一过程。

在这里插入图片描述

数据订阅架构

数据订阅系统在逻辑上可划分为客户端和服务器两大核心模块。客户端承担消费者的创建任务,获取专属于这些消费者的 vnode 列表,并从服务器检索所需数据,同时维护必要的状态信息。而服务器则专注于管理主题和消费者的相关信息,处理来自客户端的订阅请求。它通过实施再平衡机制来动态分配消费节点,确保消费过程的连续性和数据的一致性,同时跟踪和管理消费进度。数据订阅架构如下图所示:

在这里插入图片描述

在客户端成功建立与服务器的连接之后,用户须首先指定消费组和主题,以创建相应的消费者实例。随后,客户端便会向服务器提交订阅请求。此刻,消费者的状态被标记为 rebalancing,表示正处于 rebalance 阶段。消费者随后会定期向服务器发送请求,以检索并获取待消费的 vnode 列表,直至服务器为其分配相应的 vnode。一旦分配完成,消费者的状态便更新为 ready,标志着订阅流程的成功完成。此刻,客户端便可正式启动向 vnode 发送消费数据请求的过程。

在消费数据的过程中,消费者会不断地向每个分配到的 vnode 发送请求,以尝试获取新的数据。一旦收到数据,消费者在完成消费后会继续向该 vnode 发送请求,以便持续消费。若在预设时间内未收到任何数据,消费者便会在 vnode 上注册一个消费 handle。这样一来,一旦 vnode 上有新数据产生,便会立即推送给消费者,从而确保数据消费的即时性,并有效减少消费者频繁主动拉取数据所导致的性能损耗。因此,可以看出,消费者从 vnode 获取数据的方式是一种拉取(pull)与推送(push)相结合的高效模式。

消费者在收到数据时,会同时收到数据的版本号,并将其记录为当前在每个 vnode 上的消费进度。这一进度仅在消费者内部以内存形式存储,确保仅对该消费者有效。这种设计保证了消费者在每次启动时能够从上次的消费中断处继续,避免了数据的重复处理。然而,若消费者需要退出并希望在之后恢复上次的消费进度,就必须在退出前将消费进度提交至服务器,执行所谓的 commit 操作。这一操作会将消费进度在服务器进行持久化存储,支持自动提交或手动提交两种方式。

此外,为了维持消费者的活跃状态,客户端还实施了心跳保活机制。通过定期向服务器发送心跳信号,消费者能够向服务器证明自己仍然在线。若服务器在一定时间内未收到消费者的心跳,便会认为消费者已离线。对于一定时间(可以通过参数控制)不拉取数据的 consumer,服务器也会标记为离线,并从消费组中删除该消费者。服务器依赖心跳机制来监控所有消费者的状态,进而有效地管理整个消费者群体。

mnode 主要负责处理订阅过程中的控制消息,包括创建和删除主题、订阅消息、查询 endpoint 消息以及心跳消息等。vnode 则专注于处理消费消息和 commit 消息。当 mnode 收到消费者的订阅消息时,如果该消费者尚未订阅过,其状态将被设置为 rebalancing。如果消费者已经订阅过,但订阅的主题发生变更,消费者的状态同样会被设置为 rebalancing。然后 mnode 会对 rebalancing 状态的消费者执行 rebalance 操作。心跳超过固定时间的消费者或主动关闭的消费者将被删除。

消费者会定期向 mnode 发送查询 endpoint 消息,以获取再平衡后的最新 vnode 分配结果。同时,消费者还会定期发送心跳消息,通知 mnode 自身处于活跃状态。此外,消费者的一些信息也会通过心跳消息上报至 mnode,用户可以查询 mnode 上的这些信息以监测各个消费者的状态。这种设计有助于实现对消费者的有效管理和监控。

rebalance 过程

每个主题的数据可能分散在多个 vnode 上。服务器通过执行 rebalance 过程,将这些 vnode 合理地分配给各个消费者,确保数据的均匀分布和高效消费。

如下图所示,c1 表示消费者 1,c2 表示消费者 2,g1 表示消费组 1。起初 g1 中只有 c1 消费数据,c1 发送订阅信息到 mnode,mnode 把数据所在的所有 4 个 vnode 分配给 c1。当 c2 增加到 g1 后,c2 将订阅信息发送给 mnode,mnode 检测到这个 g1 需要重新分配,就会启动 rebalance 过程,随后 c2 分得其中两个 vnode 消费。分配信息还会通过 mnode 发送给 vnode,同时 c1 和 c2 也会获取自己消费的 vnode 信息并开始消费。

在这里插入图片描述

再平衡计时器每 2s 检测一次是否需要再平衡。在再平衡过程中,如果消费者获取的状态是 not ready,则不能进行消费。只有再平衡正常结束后,消费者获取分配 vnode 的 offset 后才可正常消费,否则消费者会重试指定次数后报错。

消费者状态处理

消费者的状态转换过程如下图所示。初始状态下,刚发起订阅的消费者处于 rebalancing 状态,表明消费者尚未准备好进行数据消费。一旦 mnode 检测到处于 rebalancing 状态的消费者,便会启动 rebalance 过程,成功后,消费者的状态将转变为 ready,表示消费者已准备就绪。随后,当消费者通过定时的查询 endpoint 消息获取自身的 ready 状态以及分配的 vnode 列表后,便能正式开始消费数据。

在这里插入图片描述

若消费者的心跳丢失时间超过 12s,经过 rebalance 过程,其状态将被更新为 clear,然后消费者将被系统删除。

当消费者主动退出时,会发送 unsubscribe 消息。该消息将清除消费者订阅的所有主题,并将消费者的状态设置为 rebalancing。随后,检测到处于 rebalancing 状态的消费者,便会启动 rebalance 过程,成功后,其状态将被更新为 clear,然后消费者将被系统删除。这一系列措施确保了消费者退出的有序性和系统的稳定性。

消费数据

时序数据都存储在 vnode 上,消费的本质就是从 vnode 上的 WAL 文件中读取数据。WAL 文件相当于一个消息队列,消费者通过记录 WAL 数据的版本号,实际上就是记录消费的进度。WAL 文件中的数据包含 data 数据和 meta 数据(如建表、改表操作),订阅根据主题的类型和参数获取相应的数据。如果订阅涉及带有过滤条件的查询,订阅逻辑会通过通用的查询引擎过滤不符合条件的数据。

如下图所示,vnode 可以通过设置参数自动提交消费进度,也可以在客户端确定处理数据后手动提交消费进度。如果消费进度被存储在 vnode 中,那么在相同消费组的不同消费者发生更换时,仍然会继续之前的进度消费。否则,根据配置参数,消费者可以选择消费最旧的数据或最新的数据。

在这里插入图片描述

earliest 参数表示消费者从 WAL 文件中最旧的数据开始消费,而 latest 参数表示从 WAL 文件中最新的数据(即新写入的数据)开始消费。这两个参数仅在消费者首次消费数据时或者没有提交消费进度时生效。如果在消费过程中提交了消费进度,例如在消费到 WAL 文件中的第 3 条数据时提交一次进度(即 commit offset=3),那么下次在相同的 vnode 上,相同的消费组和主题的新消费者将从第 4 条数据开始消费。这种设计确保了消费者能够根据需求灵活地选择消费数据的起始位置,同时保持了消费进度的持久化和消费者之间的同步。

访问官网

更多内容欢迎访问 TDengine 官网

相关文章:

TDengine 数据订阅设计

简介 数据订阅作为 TDengine 的一个核心功能,为用户提供了灵活获取所需数据的能力。通过深入了解其内部原理,用户可以更加有效地利用这一功能,满足各种实时数据处理和监控需求。 基本概念 主题 与 Kafka 一样,使用 TDengine 数…...

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!&#xff0…...

高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案

在电商、旅游等行业业务量激增,高并发下单场景中,传统库存扣减方式弊端尽显。超卖问题因缺乏有效并发控制机制频发,多个订单同时访问库存数据,导致同一商品多次售出,订单无法履约引发客户投诉;同时&#xf…...

crictl 遇到报错 /run/containerd/containerd.sock: connect: permission denied

报错内容 crictl --runtime-endpoint unix:///run/containerd/containerd.sock logs CONTAINERID FATA[0000] validate service connection: validate CRI v1 runtime API for endpoint "unix:///run/containerd/containerd.sock": rpc error: code Unavailable de…...

CSS外边距合并现象

外边距合并(Margin Collapsing)是指在文档流中,两个或多个相邻元素的外边距(margin)会合并为一个外边距,其大小会取其中最大的外边距值 当两个相邻的兄弟元素之间没有其他内容(如边框、内边距、…...

《深度神经网络之数据增强、模型保存、模型调用、学习率调整》

文章目录 前言一、数据增强1、什么是数据增强?2、数据增强的实现方法(1)几何变换翻转:旋转:平移: (2)颜色变换亮度调整:对比度调整:色彩抖动: (3&…...

【Java学习笔记】random的使用

random使用方法 使用说明&#xff1a;返回的是(0<n<1)这个范围中的任意带正号的double值 代码实例 public class helloworld{public static void main(String[] args){System.out.println(Math.random());} }生成0-100中的任意数代码示例 public class Main {public …...

Redis的string类型使用

第一步&#xff1a;添加缓存 以若依岗位代码为例 一&#xff1a;首先从redis中查询岗位信息&#xff0c;如果查询到了则直接返回。 二&#xff1a;如果redis中没有数据&#xff0c;则直接从数据库中查询。查询后放到redis并返回 package com.ruoyi.system.service.impl;imp…...

AIGC架构与原理

AIGC&#xff08;AI Generated Content&#xff0c;人工智能生成内容&#xff09;的架构与原理 AIGC通过整合数据采集、模型训练、推理服务等模块&#xff0c;结合深度学习与生成对抗网络&#xff08;GAN&#xff09;等技术&#xff0c;实现从数据到内容的自动化生成。 一、AIG…...

安全复健|windows常见取证工具

写在前面&#xff1a; 此博客仅用于记录个人学习内容&#xff0c;学识浅薄&#xff0c;若有错误观点欢迎评论区指出。欢迎各位前来交流。&#xff08;部分材料来源网络&#xff0c;若有侵权&#xff0c;立即删除&#xff09; 取证 01系统运行数据 使用工具&#xff1a;Live-F…...

Oracle EBS R12.2 汉化

一、前言 在使用oracle ebs时&#xff0c;使用中文会更好的理解整个ebs流程&#xff0c;以下介绍oracle r12中文补丁的方式 如果你的系统除了支持英语外&#xff0c;还支持其他语言&#xff0c;比如中文&#xff0c;那你在下载补丁的时候除了下载Generic Platform版本外&#…...

【Java面试笔记:基础】12.Java有几种文件拷贝方式?哪一种最高效?

在 Java 中,文件拷贝可以通过多种方式实现,不同方式的性能和适用场景有所差异。 1. Java 文件拷贝方式 传统 IO 方式 使用 FileInputStream 和 FileOutputStream,通过循环读取和写入数据实现文件拷贝。 示例代码: try (InputStream is = new FileInputStream("sou…...

互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析

互联网大厂Java面试&#xff1a;RocketMQ、RabbitMQ与Kafka的深度解析 面试场景 面试官&#xff1a;马架构&#xff0c;您好&#xff01;欢迎参加我们的面试。今天我们将围绕消息中间件展开讨论&#xff0c;尤其是RocketMQ、RabbitMQ和Kafka。您有十年的Java研发和架构设计经…...

kali安装切换jdk1.8.0_451java8详细教程

kali安装切换jdk1.8.0_451java8详细教程 下载链接&#xff1a; jdk-8u451-linux-i586.tar.gz 链接: https://pan.baidu.com/s/1lpgI0JMfHpZ__RxsF8UoBw?pwdx3z2 提取码: x3z2 解压jdk 首先将下载好的压缩包放在kali虚拟机中&#xff0c;一般是直接拖到桌面 然后cd到压缩包…...

众趣科技X世界读书日丨数字孪生技术赋能图书馆空间智慧化运营

4月23日&#xff0c;是第30个“世界读书日”&#xff0c;不仅是庆祝阅读的日子&#xff0c;更是思考知识传播未来的契机。 图书馆作为主要传播图书的场所&#xff0c;在科技的发展中&#xff0c;图书馆正面临前所未有的挑战&#xff0c;联合国数据显示&#xff0c;全球近30%的…...

Python内置函数-aiter()

Python内置函数 aiter() 用于获取异步可迭代对象的异步迭代器&#xff0c;是异步编程中的核心工具之一。 1. 基本概念 异步可迭代对象&#xff1a;实现了 __aiter__() 和 __anext__() 方法的对象&#xff0c;支持 async for 循环。 异步迭代器&#xff1a;通过 aiter() 获取的…...

Java 实现单链表翻转(附详细注释)

1. 引言 单链表&#xff08;Singly Linked List&#xff09;是一种常见的数据结构&#xff0c;在算法和数据结构的学习中占有重要地位。翻转单链表是一道经典的面试题&#xff0c;本文将介绍几种常见的 Java 实现方法&#xff0c;并详细讲解关键步骤的含义。 2. 单链表定义 …...

基于HPC的气候模拟GPU加速实践全流程解析

基于HPC的气候模拟GPU加速实践全流程解析 关键词&#xff1a;气候模型、GPU加速、CUDA编程、性能优化、分布式训练 摘要&#xff1a; 本文针对全球气候模拟中10^12级网格点实时计算需求&#xff0c;提出基于CUDA的并行计算架构。通过改进WRF模式的分块矩阵乘法算法&#xff0c…...

【初级】前端开发工程师面试100题(一)

本题库共计包含100题,考察html,css,js,以及react,vue,webpack等基础知识掌握情况。 HTML基础篇 说说你对HTML语义化的理解? 语义化就是用合适的标签表达合适的内容,比如<header>表示页眉,<nav>表示导航。这样不仅代码更清晰,对SEO也友好,屏幕阅读器也能…...

大模型框架技术演进与全栈实践指南

‌一、大模型框架概述 ‌大模型框架‌是支撑大规模语言模型&#xff08;LLM&#xff09;训练、推理和应用开发的核心技术体系&#xff0c;涵盖分布式训练、高效推理、应用编排等全流程。从AlphaGo到GPT-4&#xff0c;大模型框架的进化推动AI从实验室走向工业化落地。据IDC预测…...

【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

当你在进行深度学习相关操作时&#xff0c;若因缺少本地的 CA 证书而无法下载资源&#xff0c;下面为你介绍几种解决办法&#xff1a; 方法一&#xff1a;更新 CA 证书 在大多数 Linux 发行版中&#xff0c;你可以使用包管理器来更新 CA 证书。例如&#xff0c;在基于 Debian…...

第七章:Workspace Security

Chapter 7: Workspace Security 从变形金刚到安全防护罩&#xff1a;如何为代理设置权限边界&#xff1f; 在上一章多后端配置&#xff0c;我们学会了让代理像变形金刚一样切换不同环境。但就像超级英雄需要遵守法律一样&#xff0c;代理也需要一个“安全防护罩”来限制它的操…...

【论文阅读】Hierarchical Group-Level Emotion Recognition

【论文阅读】Hierarchical Group-Level Emotion Recognition 摘要1.介绍2.相关工作3.方法4.实验5.分析 摘要 本篇博客参考IEEE于2021年收录的论文Hierarchical Group-Level Emotion Recognition&#xff0c;对其主要内容进行总结&#xff0c;以便加深理解和记忆 1.介绍 1&am…...

(2025最新版)CUDA安装及环境配置

CUDA安装 文章目录 CUDA安装检查本地环境下载CUDA安装包CUDA安装检查是否安装成功 学习深度学习的小伙伴在配置环境的时候必不可少的一件事就是安装CUDA&#xff0c;在这个过程中也是容易踩很多坑&#xff0c;所以这里写一篇教程来帮助新入门的小伙伴快速安装CUDA&#xff0c;减…...

ODC 4.3.4 发布:三大核心功能升级,打造更好的数据开发体验

ODC 是OceanBase提供的企业级数据库协同开发平台&#xff0c;提供了团队协作开发的基础框架&#xff0c;和14种工单任务类型。此次升级的 ODC 4.3.4版本&#xff0c;重点优化了30余项功能&#xff0c;主要聚焦快速上手、配置管理和核心功能中的改进&#xff0c;来为用户打造更高…...

JavaFX 第一篇 Hello World

1、简介 JavaFX 是一个用于构建客户端应用程序的 Java 库&#xff0c;作为 Java 标准库的一部分&#xff08;JDK 8 到 10&#xff09;&#xff0c;从 JDK 11 开始&#xff0c;JavaFX 将以独立模块发布&#xff0c;将不再包含在 JDK标准库中&#xff0c;他是 Java 应用程序开发的…...

es的range失效

es的range失效的解决方法 问题描述 当我们es使用keyword类型存储数字时&#xff0c;当我们使用range时我们发现range失效的问题&#xff0c;例如以下的用例&#xff1a; 我们创建一个test1的索引test1&#xff1a; 使用_bulk进行批量导入数据&#xff1a; 进行查询我们发现我…...

gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词不知道该如何翻译所以没有汉化)

Current gem5-gpu Software Architecture 这是当前gem5-gpu软件架构的示意图。 CudaCore (src/gpu/gpgpu-sim/cuda_core.*, src/gpu/gpgpu-sim/CudaCore.py) Wrapper for GPGPU-Sim shader_core_ctx (gpgpu-sim/gpgpu-sim/shader.h) Sends instruction, global and const m…...

【C++】vector扩容缩容

vector扩容缩容 1 扩容 一般来说&#xff0c;主要是重新分配内存 2 缩容 resize 缩小后&#xff0c;vector 的容量&#xff08;capacity()&#xff09;可能保持不变&#xff0c;需要显式调用 shrink_to_fit() 来释放内存。 验证代码&#xff1a; #include <vector>…...

【鸿蒙HarmonyOS】深入理解router与Navigation

5. 路由 1.页面路由(router模式&#xff09; 1.概述 页面路由指的是在应用程序中实现不同页面之间的跳转&#xff0c;以及数据传递。 我们先明确自定义组件和页面的关系&#xff1a; 自定义组件&#xff1a;Component 装饰的UI单元&#xff0c;页面&#xff1a;即应用的UI…...

手机端touch实现DOM拖拉功能

touch实现DOM拖拉功能 1、面板交互流程图 [ 用户触摸拖动手柄 ]↓ [ 记录起始位置、偏移量 ]↓ [ 实时更新面板 translateY ]↓ [ 手指松开 → 判断释放位置 ]↓ [ 达到恢复条件&#xff1f; → 复位 ]2、详细实现步骤 2.1 初始面板位置 const initialPosition () > tr…...

Discuz!与DeepSeek的AI融合:打造智能网址导航新体验——以“虎跃办公”为例

在数字化办公需求日益增长的今天&#xff0c;高效获取优质资源成为职场人士的核心痛点。传统网址导航网站往往面临信息过载、个性化不足、交互体验单一等问题&#xff0c;难以满足用户精准触达目标资源的需求。本文将深入剖析“虎跃办公”这一基于Discuz!系统构建的网址导航网站…...

【AI】Windows环境安装SPAR3D单图三维重建心得

效果一览 左图为原始单个图像&#xff0c;右图为通过SPAR3D重建后的三维建模&#xff0c;可以看出效果还是不错的。 本地环境配置 系统&#xff1a;Windows 11 专业版CPU&#xff1a;i5-13400F内存&#xff1a;32GBGPU&#xff1a;RTX3060 12GBcuda&#xff1a;11.8conda&…...

关于Agent的简单构建和分享

前言&#xff1a;Agent 具备自主性、环境感知能力和决策执行能力&#xff0c;能够根据环境的变化自动调整行为&#xff0c;以实现特定的目标。 一、Agent 的原理 Agent(智能体)被提出时&#xff0c;具有四大能力 感知、分析、决策和执行。是一种能够在特定环境中自主行动、感…...

【C/S通信仿真】

文章目录 一、实验背景与目的二、实验设计与实现思路1. 设计思想2. 核心代码实现 总结 一、实验背景与目的 在网络编程中&#xff0c;TCP 协议是实现可靠通信的核心。本次实验基于 Windows 平台&#xff0c;使用 WinSock2 库实现客户端与服务器的双向数据传递&#xff0c;模拟…...

Tomcat 8 启动闪退解决方案:版本差异与调试技巧详解

在使用 Tomcat 8 时&#xff0c;启动闪退是常见问题&#xff0c;核心原因多与 JAVA_HOME 环境变量配置、版本特性及启动脚本逻辑相关。本文结合官方文档与专家实践&#xff0c;提供分版本解决方案及调试技巧&#xff0c;适用于开发与运维场景。 一、核心问题&#xff1a;JAVA_…...

【Project】基于spark-App端口懂车帝数据采集与可视化

文章目录 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服务器初始化config 副本集 shard 服务器初始化shard 副本集 mongos服务器添加shard设置chunk大小 启动分片为集合 user 创建索引…...

基于ARM+FPGA+DSP的储能协调控制器解决方案,支持国产化

储能协调控制器的作用与设计方案 一、‌核心作用‌ ‌实时监测与协调控制‌ 实时采集储能系统电压、电流、温度等参数&#xff0c;监测电池电量状态及充放电功率&#xff0c;动态调整储能与电网、负载的功率交互&#xff0c;保障能源供需平衡15。支持一次调频&#xff08;AGC&a…...

将天气查询API封装为MCP服务

下面我将展示如何将一个天气查询API封装为符合MCP协议的服务。我们将使用Python实现&#xff0c;包括服务端和客户端。 ## 1. 服务端实现 python # weather_mcp_server.py from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import Di…...

JSON实现动态按钮管理的Python应用

在开发桌面应用程序时&#xff0c;动态生成用户界面元素并根据配置文件灵活管理是一项常见需求。本文将介绍如何使用Python的wxPython库结合JSON配置文件&#xff0c;开发一个支持动态按钮创建、文件执行和配置管理的桌面应用程序。该应用允许用户通过设置界面配置按钮名称和关…...

基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b&#xff08;提供软件版本下载&#xff09; 3.部分核心程序 &#xff08;完整版代码包…...

MongoDB(docker版)备份还原

docker启动MongoDB docker run -d -p 27017:27017 --name my-mongo -v /mongodb/db:/data/db mongo备份MongoDB 使用mongodump备份数据库时&#xff0c;默认会将备份数据保存在当前工作目录下的dump文件夹中。 docker容器中默认备份在当前工作目录&#xff0c;所以此处指定当…...

[蓝桥杯 2025 省 Python B] 异或和

暴力&#xff08;O(n^2)&#xff09;&#xff1a; def xor_sum(n, arr):total 0for i in range(n):for j in range(i 1, n):total (arr[i] ^ arr[j]) * (j - i)return total# 主函数 if __name__ "__main__":n int(input())arr list(map(int, input().split()…...

HTTP代理基础:网络新手的入门指南

目录 一、为什么需要了解HTTP代理&#xff1f; 二、HTTP代理的“中间人”角色 三、代理的三大核心类型 四、HTTP代理的5大实用场景 五、设置代理的三种方式 六、代理的优缺点分析 七、如何选择代理服务&#xff1f; 八、安全使用指南 九、未来趋势 结语 一、为什么需要…...

GRE 多层级网络数据处理系统

​ 一、整体架构​ 多层级网络数据处理系统&#xff0c;从底层硬件中断到上层协议处理&#xff0c;涵盖了数据包的接收、转发、解封装、路由决策和发送全流程。系统采用分层处理和模块化设计&#xff0c;结合了传统Linux网络协议栈与快速路径&#xff08;Fast Path&#xff0…...

展望未来,楼宇自控系统如何全方位推动绿色建筑智能高效发展

在全球积极践行可持续发展理念的时代背景下&#xff0c;绿色建筑已成为建筑行业发展的必然趋势。绿色建筑追求在全生命周期内&#xff0c;最大限度地节约资源、保护环境和减少污染&#xff0c;为人们提供健康、舒适、高效的使用空间。而楼宇自控系统作为建筑智能化的核心技术&a…...

【计算机视觉】CV项目实战- Florence-SAM 多模态视觉目标检测+图像分割

Florence-SAM多模态视觉分析系统&#xff1a;技术解析与实战指南 一、项目架构与技术解析1.1 核心模型架构1.2 支持的任务模式 二、环境配置与部署实战2.1 本地部署指南2.2 运行演示系统 三、核心功能实战解析3.1 图像开放词汇检测3.2 视频目标跟踪 四、高级应用与二次开发4.1 …...

2025-04-23 Python深度学习3——Tensor

文章目录 1 张量1.1 数学定义1.2 PyTorch中的张量 2 创建 Tensor2.1 直接创建**torch.tensor()****torch.from_numpy()** 2.2 依据数值创建**torch.zeros() / torch.zeros_like()****torch.ones() / torch.ones_like()****torch.full() / torch.full_like()****torch.arange() …...

ZYNQ笔记(十三):双核 AMP 通信实验

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; ZYNQ 裸机双核 AMP 实验&#xff1a; CPU0 接收串口的数据&#xff0c;并写入 OCM 中&#xff0c;然后利用软件产生中断触发 CPU1&#xff1b;CPU1 接收到中断后&#xff0c;根据从 OCM 中读出的数据控制呼吸灯的频…...

黑马Java基础笔记-3

短路逻辑运算符与逻辑运算符 逻辑运算符 符号作用说明&逻辑与&#xff08;且&#xff09;并且&#xff0c;两边都为真&#xff0c;结果才是真|逻辑或或者&#xff0c;两边都为假&#xff0c;结果才是假^逻辑异或相同为 false&#xff0c;不同为 true!逻辑非取反 短路逻辑…...