202536 | KafKa生产者分区写入策略+消费者分区分配策略
KafKa生产者分区写入策略
1. 轮询分区策略(Round-Robin Partitioning)
轮询分区策略 是 Kafka 默认的分配策略,当消息没有指定 key
时,Kafka 会采用轮询的方式将消息均匀地分配到各个分区。
工作原理:
- 每次生产者发送消息时,Kafka 会轮流选择一个分区,将消息写入该分区。
- Kafka 会在所有分区之间进行循环,直到所有分区都被使用,然后从头开始。
图示:
代码示例(轮询分区):
ProducerRecord<String, String> record = new ProducerRecord<>("orders", null, "order details");
producer.send(record);
2. 随机分区策略(Random Partitioning)
随机分区策略 是 Kafka 的一种简单的分配策略,消息会随机分配到某个分区。该策略适用于负载均衡要求较低的场景。
工作原理:
- 每次生产者发送消息时,Kafka 会随机选择一个分区,将消息写入该分区。
图示:
代码示例(随机分区):
ProducerRecord<String, String> record = new ProducerRecord<>("orders", "key", "order details");
producer.send(record);
3. 按 Key 分区分配策略(Key-based Partitioning)
按 Key 分区分配策略 是 Kafka 中最常用的策略之一,生产者根据消息的 key
进行哈希计算,保证相同的 key
总是被分配到相同的分区。
工作原理:
- Kafka 会根据消息的
key
进行哈希计算,决定该消息应该写入哪个分区。 - 这样可以确保对于同一
key
的消息始终会写入同一个分区,保证了顺序性。
代码示例(按 Key 分区):
ProducerRecord<String, String> record = new ProducerRecord<>("orders", "user1", "order details");
producer.send(record);
4. 自定义分区策略(Custom Partitioning)
自定义分区策略 允许开发者完全控制消息如何分配到分区。用户通过实现 Kafka 提供的 Partitioner
接口来定义自己的分区策略。
工作原理:
- 生产者会通过
Partitioner
实现类,根据某些复杂的业务规则来决定消息应该写入哪个分区。 - 例如,基于订单金额、地区、用户类型等自定义的业务逻辑来决定分区。
代码示例(自定义分区器):
- 实现自定义分区器:
public class CustomPartitioner implements Partitioner {@Overridepublic void configure(Map<String, ?> configs) {// 配置初始化}@Overridepublic int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {// 使用订单金额决定分区int amount = Integer.parseInt(value.toString());if (amount < 100) {return 0; // 发送到分区 0} else if (amount < 500) {return 1; // 发送到分区 1} else {return 2; // 发送到分区 2}}@Overridepublic void close() {// 清理资源}
}
- 配置生产者使用自定义分区器:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("partitioner.class", "com.example.CustomPartitioner");KafkaProducer<String, String> producer = new KafkaProducer<>(props);
总结
Kafka 提供了多种分区写入策略来帮助生产者选择将消息写入哪个分区。不同的策略适用于不同的场景,选择适合的分区策略可以提高 Kafka 集群的性能、负载均衡及消息顺序性。
- 轮询分区策略:适用于负载均衡要求较高的场景。
- 随机分区策略:适用于负载均衡要求较低、消息不需要顺序的场景。
- 按 Key 分区策略:适用于需要保证顺序性的场景,如订单处理、用户行为追踪等。
- 自定义分区策略:适用于复杂业务需求,需要灵活控制消息分配的场景。
通过选择适合的分区策略,可以充分利用 Kafka 集群的能力,并优化性能和吞吐量。
KafKa消费者组Rebalance机制
在 Kafka 中,消费者组 Rebalance 机制 主要用于确保当消费者加入或离开消费者组时,消息的消费能够平稳地重新分配到新的消费者。Rebalance 机制触发时,会暂停消息消费,重新计算分区的分配策略。
Kafka 消费者组 Rebalance 机制
1. Rebalance 触发的情况
Rebalance 机制会在以下情况下被触发:
- 消费者加入:当新的消费者加入消费者组时,Kafka 会触发 Rebalance,重新分配分区。
- 消费者离开:当消费者退出或失去连接时,Kafka 会触发 Rebalance,将该消费者负责的分区重新分配给其他消费者。
- 分区变化:当分区的数量发生变化时(例如新增分区),Kafka 会触发 Rebalance 来调整分区分配。
2. Rebalance 的流程
Rebalance 的流程包括以下几个步骤:
- 消费者暂停消费:Rebalance 开始时,所有消费者会暂停消息的消费,直到新的分配完成。
- 分配策略执行:根据消费者和分区的数量,Kafka 会选择合适的分配策略(如 Round-robin、Range 或 Sticky)来重新分配分区。
- 消费者重新消费:分配完成后,消费者会继续从新分配的分区开始消费消息。
3. Rebalance 期间的状态
在 Rebalance 期间,Kafka 会将消息的消费暂停,这会导致一定的消费延迟。为了减少这种延迟,Kafka 提供了一些机制,如 Sticky 分配策略,可以尽量减少分区的重新分配。
4. 分配策略
分配策略:Kafka 提供了几种分区分配策略,包括 Range、Round-robin 和 Sticky,用于在 Rebalance 时确定如何将分区分配给消费者。
- Range:按分区的顺序将分区分配给消费者(适用于分区数量较少的情况)。
- Round-robin:轮询方式将分区分配给消费者(适用于负载均衡)。
- Sticky:尽量保持现有的分区分配,尽可能避免重新分配(在动态变化较少的情况下较好)。
图形示例:消费者组 Rebalance 机制
假设我们有一个 Kafka 主题 orders
,该主题有 3 个分区(P0
, P1
, P2
),而消费者组 order-consumer-group
有 3 个消费者(C1
, C2
, C3
)。以下是 Rebalance 发生前和发生后的分区分配。
1. Rebalance 之前的分配
- 分区
P0
被消费者C1
消费 - 分区
P1
被消费者C2
消费 - 分区
P2
被消费者C3
消费
2. 消费者离开触发 Rebalance
假设消费者 C3
离开了消费者组,Kafka 将触发 Rebalance,重新分配 P2
给剩余的消费者 C1
和 C2
。
3. Rebalance 后的分配
经过 Rebalance 后:
- 分区
P0
被消费者C1
消费 - 分区
P1
被消费者C2
消费 - 分区
P2
重新分配给消费者C1
通过 Rebalance 机制,Kafka 会确保每个分区都有消费者进行消费。虽然在 Rebalance 期间会暂停消费,但消息消费的整体连续性能够得到保障。
4. 代码示例:监听 Rebalance 事件
为了在 Rebalance 期间捕获分配变化,可以使用 ConsumerRebalanceListener
来监听分配和撤销分区事件。以下是代码示例:
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.serialization.StringDeserializer;import java.util.Arrays;
import java.util.Collection;public class KafkaConsumerRebalanceExample {public static void main(String[] args) {String topic = "orders";String groupId = "order-consumer-group";// 配置消费者属性Properties properties = new Properties();properties.put("bootstrap.servers", "localhost:9092");properties.put("group.id", groupId);properties.put("key.deserializer", StringDeserializer.class.getName());properties.put("value.deserializer", StringDeserializer.class.getName());// 创建消费者KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);// 注册 Rebalance 监听器consumer.subscribe(Arrays.asList(topic), new ConsumerRebalanceListener() {@Overridepublic void onPartitionsRevoked(Collection<TopicPartition> partitions) {// 在 Rebalance 前,消费者暂停消费的分区System.out.println("Rebalance: Partitions revoked: " + partitions);}@Overridepublic void onPartitionsAssigned(Collection<TopicPartition> partitions) {// 在 Rebalance 后,消费者开始消费分配的分区System.out.println("Rebalance: Partitions assigned: " + partitions);}});// 消费消息try {while (true) {ConsumerRecords<String, String> records = consumer.poll(1000);for (ConsumerRecord<String, String> record : records) {System.out.println("Consumed: " + record.value());}}} finally {consumer.close();}}
}
代码解释:
ConsumerRebalanceListener
:通过实现ConsumerRebalanceListener
接口,我们可以在 Rebalance 期间捕获分配和撤销分区事件。onPartitionsRevoked
:当分区被撤销时,打印被撤销的分区。onPartitionsAssigned
:当新分区被分配时,打印分配的分区。
5. Rebalance 的优化
- 使用 Sticky 分配策略:Sticky 策略尽量保持现有的分区分配不变,减少 Rebalance 的影响。
- 减少消费者频繁加入或离开:避免频繁的消费者加入或离开操作,这样可以减少 Rebalance 的次数。
- 合理配置消费者超时:通过调整消费者超时配置(如
session.timeout.ms
和max.poll.interval.ms
)来避免消费者因超时被错误地移除,导致 Rebalance 频繁发生。
总结
Kafka 的消费者组 Rebalance 机制能够在消费者数量变化时,自动调整分区的分配,保证每个分区始终有消费者进行消费。虽然 Rebalance 会带来短暂的暂停,但它是保证 Kafka 消费者组高可用性和负载均衡的关键机制。通过合理的配置和优化,可以减少 Rebalance 带来的延迟和性能损失。
消费者分区分配策略
了解了!Kafka 消费者分区分配策略主要有三种:Range(范围分配)、Round-Robin(轮询分配) 和 Sticky(粘性分配)。每种策略都有不同的分配方式,适用于不同的场景。下面将详细介绍这三种策略,并配合图形进行说明。
1. 范围分配策略(Range)
范围分配策略(Range) 会将分区按顺序分配给消费者,确保每个消费者获得一个连续的分区范围。这意味着如果有 3 个消费者和多个分区,消费者会依次分配到连续的分区,直到所有分区都被分配完。
工作原理:
- Kafka 按顺序将分区分配给消费者,消费者处理的分区是连续的。
- 适用于消费者数量少于分区数量的场景。
示例:
假设有 6 个分区(P0
到 P5
),3 个消费者(C1
, C2
, C3
)。分配结果如下:
代码示例:
consumer.subscribe(Arrays.asList("orders"), new RangePartitioner());
2. 轮询分配策略(Round-Robin)
轮询分配策略(Round-Robin) 会轮流将分区分配给消费者,确保每个消费者获得大致相同数量的分区。这种策略确保负载均衡,并且分区之间的分配不一定是连续的。
工作原理:
- Kafka 会轮流将每个分区分配给消费者,确保负载均衡。
- 每个消费者获得的分区数量接近相等。
示例:
假设有 6 个分区(P0
到 P5
),3 个消费者(C1
, C2
, C3
)。分配结果如下:
代码示例:
consumer.subscribe(Arrays.asList("orders"), new RoundRobinPartitioner());
3. 粘性分配策略(Sticky)
粘性分配策略(Sticky) 尝试在每次 Rebalance 时保持现有分配的最大稳定性,尽可能减少分区的重新分配。这意味着即使有新的消费者加入或离开,Kafka 会尽量保持旧有消费者的分区分配不变。
工作原理:
- Kafka 尝试将分区分配给已经分配过的消费者,减少消费者之间的频繁变化。
- 适用于对稳定性要求高的场景,可以减少 Rebalance 的影响。
示例:
假设有 6 个分区(P0
到 P5
),3 个消费者(C1
, C2
, C3
)。使用粘性分配策略,假设 C1
和 C2
已经被分配了一些分区,C3
还未分配。粘性策略会尽量保留已有的分配情况:
代码示例:
consumer.subscribe(Arrays.asList("orders"), new StickyPartitioner());
总结
- 范围分配策略(Range):
- 将分区按顺序分配给消费者,确保每个消费者的分区是连续的。
- 适用于消费者数量少于分区数量的情况,能够保持一定的顺序性。
- 轮询分配策略(Round-Robin):
- 将分区均匀地轮流分配给每个消费者,确保负载均衡。
- 适用于负载均衡,确保每个消费者处理大致相同数量的分区。
- 粘性分配策略(Sticky):
- 尝试保持消费者分区分配的稳定性,减少 Rebalance 时的分配变化。
- 适用于减少 Rebalance 对消费者影响的场景。
通过这三种分配策略,Kafka 可以根据不同的业务需求和性能要求灵活地进行分区分配,确保消费者组内的高效和稳定工作。
KafKa的副本机制
Kafka的副本机制通过多副本存储确保高可用性和数据可靠性。每个Partition都有多个副本,分布在不同的Broker上。
代码示例 - 创建带副本的Topic:
# 创建名为"orders"的topic,3个分区,每个分区2个副本
kafka-topics.sh --create \--bootstrap-server localhost:9092 \--replication-factor 2 \--partitions 3 \--topic orders
2. ISR机制与数据同步
ISR(In-Sync Replicas)是当前与Leader保持同步的副本集合。
代码示例 - 检查ISR状态:
kafka-topics.sh --describe \--bootstrap-server localhost:9092 \--topic orders# 输出示例:
# Topic: orders Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
# Topic: orders Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3
# Topic: orders Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1
3. 写入确认机制
Producer可以通过acks参数控制数据可靠性级别。
代码示例 - 不同acks配置:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");// acks=0: 不等待确认
props.put("acks", "0");
Producer<String, String> producer0 = new KafkaProducer<>(props);// acks=1: 仅Leader确认(默认)
props.put("acks", "1");
Producer<String, String> producer1 = new KafkaProducer<>(props);// acks=all: 等待ISR中所有副本确认
props.put("acks", "all");
Producer<String, String> producerAll = new KafkaProducer<>(props);
4. Leader选举与故障转移
当Leader宕机时,Controller会从ISR中选举新的Leader。
代码示例 - 模拟Leader切换:
# 1. 查看当前Leader
kafka-topics.sh --describe \--bootstrap-server localhost:9092 \--topic orders# 2. 停止当前Leader Broker
kafka-server-stop.sh broker1.properties# 3. 再次检查,观察Leader已切换
kafka-topics.sh --describe \--bootstrap-server localhost:9092 \--topic orders
5. 副本同步过程详解
Follower副本通过以下流程与Leader保持同步:
重要配置参数:
# 副本同步相关配置
replica.lag.time.max.ms=30000 # Follower最大允许落后时间
min.insync.replicas=1 # 最小ISR副本数(影响可用性)
unclean.leader.election.enable=false # 是否允许非ISR副本成为Leader
6. 生产环境最佳实践
-
推荐配置:
// Producer端 props.put("acks", "all"); // 最高可靠性 props.put("retries", 3); // 自动重试// Broker端 min.insync.replicas=2 // 至少2个副本确认 default.replication.factor=3 // 默认3副本
-
监控指标:
# 查看副本状态 kafka-topics.sh --describe --under-replicated-partitions \--bootstrap-server localhost:9092# 监控ISR变化 kafka-configs.sh --entity-type topics --describe \--all --bootstrap-server localhost:9092
通过以上机制,Kafka在保证高吞吐量的同时,实现了数据的可靠存储和高可用性。副本机制是Kafka架构的核心,理解这些原理对于正确配置和使用Kafka至关重要。
相关文章:
202536 | KafKa生产者分区写入策略+消费者分区分配策略
KafKa生产者分区写入策略 1. 轮询分区策略(Round-Robin Partitioning) 轮询分区策略 是 Kafka 默认的分配策略,当消息没有指定 key 时,Kafka 会采用轮询的方式将消息均匀地分配到各个分区。 工作原理: 每次生产者发…...
《自动驾驶封闭测试场地建设技术要求》 GB/T 43119-2023——解读
目录 一、标准框架与核心内容 二、重点技术要求 三、实施要点与建议 四、实施时间与参考依据 原文链接:国家标准|GB/T 43119-2023 (发布:2023-09-07;实施:2024-01-01) 一、标准框架与核心内容 适用范围…...
【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂
每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” ✍️绪论: 本章主要介绍了 Qt 中 QGroupBox 与 QTabWidget 控件。QGroupBox 是带标题的分组框,能容纳其他控件,有标题、对齐方式、是否…...
【SpringBoot】从环境准备到创建SpringBoot项目的全面解析.
本篇博客给大家带来的是SpringBoot的知识点, 包括Idea的干净卸载… 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要…...
基于ESP32控制的机器人摄像头车
DIY Wi-Fi 控制的机器人摄像头车:从零开始的智能探索之旅 在当今科技飞速发展的时代,机器人技术已经逐渐走进了我们的生活。今天,我将带你一起探索如何制作一个 Wi-Fi 控制的机器人摄像头车,它不仅可以远程操控,还能通…...
Excel图表 vs 专业可视化工具:差距有多大?内容摘要
你是不是还在用 Excel 做图表,觉得它已经够用了?但你知道吗,Excel 和专业的可视化工具之间其实有着巨大的差距!Excel 是办公必备,但它的图表功能真的能满足复杂的数据展示需求吗?而那些听起来高大上的专业可…...
Nacos源码—7.Nacos升级gRPC分析三
大纲 5.服务变动时如何通知订阅的客户端 6.微服务实例信息如何同步集群节点 5.服务变动时如何通知订阅的客户端 (1)服务注册和服务订阅时发布的客户端注册和订阅事件的处理 (2)延迟任务的执行引擎源码 (3)处理客户端注册和订阅事件时发布的服务变动和服务订阅事件的处理 (…...
量化学习DAY2-开始批量提交alpha!
量化学习第二天笔记 一、World Quant平台的Alpha概念 在World Quant平台中,alpha本质上是一个数学公式,它是**operator(操作)与Data(数据)**的组合。 (一)Data相关 Data…...
【Qwen3_ 4b lora xinli 】 task完成实践记录
task 我需要 基于llamafactory框架选取基本上相同的数据集用lora微调Qwen3_ 4b两次并保存lora参数然后分别合并这两个lora参数到基座模型。再换个数据集上接着进行微调。并且保存新的lora参数,然后我们匹配这里面的特征值和特征向量,如果这两个新的lora…...
文旅田园康养小镇规划设计方案PPT(85页)
1. 项目背景与定位 背景:位于长三角经济圈,依托安吉丰富的自然与文化资源,旨在打造集康养、度假、文化体验于一体的综合小镇。 定位:成为浙北地区知名的康养旅游目的地,融合“一溪两岸”规划理念,实现全面…...
[Windows] 能同时打开多个图片的图像游览器JWSEE v2.0
[Windows] 能同时打开多个图片的图像游览器JWSEE 链接:https://pan.xunlei.com/s/VOPpO86Hu3dalYLaZ1ivcTGIA1?pwdhckf# 十多年前收藏的能同时打开多个图片的图像游览器JWSEE v2.0,官网已没有下载资源。 JWSEE v2.0是乌鲁木齐金维图文信息科技有限公司…...
低成本自动化改造技术锚点深度解析
执行摘要 本文旨在深入剖析四项关键的低成本自动化技术,这些技术为工业转型提供了显著的运营和经济效益。文章将提供实用且深入的指导,涵盖老旧设备联网、AGV车队优化、空压机系统智能能耗管控以及此类项目投资回报率(ROI)的严谨…...
23盘古石决赛
一,流量分析 1. 计算流量包文件的SHA256值是?[答案:字母小写][★☆☆☆☆] 答案:2d689add281b477c82b18af8ab857ef5be6badf253db1c1923528dd73b3d61a9 解压出来流量包计算 2. 流量包长度在“640 - 1279”之间的的数据包总共有多少…...
C语言—指针3
1. 数组名的理解 观察以下代码 可以观察到pa指向的地址与数组首元素地址相同,那么可以说明数组就是首元素地址吗? 这种说法是不严谨的,观察以下代码: 程序输出的结果为16,此时的arr表示的是整个数组的大小。 观察以…...
操作系统 第2章节 进程,线程和作业
一:多道程序设计 1-多道程设计的目的 for:提高吞吐量(作业道数/处理时间),我们可以从提高资源的利用率出发 2-单道程序设计缺点: 设备的利用率低,内存的利用率低,处理机的利用率低 比如CPU去访问内存,CPU空转.内存等待CPU访问也是没有任何操作的.要是有多个东西要去访问不冲…...
数字化转型-4A架构之数据架构
系列文章 数字化转型-4A架构(业务架构、应用架构、数据架构、技术架构) 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数据架构 Data Architecture(DA) 1. 定义 数据架构,是组织管理数据资产的科学之…...
Java中的反射
目录 什么是反射 反射的核心作用 反射的核心类 反射的基本使用 获取Class对象 创建对象 操作字段(Field) 调用方法(Method) 反射的应用场景 反射的优缺点 优点 缺点 示例:完整反射操作 总结 什么是反射 …...
LINUX CFS算法解析
文章目录 1. Linux调度器的发展历程2. CFS设计思想3. CFS核心数据结构3.1 调度实体(sched_entity)3.2 CFS运行队列(cfs_rq)3.3 任务结构体中的调度相关字段 4. 优先级与权重4.1 优先级范围4.2 权重映射表 (prio_to_weight[])优先级计算4.3.1. static_prio (静态优先级)4.3.2. n…...
内网渗透——红日靶场三
目录 一、前期准备 二、外网探测 1.使用nmap进行扫描 2.网站信息收集 3.漏洞复现(CVE-2021-23132) 4.disable_function绕过 5.反弹shell(也,并不是) 6.SSH登录 7.权限提升(脏牛漏洞) 8.信息收集 9.上线msf 三…...
The 2024 ICPC Kunming Invitational Contest G. Be Positive
https://codeforces.com/gym/105386/problem/G 题目: 结论: 从0开始每四个相邻数的异或值为0 代码: #include<bits/stdc.h> using namespace std; #define int long long void solve() {int n;cin >> n;if(n1||n%40){cout &…...
CommunityToolkit.Mvvm详解
属性可视化 给一个属性添加ObservableProperty就可以可视化了 [ObservableProperty] private string currentNameInfo;[ObservableProperty] private string currentClassInfo;[ObservableProperty] private string currentPhoneInfo;xaml中只需要绑定大写的属性就可以了 &l…...
密码学--AES
一、实验目的 1、完成AES算法中1轮加密和解密操作 2、掌握AES的4个基本处理步骤 3、理解对称加密算法的“对称”思想 二、实验内容 1、题目内容描述 (1)利用C语言实现字节代换和逆向字节代换,字节查S盒代换 (2)利…...
操作系统的初步了解
目录 引言:什么是操作系统? 一、设计操作系统的目的 二、操作系统是做什么的: 操作系统主要有四大核心任务: 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢? 1. 什么是操作…...
边缘计算:技术概念与应用详解
引言 随着物联网(IoT)、5G 和人工智能(AI)的快速发展,传统的云计算架构在处理海量数据和实时计算需求时逐渐显现出瓶颈。边缘计算(Edge Computing)作为一种新兴的计算范式,通过将计…...
C++进阶--红黑树的实现
文章目录 红黑树的实现红黑树的概念红黑树的规则红黑树的效率 红黑树的实现红黑树的结构红黑树的插入变色单旋(变色)双旋(变色) 红黑树的查找红黑树的验证 总结:结语 很高兴和大家见面,给生活加点impetus&a…...
[C++类和对象]类和对象的引入
面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用来逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情分成不同的对象,靠对象之间完成交互 类的引入 C语言结构体中只能定义变量,在C中,结构体不仅仅可以定义变量,而且可以定义函…...
YOLOv12云端GPU谷歌免费版训练模型
1.效果 2.打开 https://colab.research.google.com/?utm_sourcescs-index 3.上传代码 4.解压 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.进入yolov12-main目录 %cd /content/yolov12-main/yolov12-main 6.安装依赖库 !pip install -r requirements.…...
课程审核流程揭秘:确保内容合规与用户体验
业务流程 为什么课程审核通过才可以发布呢? 这样做为了防止课程信息有违规情况,课程信息不完善对网站用户体验也不好,课程审核不仅起到监督作用,也是 帮助教学机构规范使用平台的手段。 如果流程复杂用工作流 说明如下ÿ…...
【LangChain高级系列】LangGraph第一课
前言 我们今天直接通过一个langgraph的基础案例,来深入探索langgraph的核心概念和工作原理。 基本认识 LangGraph是一个用于构建具有LLMs的有状态、多角色应用程序的库,用于创建代理和多代理工作流。与其他LLM框架相比,它提供了以下核心优…...
ATH12K 驱动框架
ATH12K 驱动框架 ath12k驱动框架及模块交互逻辑详解1. 总体架构2. 关键数据结构2.1 核心数据结构2.2 虚拟接口数据结构3. 硬件抽象层(HAL)4. 无线管理接口(WMI)5. 主机目标通信(HTC)6. 数据路径(DP)6.1 发送路径(TX)6.2 接收路径(RX)7. 多链路操作(MLO)8. 初始化和工作流程8.1 …...
CMA认证对象?CMA评审依据,CMA认证好处
CMA认证对象 CMA(中国计量认证,China Metrology Accreditation)的认证对象主要是第三方检测机构和实验室,包括: 独立检测机构:如环境监测站、产品质量检验所、食品药品检测机构等。 企业内部实验室&#…...
依赖关系-根据依赖关系求候选码
关系模式R(U, F), U{},F是R的函数依赖集,可以将属性分为4类: L: 仅出现在依赖集F左侧的属性 R: 仅出现在依赖集F右侧的属性 LR: 在依赖集F左右侧都出现的属性 NLR: 在依赖集F左右侧都未出现的属性 结论1: 若X是L类…...
解决应用程序在JAR包中运行时无法读取类路径下文件的问题
问题情景 java应用程序在IDE运行正常,打成jar包后执行却发生异常: java.io.FileNotFoundException: class path resource [cert/sync_signer_pri_test.key] cannot be resolved to absolute file path because it does not reside in the file system:…...
第十六届蓝桥杯B组第二题
当时在考场的时候这一道题目 无论我是使用JAVA的大数(BIGTHGER)还是赛后 使用PY 都是没有运行出来 今天也是突发奇想在B站上面搜一搜 看了才知道这也是需要一定的数学思维 通过转换 设X来把运算式精简化 避免运行超时 下面则是代码 public class lanba…...
龙虎榜——20250509
上证指数今天缩量,整体跌多涨少,走势处于日线短期的高位~ 深证指数今天缩量小级别震荡,大盘股表现更好~ 2025年5月9日龙虎榜行业方向分析 一、核心行业方向 军工航天 • 代表个股:航天南湖、天箭科技、襄阳轴承。 • 驱动逻辑…...
node提示node:events:495 throw er解决方法
前言 之前开发的时候喜欢使用高版本,追求新的东西,然后回头运行一下之前的项目提示如下 项目技术栈:node egg 报错 node:events:495 throw er; // Unhandled error event ^ Error: ENOENT: no such file or directory, scandir F:\my\gi…...
OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)
目录 1. Ubuntu中编译 2. NDK环境配置 3. 编译 4. 安装 这部分主要是为了得到libudev(因为原来的libudev已经不更新了),eudev的下载地址如下: https://github.com/gentoo/eudev 相应的代码最好是在Ubuntu中先编译通过&#…...
[AI ][Dify] Dify Tool 插件调试流程详解
在使用 Dify 进行插件开发时,调试是必不可少的环节。Dify 提供了远程服务调试的能力,让开发者可以快速验证插件功能和交互逻辑。本文将详细介绍如何配置环境变量进行插件调试,并成功在插件市场中加载调试状态的插件。 一、调试环境配置 在 Dify 的插件调试过程中,我们需要…...
learning ray之ray强化学习/超参调优和数据处理
之前我们掌握了Ray Core的基本编程,我们已经学会了如何使用Ray API。现在,让我们将这些知识应用到一个更实际的场景中——构建一个强化学习项目,并且利用Ray来加速它。 我们的目标是,通过Ray的任务和Actor,将一个简单…...
gpu硬件,gpu驱动,cuda,CUDA Toolkit,cudatoolkit,cudnn,nvcc概念解析
组件角色依赖关系GPU硬件无CUDA编程模型/平台需NVIDIA GPU和驱动CUDA Toolkit开发工具包(含NVCC、库等)需匹配GPU驱动和CUDA版本cuDNN深度学习加速库需CUDA ToolkitNVCCCUDA代码编译器包含在CUDA Toolkit中 GPU硬件: 硬件层面的图形处理器&…...
【C/C++】范围for循环
📘 C 范围 for 循环详解(Range-based for loop) 一、什么是范围 for 循环? 范围 for 循环(Range-based for loop) 是 C11 引入的一种简化容器/数组遍历的方式。它通过自动调用容器的 begin() 和 end() 方法…...
嵌入式开发学习(第二阶段 C语言基础)
C语言:第4天笔记 内容提要 流程控制 C语句数据的输入与输出 流程控制 C语句 定义 C程序是以函数为基础单位的。一个函数的执行部分是由若干条语句构成的。C语言都是用来完成一定操作的任务。C语句必须依赖于函数存在。 C程序结构 C语句分类 1.控制语句 作…...
大物重修之浅显知识点
第一章 质点运动学 例1 知识点公式如下: 例2 例3 例4 例5 例6 第四章 刚体的转动 例1 例2 例3 例4 例5 例6 第五章 简谐振动 例1 例2 例3 第六章 机械波 第八章 热力学基础 第九章 静电场 第十一章 恒定磁场…...
随笔-近况
好久没写了,手都生了。 我写的东西可以分为两类:技术和随笔。当然技术没有我自己创新的,都是些在解决问题过程中查询了很多资料,经过验证后,可以在项目上使用的。但是自从 deepseek 出现后,问题一下子简单…...
赤色世界 陈默传 第一章 另一个陈默
赤色世界 陈默传 第一章 另一个陈默 陈默在一片纯白的空间中缓缓睁开眼睛。没有声音,没有光影的变化,只有无尽的空白包围着他,仿佛整个世界被擦去了所有的色彩和形状。他站在那里,赤脚踩在这片空无一物的地面上,却能感…...
isp流程介绍(yuv格式阶段)
一、前言介绍 前面两章里面,已经分别讲解了在Raw和Rgb域里面,ISP的相关算法流程,从前面文章里面可以看到,在Raw和Rgb域里面,很多ISP算法操作,更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...
关于大数据的基础知识(一)——定义特征结构要素
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(一&a…...
C++(1):整数常量
目录 一、进制表示 二、后缀指定类型 三、示例与注意 四、总结表 一、进制表示 十进制(Decimal) 格式:无前缀,由数字 0-9 组成。 示例:123、42。 注意:不能以 0 开头(否则会被视为八进制&a…...
C# NX二次开发:宏录制实战讲解(第一讲)
今天要讲的是关于NX软件录制宏操作的一些案例。 下面讲如何在NX软件中复制Part体的录制宏。 NXOpen.Session theSession NXOpen.Session.GetSession(); NXOpen.Part workPart theSession.Parts.Work; NXOpen.Part displayPart theSession.Parts.Display; NXOpe…...
C++:书架
【描述】 John最近买了一个书架用来存放奶牛养殖书籍,但书架很快被存满了,只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000),每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000),N头奶牛的总高度为S。书架高度为B(1 ≤ B ≤ S <…...