kafka 问与答
kafka Q&A
How does the client connect to kafka and discovery the brokers.
client 只需要知道一部分nodes(brokers)的地址既可以,client 会自动发现剩下的所有topic partition leader nodes, 然后连接上。
When a client connects:It uses the bootstrap servers list (e.g., broker1:9092,broker2:9092).It connects to one of those nodes and performs metadata discovery.It learns:Which brokers existWhat topics/partitions existWho is the leader for each partition🔁 Then What?The client then connects directly to the broker that is the leader for each partition it needs to consume or produce from.This is done transparently — you only give it the bootstrap nodes, and Kafka handles the rest.⚠️ Notes:You don't need to list all brokers in the bootstrap list — just enough for discovery.If a leader broker goes down, the client automatically detects it and reconnects to the new leader using updated metadata.
kafka partition 和consumer 的故事
说法 | 正确性 | 说明 |
---|---|---|
一个 partition 同时只能被 group 内一个 consumer 消费 | ✅ 正确 | |
一个 partition 可以被多个不同 group 的消费者同时消费 | ✅ 正确 | |
一个 consumer 可以连接多个 partition | ✅ 正确 |
To get all messages from a topic with multiple partitions, you need multiple consumers instances in the same consumer group, and Kafka will assign partitions to them.
if you only use one consumer in a consumer group, Kafka will assign all partitions to that one consumer, and it will pull messages from each in turn.
How to identify clients into different groups?
// Each consumer client has a config:
group.id=my-consumer-group
The process when producer write the data to kafka topic.
producer 发送数据到topic 的leader partition, 然后follower partition 会从leader异步同步replicas。
过程大概如下
Let’s say:Topic has Partition 0 and 3 replicas Partition 0 has:Leader = Broker AFollowers = Broker B and Broker CISR = [A, B, C]Here’s what happens when the producer sends a message with acks=1:1. Producer sends message to Broker A (the leader).2. Broker A writes the message to its local log.3. Broker A immediately sends acknowledgment back to the producer.4. Meanwhile, Broker B and Broker C (followers) pull the message from A and append it asynchronously (in the background).
如果ACK=ALL
, 那么 第3.4步 会如下
3. Broker A waits until all in-sync replicas (Broker B and Broker C) pull and replicate that message.
4. Once all ISRs have acknowledged, Broker A sends an acknowledgment back to the producer.
What is message batching when client send message to broker
出于效率的原因,client producer 往同一个partition 发送records 时,会先cache 起来,然后批量发送。
这个是通过参数 linger.ms (by time)
or batch.size (by size)
来控制的
kafka-producer-perf-test.sh 可以测试kafka 的producer的性能,可以用来调教client的参数,例如 linger.ms
和 batch.size
。
Batching is a mechanism where the producer of messages holds onto several messages before forwarding them to the broker. By sending a single request that includes multiple messages to the broker, the client reduces network bandwidth at the cost of a bit of latency. For those clients that support it, a single batch can be compressed into a single message. The gains from compression are significantly better when there is more data, compared to single, small messages that may not benefit much individually from compression. How long the client holds the batch, the size in bytes of the batch, or the number of messages in the batch, is configurable by the client.
What is the commited messages in consumer side?
The consumer commit the messages that has been consumpted and comfirm the message offset back to kafka.
What is committed messages for producer
In Apache Kafka, committed data refers to messages that have been:
- Written to a Kafka topic partition, and
- Successfully replicated to meet the topic’s configured
min.insync.replicas
oracks
configurations.
Producer 生产的records 之后被committed 之后才可以被consumer 消费。
Why doesn’t consumer.poll consume all delivered messages?
consumer.poll doesnt grant to fetch all sent records via once execution of poll
producer.send(new ProducerRecord<>(TOPIC, "key-a", "value-a"), callBack);producer.send(new ProducerRecord<>(TOPIC, "value-b"), callBack);producer.flush();Uninterruptibles.sleepUninterruptibly(5, TimeUnit.SECONDS);ConsumerRecords<String, String> crs = consumer.poll(Duration.ofSeconds(2));for (ConsumerRecord<String, String> cr : crs) {log.info("The consumed key {} and value is {}", cr.key(), cr.value());}// This may only fetch the "value-a" record but not "value-b", need to poll again to consume "value-b"
// This is becuase poll doesnt grant to fetch all sent records via once exeuction of poll
public void waitReceivingMessageAndClear(int milliSeconds) {long endTimeStamp = System.currentTimeMillis() + milliSeconds;while (System.currentTimeMillis() < endTimeStamp) {// Why need to poll cycle to clear the cached messages?// This is becuase poll doesnt grant to fetch all sent records via once exeuction of poll// So poll may only fetch one record even though producer already sent multi successfullyUninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS);consumer.poll(Duration.ZERO);}}
消息丢失
kafka 如何保证数据的availability
其实就是使用replication 机制。
可以通过下面的方式来达到:
- 可以使用 client 端的
acks=all
这种配置来保证replicas. - 可以设置全局配置
min.insync.replicas
来保证replicas.
如果expect 的 replicas=3, 那么acks=all
情况下的 client 端的latency 是 acks=1
多2.5 倍数。多出的一倍要等多个 followers 并行同步,另外0.5 倍是要等leader确认follower 都同步了。
kafka如何保证发送message不丢失
kafka client 先在内存缓存然后就先respond了,之后再统一发送到kafka。
所以当client crash 掉是有可能出现消息丢失的。
但是因为client 没有收到 ack
那就认为消息没有成功发送,会重新发送。
所以只要开启了 enable.idempotence = true
和 acks=all
就可以了,参考下面如何保证消息顺序的解释
消息无序
如何保证produced message顺序
在broker 中绑定特定client 和partition的 network Thread只有respond了来自同一个client的request,才会处理下一个request。
这样就保证了来自同一个client,去往同一个partition 的消息是顺序的。
如果想要消息保证顺序,就需要发往同一个partition,即要保证前后两条消息的key要相同。
订单创建 → partition 0 (orderId=1001)
订单支付 → partition 0 (orderId=1001) // 保证顺序
订单创建 → partition 1 (orderId=1002) // 与1001的消息无序
Ps: network Thread 会监听多个clients.
但是在leader failure 的情况下, 还是可能出现messages 已经被存储/replicated了,但是leader还没有来得及返回response 给client的情况。这样client 会重新发送相同的数据到(新)leader,导致数据重复。 所以要设置 enable.idempotence = true
on the producer which is the default value as of Kafka 3.0。With this set, the producer tags each event with a producer ID and a sequence number. These values will be sent with the events and stored in the log. If the events are sent again because of a failure, those same identifiers will be included. If duplicate events are sent, the broker will see that the producer ID and sequence number already exist and will reject those events and return a DUP response to the client.
Combining acks=all
, producer idempotence, and keyed events results in a powerful end-to-end ordering guarantee. Events with a specific key will always land in a specific partition in the order they are sent, and consumers will always read them from that specific partition in that exact order.
简单来说就是针对每条消息有一个唯一的ID 来标记,每次发送的时候都会带上,再结合 acks=all
确保不丢失,就可以保证同一partition 的 端到端的 message 的顺序了。
如果没有acks=all
那么可能中间有消息丢失了,导致producer 这边是按顺序发送,但是consumer 这边中间有些消息没有收到。
总结就是kafka顺序保证是指可以保证相同key的消息的顺序。
消息重复
如何保证producer 不生产重复的message
这个其实和如何保证消息的序列(ordering)是一样的问题,如果消息能保证不丢失却有顺序,那就不会重复。
如何保证message不被重复消费
例如 consumer crash 之类导致offset 没有写回kafka,那么可能会导致的重复消费。
其实单独通过kafka 是没法保证message 不被重复消费的。
因为被消费的message offset 需要被写回kafka 才可以。
要达到 exact-once 需要 producer 和 consumer 配合才行。
producer 要求不能推送重复的消息,即幂等生产设计。
consumer 要求不能消费重复的消息,即幂等消费设计。
例如可以将消费过的消息ID保持在外部的redis/db中,然后再commit offset 回kafka.
处理下一条消息时,如果发现消息处理过了,就可以跳过。
这样也不能完全消除,如果要更加严格,就需使用kafka事务了。
过程类似如下:
1. 生产者开启事务
2. 写入业务消息
3. 消费者读取消息
4. 处理并写入结果
5. 提交消费位移(作为事务一部分)
6. 提交事务Kafka transactions provide a mechanism for ensuring that a set of operations (production and consumption) are treated as a single atomic unit.
This can be used to ensure that a message is processed exactly once by coordinating the production and consumption steps within a transaction
这些都是需要trade-off的,更高的性能还是更严格的一致性。
Followers 怎么知道要向leader 发送同步请求呢?
Follower 总是会定期向 Leader 发送同步请求(FetchRequest),即使没有新消息, 由参数replica.fetch.wait.max.ms 控制,默认每 500ms。
Example:
FetchRequestoffset: 3 # FetchRequest 会带上follower 自己的record offset,leader 会将差值在response 中返回
kafka 的record values 需要加上版本吗? 方便以后数据的演进
最佳实践建议, 对于重要业务数据, 强烈推荐包含版本号。使用结构化格式(JSON/Protobuf/Avro)
版本号设计example
// 生产端示例
public class VersionedRecord {private String schemaVersion = "1.0"; // 使用语义化版本private Object payload;// getters & setters
}
Consumer group 中的consumers 是如何被分发partitions的?
在consumer group 中,consumer的partition assignment 是在client 端决定的。
Client 这边可以定义partition assignment strategy.
这样实现的原因是,client 才知道自己的业务场景,才知道如何去哪些client consume 哪些partition。
例如两个不同的topic share相同的key,那么两个topic相同key所在的partitions都需要被相同的client consume。
这个就需要用到range partition
assignment strategy.
其他的strategy 还有 round robin
and stick partition
assignment strategies 等。
Strategy 决定了clients如何连接partitions.
相关文章:
kafka 问与答
kafka Q&A How does the client connect to kafka and discovery the brokers. client 只需要知道一部分nodes(brokers)的地址既可以,client 会自动发现剩下的所有topic partition leader nodes, 然后连接上。 When a client connects:It uses the bootstrap…...
docker默认存储迁移
在容器化场景下默认存储路径为(/var/lib/docker)大多数平台根目录不支持系统盘扩容,会有空间不足风险隐患,因未配置持久化存储导致容器数据丢失。以迁移Docker存储路径至大容量/data目录说明 一、停止容器 systemctl stop docke…...
Ubuntu20.04系统下使用交叉编译工具链(aarch、x86)交叉编译opencv4.5.0
文章目录 0. 引言1. 准备交叉编译工具链2. 安装依赖工具3. 下载 OpenCV 源码4. 创建交叉编译工具链文件5. 配置 CMake 构建6. 构建 OpenCV7. 安装 OpenCV8. 验证9. 问题及解决办法 0. 引言 Ubuntu20.04系统下使用交叉编译工具链(aarch、x86)交叉编译ope…...
R语言数据可视化
R note book 文档–输出html格式文档,plotly不能生成PDF文件 --- title: "R语言数据可视化" output: html_notebook ---在R语言中进行数据可视化是数据分析和呈现的重要环节,R提供了多种强大的绘图系统和工具。以下是常见的数据可视化方法和示…...
NLP学习路线图(一): 线性代数(矩阵运算、特征值分解等)
引言:语言与矩阵的奇妙邂逅 在自然语言处理(NLP)的魔法世界里,每个词语都像被施了变形术的精灵,在数学的殿堂中翩翩起舞。当我们用"king - man woman queen"这样的向量魔法破解语义密码时,线性…...
【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ
最大连续1的个数 Ⅲ 一、题目链接二、题目三、题目解析四、算法原理解法一:暴力枚举 zero计数器解法二:滑动窗口 五、编写代码六、时空复杂度 一、题目链接 最大连续1的个数 Ⅲ 二、题目 三、题目解析 注意题目中说的是最多k次,在一个数组…...
Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE
1. prepare_to_wait_exclusive 函数解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 内核中用于将进程以独占方式加入等待队列的关键函数,其主要功能包括: 标记独占等待:通过设置 WQ_FLAG_EXCLUSIVE 标志,表明此等待条目是独占的。 安全入队:在自旋锁保护下,将条…...
分布式数据库TiDB:深度解析原理、优化与架构设计
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】 一、TiDB架构设计与核心原理 1.1 分布式架构演进 传统分库分表 vs TiDB架构 #mermaid-svg-8I88Hg2AVkzYTb3O {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fi…...
【深度学习基础】损失函数与优化算法详解:从理论到实践
【深度学习基础】损失函数与优化算法详解:从理论到实践 一、引言 1. 损失函数与优化算法在深度学习中的核心作用 在深度学习中,模型训练的本质是通过不断调整参数,使模型输出尽可能接近真实值。这一过程的核心驱动力是损失函数(…...
睿抗足球机器人
目录 大框架 战术 Lua脚本语言编辑环境 大框架 策略脚本(LUA-官方脚本)、决策算法(C-自定义)、ROS系统 战术 我们研究了场地的长度、宽度、禁区范围、机器人运动速度等等,发现即使 Kicker 点球往极端角度踢…...
助力DBA技能无缝平迁 | YashanDB携最新成果亮相XCOPS智能运维管理人年会
5 月 16 日,由上海市软件行业协会、上海市计算机行业协会指导, dbaplus社群主办的XCOPS智能运维管理人年会在广州盛大召开,活动汇聚500余名金融、政府、能源、教育、电信、交通等领域的行业专家。深算院崖山数据库受邀参会,系统性…...
服务端安全测试:OWASP ZAP使用
ZAP下载地址:https://www.zaproxy.org/download/ ZAP有两种扫描方式: 1、使用 OpenAPI / Swagger 地址进行扫描 2、ZAP Proxy + Postman 因为业务云没有添加swagger插件所以本次介绍第2种方式。 【第一步】设置 ZAP 的代理端口(默认是 127.0.0.1:8080) 成功安装并打…...
Amazon Q 从入门到精通 – 测试与重构
Amazon Q Developer 是亚马逊推出的一个专为专业开发人员设计的人工智能助手,旨在提升代码开发和管理效率。其主要功能包括代码生成、调试、故障排除和安全漏洞扫描,提供一站式代码服务。 众所周知,在软件开发领域,测试代码是软件…...
[CSS3]属性增强2
空间转换 使用transform属性实现元素在空间内的位移、旋转、缩放等效果 空间: 是从坐标轴角度定义的。x、y 和z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同。空间转换也叫3D转换 空间位移 使用translate实现元素空间位移效果 transform: translate3d(x…...
Go 语言 vs C+Lua(Skynet)游戏服务器方案对比分析
为啥挑这两个呢?因为两种技术分别对应CSP模型和Actor模型,都是经过时间检验的成熟且可靠的并发模型,问了很多地方,经过gpt整理得出如下报告。 从开发效率、运行性能、热更新扩展、云部署与水平扩展能力、多类型游戏支持等五个维度…...
ArcGIS Pro 3.4 二次开发 - 内容
环境:ArcGIS Pro SDK 3.4 .NET 8 文章目录 内容1 工程1.1 创建一个空工程1.2 使用指定名称创建新工程1.3 使用Pro的默认设置创建新工程1.4 使用自定义模板文件创建新工程1.5 使用 ArcGIS Pro 提供的模板创建工程1.6 打开现有工程1.7 获取当前工程1.8 获取当前工程的…...
java每日精进 5.19【Excel 导入导出】
基于 EasyExcel 实现 Excel 的读写操作,可用于实现最常见的 Excel 导入导出等功能。 Excel 导入导出功能涉及前后端协作,后端处理数据查询、文件生成和解析,前端提供用户交互和文件下载/上传界面。以下是全流程解析,分为导出流程…...
基于Elasticsearch的搜索引擎简介
## 一、Elasticsearch简介 Elasticsearch(简称ES)是一个开源的、分布式、RESTful风格的搜索和数据分析引擎,基于Apache Lucene开发。它能够实现对海量结构化和非结构化数据的实时存储、搜索和分析,广泛应用于全文检索、日志分析、…...
不同类型桥梁的无人机检测内容及技术难度
不同类型桥梁的无人机检测内容及技术难度 无人机桥梁检测的难度因桥梁类型、结构特点和所处环境的不同而存在显著差异。以下是针对梁桥、拱桥、斜拉桥、悬索桥等主要桥梁类型的无人机检测难度分析: 1. 梁桥(简支梁、连续梁) 检测难度&#x…...
数据结构实验10.1:内部排序的基本运算
文章目录 一,实验目的二,实验内容1. 数据生成与初始化2. 排序算法实现(1)直接插入排序(2)二分插入排序(3)希尔排序(4)冒泡排序(5)快速…...
java20
1.List集合 2.数据结构之栈,队列,数组,链表 3.ArrayList集合 4.LinkedList 5.泛型 注意:E...e是指若干个变量...
LLM笔记(九)KV缓存(2)
文章目录 1. 背景与动机2. 不使用 KV Cache 的情形2.1 矩阵形式展开2.2 计算复杂度 3. 使用 KV Cache 的优化3.1 核心思想3.2 矩阵形式展开3.3 计算复杂度对比 4. 总结5. GPT-2 中 KV 缓存的实现分析5.1 缓存的数据结构与类型5.2 在注意力机制 (GPT2Attention) 中使用缓存5.3 缓…...
将 Element UI 表格拖动功能提取为公共方法
为了在多个页面复用表格拖动功能,我们可以将其封装成以下两种形式的公共方法: 方案一:封装为 Vue 指令(推荐) 1. 创建指令文件 src/directives/tableDrag.js import interact from interactjs;export default {inse…...
项目中把webpack 打包改为vite 打包
项目痛点: 老vu e-cli1创建的项目,项目是ERP系统集成了很多很多管理,本地运行调试的时候,每次修改代码都需要等待3分钟左右的编译时间,严重影响开发效率. 解决方案: 采用vite构建项目工程 方案执行 第一步 使用vite脚手架构件一个项目,然后把build文件自定义的编译逻辑般到…...
Vue3 Element Plus 中el-table-column索引使用问题
在 Element Plus 的 el-table 组件中,使用 scope.index 是不准确的。正确的索引属性应该是 scope.$index。你的代码需要调整为: vue 复制 下载 <el-button type"primary" size"default" text click"onModifyClick(scope…...
盲盒一番赏小程序系统发展:创新玩法激发市场活力
盲盒一番赏小程序系统凭借其创新的玩法,在潮玩市场中脱颖而出,激发了市场的无限活力。它不仅保留了传统一番赏百分百中奖的特点,还结合线上平台的优势,开发出了更多新颖的玩法。 例如,小程序系统设置了赏品回收功能。…...
MySQL故障排查
目录 MySQL 单示例故障排查 故障现象一 故障现象二 故障现象三 故障现象四 故障现象五 故障现象六 故障现象七 故障现象八 MySQL主从复制排查 故障现象一 故障现象二 故障现象三 MySQL 优化 硬件方面 关于CPU 关于内存 关于磁盘 MySQL配置文件 核…...
微服务项目->在线oj系统(Java版 - 4)
相信自己,终会成功 目录 B端用户管理 C端用户代码 发送验证码: 验证验证码 退出登录 登录用户信息功能 用户详情与用户编辑 用户竞赛接口 用户报名竞赛 用户竞赛报名接口查询 用户信息列表 ThreadLocalUtil Hutool工具库 常用功能介绍 B端用户管理 进行列表显示与…...
DDoS与CC攻击:谁才是服务器的终极威胁?
在网络安全领域,DDoS(分布式拒绝服务)与CC(Challenge Collapsar)攻击是两种最常见的拒绝服务攻击方式。它们的目标都是通过消耗服务器资源,导致服务不可用,但攻击方式、威胁程度和防御策略存在显…...
旧物回收小程序,一键解决旧物处理难题
在快节奏的现代生活中,我们常常会面临旧物处理的困扰。扔掉觉得可惜,留着又占空间,而且处理起来还十分麻烦。别担心,我们的旧物回收小程序来啦,只需一键,就能轻松解决你的旧物处理难题! 这款小…...
uniapp小程序获取手机设备安全距离
utils.js let systemInfo null;export const getSystemInfo () > {if (!systemInfo) {systemInfo uni.getSystemInfoSync();// 补充安全区域默认值systemInfo.safeAreaInsets systemInfo.safeAreaInsets || {top: 0,bottom: 0,left: 0,right: 0};// 确保statusBarHei…...
小程序弹出层/抽屉封装 (抖音小程序)
最近忙于开发抖音小程序,最想吐槽的就是,既没有适配的UI框架,百度上还找不到关于抖音小程序的案列,我真的很裂开啊,于是我通过大模型封装了一套代码 效果如下 介绍 可以看到 这个弹出层是支持关闭和标题显示的…...
map与set封装
封装map和set一般分为6步: 1.封装map与set 2.普通迭代器 3.const 迭代器 4.insert返回值处理 5.map operator【】 6.key不能修改的问题 一.红黑树的改造 map与set的底层是通过红黑树来封装的,但是map与set的结点储存的值不一样,set只需要存…...
【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
文章目录 1. Hello World:第一个C程序2. 变量与数据类型3. 运算符4. 控制结构4.1 if-else 条件判断4.2 for 循环4.3 while 循环 5. 函数6. 数组7. 指针8. 结构体总结 📣按照国际惯例,首先声明:本文只是我自己学习的理解࿰…...
Manus AI 突破多语言手写识别技术壁垒:创新架构、算法与应用解析
在人工智能领域,手写识别技术作为连接人类自然书写与数字世界的桥梁,一直备受关注。然而,多语言手写识别面临诸多技术挑战,如语言多样性、书写风格差异、数据稀缺性等。Manus AI 作为该领域的领军者,通过一系列创新技术…...
数字图像处理——图像压缩
背景 图像压缩是一种减少图像文件大小的技术,旨在在保持视觉质量的同时降低存储和传输成本。随着数字图像的广泛应用,图像压缩在多个领域如互联网、移动通信、医学影像和卫星图像处理中变得至关重要。 技术总览 当下图像压缩JPEG几乎一统天下ÿ…...
SGLang和vllm比有什么优势?
环境: SGLang vllm 问题描述: SGLang和vllm比有什么优势? 解决方案: SGLang和vLLM都是在大语言模型(LLM)推理和部署领域的开源项目或框架,它们各自有不同的设计目标和优势。下面我综合目前…...
BeanFactory和FactoryBean的区别
目录 1、Spring-core 2、控制反转(IoC) 2.1、定义 2.2、实现方式 1、BeanFactory 2、ApplicationContext 3、FactoryBean BeanFactory是容器,管理所有Bean(包括FactoryBean),FactoryBean是被管理的Bean,只是它有…...
仓颉开发语言入门教程:搭建开发环境
仓颉开发语言作为华为为鸿蒙系统自研的开发语言,虽然才发布不久,但是它承担着极其重要的历史使命。作为鸿蒙开发者,掌握仓颉开发语言将成为不可或缺的技能,今天我们从零开始,为大家分享仓颉语言的开发教程,…...
火花生态【算力通】公测,助力全球闲置算力训练AI模型
近日,在数字化浪潮迅猛推进的大背景下,人工智能模型训练对算力的需求呈井喷式增长,而全球范围内大量算力资源却处于闲置状态,如何高效整合这些闲置算力,成为推动行业发展的关键命题。在此关键时刻,火花生态旗下的核心产品【算力通】(ComputePower)于 2025 年 5 月 10 日正式开启…...
OpenMV IDE 的图像接收缓冲区原理
OpenMV IDE 的图像接收缓冲区原理与 嵌入式图像处理系统 的数据流控制密切相关。以下是其核心工作原理的分步解析: 一、图像缓冲区架构 OpenMV 的整个图像处理流程基于 双缓冲(Double Buffering)机制,主要分为以下层级࿱…...
如何在LVGL之外的线程更新UI内容
前言 作为一个刚开始学习LVGL和嵌入式开发的新手,学会绘制一个界面之后,遇到了一个问题:在LVGL线程之外的线程,更新UI内容时,会导致程序崩溃。 1、问题分析 首先,需要了解LVGL的基本工作原理。LVGL&#…...
实景VR展厅制作流程与众趣科技实景VR展厅应用
实景VR展厅制作是一种利用虚拟现实技术将现实世界中的展览空间数字化并在线上重现的技术。 这种技术通过三维重建和扫描等手段,将线下展馆的场景、展品和信息以三维形式搬到云端数字空间,从而实现更加直观、立体的展示效果。在制作过程中,首…...
Regmap子系统之六轴传感器驱动-编写icm20607.c驱动
(一)在驱动中要操作很多芯片相关的寄存器,所以需要先新建一个icm20607.h的头文件,用来定义相关寄存器值。 #ifndef ICM20607_H #define ICM20607_H /*************************************************************** 文件名 : i…...
计算机网络-HTTP与HTTPS
文章目录 计算机网络网络模型网络OSITCP/IP 应用层常用协议HTTP报文HTTP状态码HTTP请求类型HTTP握手过程HTTP连接HTTP断点续传HTTPSHTTPS握手过程 计算机网络 网络模型 为了解决多种设备能够通过网络相互通信,解决网络互联兼容性问题。 网络模型是计算机网络中用于…...
Text2SQL在Spark NLP中的实现与应用:将自然语言问题转换为SQL查询的技术解析
概述 SQL 仍然是当前行业中最受欢迎的技能之一 免责声明:Spark NLP 中的 Text2SQL 注释器在 v3.x(2021 年 3 月)中已被弃用,不再使用。如果您想测试该模块,请使用 Spark NLP for Healthcare 的早期版本。 自新千年伊…...
Ubuntu20.04下使用dpkg方式安装WPS后,将WPS改为中文界面方法
Ubuntu20.04下使用dpkg方式安装WPS后,将WPS改为中文界面方法 说明方法 说明 Ubuntu20.04下使用dpkg方式安装WPS后,打开WPS后,发现界面是英文的,如有需要可以按照下面的方法将其改为中文界面。 方法 cd /opt/kingsoft/wps-offic…...
OpenCV CUDA 模块中的矩阵算术运算-----在频域(复数频谱)中执行逐元素乘法并缩放的函数mulAndScaleSpectrums()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 mulAndScaleSpectrums()是OpenCV CUDA模块中用于在频域(复数频谱)中执行逐元素乘法并缩放 的函数。 这个函数主要用于在…...
批量剪辑 + 矩阵分发 + 数字人分身源码搭建全技术解析,支持OEM
在互联网内容生态蓬勃发展的当下,企业与创作者对内容生产与传播效率的要求日益增长。批量剪辑、矩阵分发和数字人分身技术的融合,成为提升内容创作与运营效能的关键方案。从源码层面实现三者的搭建与整合,需要深入理解各功能技术原理…...
Spring Boot 与 RabbitMQ 的深度集成实践(三)
高级特性实现 消息持久化 在实际的生产环境中,消息的可靠性是至关重要的。消息持久化是确保 RabbitMQ 在发生故障或重启后,消息不会丢失的关键机制。它涉及到消息、队列和交换机的持久化配置。 首先,配置队列持久化。在创建队列时…...