基于kraft部署kafka集群

kafka介绍

Apache Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
Kafka是一个拥有高吞吐、可持久化、可水平扩展,支持流式数据处理等多种特性的分布式消息流处理中间件,采用分布式消息发布与订阅机制,在日志收集、流式数据传输、在线/离线系统分析、实时监控等领域有广泛的应用。
在这里插入图片描述

基于kraft部署集群

集群节点规划

主机名IP 地址角色node-idOS
kafka01192.168.72.31broker/controller1Ubuntu22.04
kafka02192.168.72.32broker/controller2Ubuntu22.04
kafka03192.168.72.33broker/controller3Ubuntu22.04

准备3个节点,每个节点同时作为broker和controller运行。

集群架构如下:
在这里插入图片描述

基础环境配置

以下操作在所有节点执行。

配置主机名

hostnamectl set-hostname kafka01
hostnamectl set-hostname kafka02
hostnamectl set-hostname kafka03

配置hosts解析,提前部署zookeeper集群:

cat > /etc/hosts <<EOF
192.168.72.31 kafka01
192.168.72.32 kafka02
192.168.72.33 kafka03
EOF

安装java环境

apt update -y
apt install -y openjdk-21-jdk

创建Kafka用户

sudo groupadd kafka
sudo useradd -m -s /bin/bash -g kafka kafka
sudo passwd kafka

安装kafka

wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
tar -zxvf kafka_2.13-3.9.0.tgz -C /opt
ln -s /opt/kafka_2.13-3.9.0 /opt/kafka

配置环境变量

cat > /etc/profile.d/kafka.sh <<'EOF'
export KAFKA_HOME=/opt/kafka
export PATH=$KAFKA_HOME/bin:$PATH
EOF
source /etc/profile

修改配置文件

为broker设置角色,以便他们也可以成为控制器。使用配置属性文件应用broker配置,包括角色设置。broker配置根据角色有所不同。KRaft 提供了三个示例broker配置属性文件。

  • /opt/kafka/config/kraft/broker.properties 有一个broker角色的示例配置,如果正在配置broker节点,那么需要选择该配置文件
  • /opt/kafka/config/kraft/controller.properties 有一个控制器角色的示例配置,如果正在配置控制器节点,那么需要选择该配置文件
  • /opt/kafka/config/kraft/server.properties 有一个组合角色的示例配置,如果正在配置broker和控制器节点,那么需要选择该配置文件

可以根据这些示例属性文件来配置broker,本示例使用 server.properties 配置。

修改kafka01节点配置文件

cp /opt/kafka/config/kraft/server.properties{,.bak}
cat <<EOF > /opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=1
num.partitions=6
default.replication.factor=2
min.insync.replicas=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:9093,3@kafka03:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kafka01:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/data/kafka/kraft-combined-logs
log.retention.hours=168 
EOF

修改kafka02节点配置文件

cp /opt/kafka/config/kraft/server.properties{,.bak}
cat <<EOF > /opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=2
num.partitions=6
default.replication.factor=2
min.insync.replicas=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:9093,3@kafka03:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kafka02:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/data/kafka/kraft-combined-logs
log.retention.hours=168
EOF

修改kafka03节点配置文件

cp /opt/kafka/config/kraft/server.properties{,.bak}
cat <<EOF > /opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=3
num.partitions=6
default.replication.factor=2
min.insync.replicas=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:9093,3@kafka03:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kafka03:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/data/kafka/kraft-combined-logs
log.retention.hours=168 
EOF

参数说明

  • process.roles: 一个节点可以充当 代理 或 控制器 或 两者。本示例指明这个节点可以同时是一个 kafka 代理和一个 kraft 控制器节点。
  • node.id:作为集群中的节点 ID,识别这是哪个代理以及哪个 Kraft 控制器节点。
  • num.partitions:创建topic时默认分区数,建议broker节点的倍数
  • default.replication.factor:分区默认副本数,controller与broker 3节点混合部署时,由于只能故障一个节点,建议设为2,设为3依然只能故障一个broker。
  • min.insync.replicas:控制写入操作必须有至少多少个副本处于同步状态才能成功执行,通常建议设置为副本数 - 1。
  • offsets.topic.replication.factor:用于设置 Kafka 内部主题 __consumer_offsets 的副本因子。
  • transaction.state.log.replication.factor:决定 Kafka 内部主题 __transaction_state 的副本因子
  • transaction.state.log.min.isr:定义 __transaction_state 主题的最小同步副本数(ISR,In-Sync Replicas)。
  • controller.quorum.voters: 用于指示所有可用的 kraft 控制器。这里指明将有 3 个 kraft 控制器节点在端口 9093上运行。
  • listeners:在这里我们指明代理将使用 9092 端口,而 kraft 控制器将使用 19092 端口
  • advertised.listeners:用于配置 Kafka Broker 如何向客户端(生产者或消费者)暴露其地址和端口。
  • controller.listener.names:这里的控制器监听器名称设置为 CONTROLLER
  • listener.security.protocol.map:在这里添加连接安全详细信息
  • log.dirs:这是 Kafka 存储数据的日志目录
  • log.retention.hours:用于控制主题分区日志数据保留时间的配置参数,默认168小时(7天)

建立集群 ID

需要为新 Kafka 版本形成一个集群 ID,集群 ID 在集群中的所有节点之间相同,在第一个节点执行

/opt/kafka/bin/kafka-storage.sh random-uuid > /opt/kafka/config/kraft/cluster.id
scp /opt/kafka/config/kraft/cluster.id kafka02:/opt/kafka/config/kraft/
scp /opt/kafka/config/kraft/cluster.id kafka03:/opt/kafka/config/kraft/

使用集群 ID 建立存储,在所有节点执行

export kafka_cluster_id=$(cat /opt/kafka/config/kraft/cluster.id)
kafka-storage.sh format -t $kafka_cluster_id -c /opt/kafka/config/kraft/server.properties

修改目录权限

mkdir -p /opt/kafka /data/kafka
sudo chown -R kafka:kafka /opt/kafka*
sudo chown -R kafka:kafka /data/kafka

启动kafka服务

建立 Kafka 服务启动定义

cat <<EOF > /etc/systemd/system/kafka.service
[Unit]
Description=Kafka
After=network.target[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-abnormal
LimitNOFILE=10000000
LimitCORE=infinity
LimitNPROC=infinity
LimitMEMLOCK=infinity[Install]
WantedBy=multi-user.target
EOF

启动kafka服务

systemctl daemon-reload
systemctl enable --now kafka.service
systemctl status kafka.service 

查看集群状态

描述运行时状态

Kafka 提供工具来帮助您调试在 KRaft 模式下运行的集群。

可以使用kafka-metadata-quorum 工具描述集群元数据分区的运行时状态,并指定一个带有 --bootstrap-server 选项的 Kafka 代理或一个带有 --bootstrap-controller 选项的 KRaft 控制器。

例如,以下命令指定一个代理并显示元数据法定人数的摘要:

kafka-metadata-quorum.sh --bootstrap-server kafka01:9092 describe --status

示例输出如下

root@kafka01:~# kafka-metadata-quorum.sh --bootstrap-server kafka01:9092 describe --status
ClusterId:              ZgI_5pGNQcOgbMNT1Vqqxw
LeaderId:               2
LeaderEpoch:            77
HighWatermark:          1677
MaxFollowerLag:         0
MaxFollowerLagTimeMs:   350
CurrentVoters:          [{"id": 1, "directoryId": null, "endpoints": ["CONTROLLER://kafka01:9093"]}, {"id": 2, "directoryId": null, "endpoints": ["CONTROLLER://kafka02:9093"]}, {"id": 3, "directoryId": null, "endpoints": ["CONTROLLER://kafka03:9093"]}]
CurrentObservers:       []

该脚本列出了集群状态的基本信息。在显示的输出中,您可以看到节点 2 被选为领导者,所有三个节点 ([1,2,3]) 都在投票池中并同意该决定。

您可以使用 --bootstrap-controller 选项指定一个控制器。这在代理不可访问时非常有用。

kafka-metadata-quorum.sh --bootstrap-controller kafka01:9093 describe --status

调试日志段

kafka-dump-log 工具可用于调试集群元数据目录中的日志段和快照。该工具将扫描提供的文件并解码元数据记录。例如,以下命令解码并打印第一个日志段中的记录:

kafka-dump-log.sh --cluster-metadata-decoder --files \
/data/kafka/kraft-combined-logs/__cluster_metadata-0/00000000000000000000.log 

创建topic主题

通过运行创建一个名为 first-topic 的主题,将复制因子设置为 2 确保该主题将在至少两个节点上可用。

kafka-topics.sh --create --topic first-topic \
--bootstrap-server kafka01:9092 --replication-factor 2

然后,运行 kafka-topics.sh 脚本以查看分区在节点上的排列情况:

kafka-topics.sh --describe --bootstrap-server kafka01:9092 --topic first-topic

示例输出如下

root@kafka01:~# kafka-topics.sh --describe --bootstrap-server kafka01:9092 --topic first-topic
Topic: first-topic      TopicId: g_CJm0fRR_-ztyoLeNlg2g PartitionCount: 6       ReplicationFactor: 2    Configs: min.insync.replicas=1Topic: first-topic      Partition: 0    Leader: 3       Replicas: 3,1   Isr: 3,1        Elr:    LastKnownElr: Topic: first-topic      Partition: 1    Leader: 1       Replicas: 1,2   Isr: 1,2        Elr:    LastKnownElr: Topic: first-topic      Partition: 2    Leader: 2       Replicas: 2,3   Isr: 2,3        Elr:    LastKnownElr: Topic: first-topic      Partition: 3    Leader: 3       Replicas: 3,2   Isr: 3,2        Elr:    LastKnownElr: Topic: first-topic      Partition: 4    Leader: 2       Replicas: 2,1   Isr: 2,1        Elr:    LastKnownElr: Topic: first-topic      Partition: 5    Leader: 1       Replicas: 1,3   Isr: 1,3        Elr:    LastKnownElr: 
root@kafka01:~# 

可以看到每个分区都有其领导者、两个副本和两个同步副本集(ISR)。分区领导者是一个代理节点,负责将分区数据提供给客户端,而副本仅保留副本。如果副本节点在过去十秒内与领导者保持同步,则默认情况下被视为 ISR。此时间间隔可以根据每个主题进行配置。

生产消息

现在已经创建了一个主题,使用 kafka-console-producer.sh 脚本生成其消息。运行以下命令以启动生产者:

kafka-console-producer.sh --topic first-topic --bootstrap-server kafka01:9092

broker正在等待输入文本消息。输入 Hello World!并按 ENTER。提示将如下所示:

>Hello World!
>

生产者现在正在等待下一条消息,这意味着之前的消息已成功传递给 Kafka。可以输入任意数量的消息进行测试。要退出生产者,请按 CTRL+C

消费消息

需要一个消费者来从主题中读取消息。Kafka 提供了一个简单的消费者,名为 kafka-console-consumer.sh。通过运行以下命令来执行它:

kafka-console-consumer.sh --topic first-topic --from-beginning \
--bootstrap-server kafka01:9092

您将看到从主题中读取的消息:

Hello World!
...

模拟节点故障

在第三个 Kafka 节点上,通过运行以下命令停止服务:

sudo systemctl stop kafka

然后,通过运行来描述主题:

kafka-topics.sh --describe --bootstrap-server kafka01:9092 --topic first-topic

输出将类似于此:

root@kafka01:~# kafka-topics.sh --describe --bootstrap-server kafka01:9092 --topic first-topic
Topic: first-topic      TopicId: g_CJm0fRR_-ztyoLeNlg2g PartitionCount: 6       ReplicationFactor: 2    Configs: min.insync.replicas=1Topic: first-topic      Partition: 0    Leader: 1       Replicas: 3,1   Isr: 1  Elr:    LastKnownElr: Topic: first-topic      Partition: 1    Leader: 1       Replicas: 1,2   Isr: 1,2        Elr:    LastKnownElr: Topic: first-topic      Partition: 2    Leader: 2       Replicas: 2,3   Isr: 2  Elr:    LastKnownElr: Topic: first-topic      Partition: 3    Leader: 2       Replicas: 3,2   Isr: 2  Elr:    LastKnownElr: Topic: first-topic      Partition: 4    Leader: 2       Replicas: 2,1   Isr: 2,1        Elr:    LastKnownElr: Topic: first-topic      Partition: 5    Leader: 1       Replicas: 1,3   Isr: 1  Elr:    LastKnownElr: 
root@kafka01:~# 

之前所有在节点3上为leader角色的分区,已经将其他节点的follower分区切换为leader分区。尽管节点 3 被列为副本,但由于不可用,它在 ISR 集合中缺失。

一旦它重新加入集群,它将与其他节点同步并尝试恢复其之前的位置。

再试着阅读来自 first-topic 的消息:

kafka-console-consumer.sh --topic first-topic --from-beginning \
--bootstrap-server kafka01:9092

你会看到它们像往常一样可访问:

Hello World!
...

由于副本的存在,前两个节点接管并为消费者提供服务。现在可以在第三台服务器上启动 Kafka:

sudo systemctl start kafka

在这一步中,已经看到 Kafka 如何减轻集群中节点不可用的情况。

在节点之间迁移数据

在这一步中,您将学习如何在 Kafka 集群中迁移主题。当向现有集群添加带有主题的节点时,Kafka 不会自动将任何分区转移到该节点,这可能是您想要做的。这对于移除节点也很有用,因为现有的分区不会自动移动到剩余的节点。

Kafka 提供了一个名为kafka-reassign-partitions.sh的脚本,可以生成、执行和验证迁移计划。使用它来创建一个将first-topic的分区移动到前两个节点的计划。

首先,您需要定义哪些主题应该被移动。脚本接受一个包含主题定义的 JSON 文件,因此请创建并打开它以进行编辑:

vi topics-to-move.json

添加以下行:

topics-to-move.json

{"topics": [{"topic": "first-topic"}],"version": 1
}

topics下,您定义一个引用first-topic的对象。完成后,保存并关闭文件。

运行以下命令生成迁移计划,将 kafka01替换为指向其中一个 Kafka 节点的域名:

kafka-reassign-partitions.sh --bootstrap-server kafka01:9092 \
--topics-to-move-json-file topics-to-move.json --broker-list "1,2" --generate

您将 "1,2" 传递给 --broker-list,表示目标经纪人的 ID。

输出将类似于此:

Current partition replica assignment
{"version":1,"partitions":[{"topic":"first-topic","partition":0,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":1,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":2,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"first-topic","partition":3,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"first-topic","partition":4,"replicas":[3,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":5,"replicas":[2,1],"log_dirs":["any","any"]}]}Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"first-topic","partition":0,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":1,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":2,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":3,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":4,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":5,"replicas":[1,2],"log_dirs":["any","any"]}]}

该脚本总共生成了两个计划,分别描述了当前和提议的分区布局。如果您需要稍后恢复更改,将提供第一个计划。请注意第二个计划,将其存储在一个名为 migration-plan.json 的单独文件中。创建并打开该文件进行编辑:

vi migration-plan.json

添加第二个执行计划:

migration-plan.json

{"version":1,"partitions":[{"topic":"first-topic","partition":0,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":1,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":2,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":3,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":4,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":5,"replicas":[2,1],"log_dirs":["any","any"]}]}

保存并关闭文件。然后,运行以下命令来执行它:

kafka-reassign-partitions.sh --bootstrap-server kafka01:9092 \
--reassignment-json-file migration-plan.json --execute

输出将是:

Current partition replica assignment{"version":1,"partitions":[{"topic":"first-topic","partition":0,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"first-topic","partition":1,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":2,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"first-topic","partition":3,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"first-topic","partition":4,"replicas":[3,2],"log_dirs":["any","any"]},{"topic":"first-topic","partition":5,"replicas":[2,1],"log_dirs":["any","any"]}]}Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for first-topic-0,first-topic-1,first-topic-2,first-topic-3,first-topic-4,first-topic-5

脚本指出迁移已经开始。要查看迁移的进度,请传入 --verify

kafka-reassign-partitions.sh --bootstrap-server kafka01:9092 \
--reassignment-json-file migration-plan.json --verify

经过一段时间,输出将类似于此:

Status of partition reassignment:
Reassignment of partition first-topic-0 is completed.
Reassignment of partition first-topic-1 is completed.
Reassignment of partition first-topic-2 is completed.
Reassignment of partition first-topic-3 is completed.
Reassignment of partition first-topic-4 is completed.
Reassignment of partition first-topic-5 is completed.Clearing broker-level throttles on brokers 1,2,3
Clearing topic-level throttles on topic first-topic

现在可以描述 first-topic 以验证代理 3 上没有分区:

kafka-topics.sh --describe --bootstrap-server kafka01:9092 --topic first-topic

输出将如下所示:

Topic: first-topic      TopicId: 4kVImoFNTQeyk3r2zQbdvw PartitionCount: 6       ReplicationFactor: 2    Configs: segment.bytes=1073741824Topic: first-topic      Partition: 0    Leader: 2       Replicas: 2,1   Isr: 1,2Topic: first-topic      Partition: 1    Leader: 1       Replicas: 1,2   Isr: 1,2Topic: first-topic      Partition: 2    Leader: 2       Replicas: 2,1   Isr: 2,1Topic: first-topic      Partition: 3    Leader: 1       Replicas: 1,2   Isr: 1,2Topic: first-topic      Partition: 4    Leader: 2       Replicas: 2,1   Isr: 2,1Topic: first-topic      Partition: 5    Leader: 1       Replicas: 1,2   Isr: 2,1

只有代理 12 作为副本和 ISR 存在,这意味着迁移成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/495417.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

debug diagnostic tool 调试.net的错误

下载安装debug diagnostic tool debug diagnostic tool 设置 因为现在都是多cpu,所以cpu可以设置低一点,就抓去数据 微软教程

京东科技基于 Apache SeaTunnel 复杂场景适配 #数据集成

作者&#xff1a;宁诚、陈伟强 京东科技架构师 技术背景与挑战 技术背景 2023年第一季度&#xff0c;京东科技的营销与数据资产部开始规划数据洞察系统产品&#xff0c;主要服务于京东科技营销体系的业务团队。该系统的分析内容涵盖了京东集团在商城、金融和物流等各个业务系…

基于Spring Boot的工商局商家管理系统

一、系统背景与意义 随着市场经济的不断发展&#xff0c;商家数量日益增多&#xff0c;工商局对商家的管理需求也日益复杂。传统的管理方式存在诸多弊端&#xff0c;如信息不透明、管理效率低下等。因此&#xff0c;开发一种高效、便捷、智能化的工商局商家管理系统显得尤为重…

论文DiffBP: generative diffusion of 3D molecules for target protein binding

研究背景 在药物发现中&#xff0c;生成能与特定蛋白质结合的分子至关重要但极具挑战。以往的工作大多采用自回归方式逐个生成原子的元素类型和三维坐标&#xff0c;但在真实分子系统中&#xff0c;原子间的相互作用是全局性的&#xff0c;基于能量考虑&#xff0c;概率建模应基…

如何在谷歌浏览器中进行网络速度测试

在当今高度依赖互联网的时代&#xff0c;网络速度的快慢直接影响着我们的工作、学习和娱乐等各个方面。因此&#xff0c;了解如何准确测试网络速度成为了每个网民应掌握的基本技能。谷歌浏览器作为一款广泛使用的浏览器&#xff0c;提供了便捷且高效的网络速度测试功能。本文将…

JAVAweb学习日记(三)Ajax

一、Ajax Axios&#xff1a; 入门&#xff1a; 案例&#xff1a; 二、前后端分离开发 介绍&#xff1a; APIfox&#xff1a; Apifox 前端工程化&#xff1a; 环境准备&#xff1a; Vue项目-创建&#xff1a; Vue项目-配置端口&#xff1a; Vue项目-开发流程&#xff1a; Vue…

聊天社交管理系统 Java 源码,构建个性化社交空间

社交网络已经是我们生活中非常重要的一部分&#xff0c;一个高效、个性化的聊天社交管理系统都能极大提升用户体验。 多种消息通知类型&#xff0c;支持新消息通知&#xff0c;图标闪烁、声音提醒和弹窗提醒。 1.音视频&#xff1a; 支持二人聊天&#xff0c;有语音聊天、桌面…

Shion(时间追踪工具) v0.13.2

Shion 是一款多功能的时间追踪软件&#xff0c;旨在帮助用户更好地管理时间。它提供了多种自定义数据卡片&#xff0c;如github风格的一年概览、30天单项数据柱状图和每日24小时活动展示&#xff0c;以便用户清晰地了解自己的日常生活。Shion还具备自动监听程序使用时间的功能&…

USDZ格式轻松转OBJ

USDZ格式简介 USDZ&#xff0c;作为苹果公司与PIXAR工作室联手推出的新型AR文件格式&#xff0c;正逐步成为增强现实&#xff08;AR&#xff09;领域中的佼佼者。USDZ文件不仅支持丰富的3D模型数据&#xff0c;还能嵌入材质、动画及交互信息&#xff0c;为用户带来沉浸式的AR体…

100V宽压输入反激隔离电源,适用于N道沟MOSFET或GaN或5V栅极驱动器,无需光耦合

说明: PC4411是一个隔离的反激式控制器在宽输入电压下具有高效率范围为2.7V至100V。它直接测量初级侧反激输出电压波形&#xff0c;不需要光耦合器或第三方用于调节的绕组。设置输出只需要一个电阻器电压。PC4411提供5V栅极驱动驱动外部N沟道MOSFET的电压或GaN。内部补偿和软启…

Linux的启动流程

目录 1、 加电开机&#xff0c;启动BIOS进行自检。 2、读取MBR(Master Boot Record, 主要启动记录区)。 3、加载GRUB&#xff08;GRand Unified Bootloader&#xff09;菜单。 4、加载内核&#xff08;kernel&#xff09;和驱动程序 5、运行systemd进程&#xff0c;加载如…

打造高效的 LaTeX 公式编辑器

在科研和工程领域&#xff0c;LaTeX 是最常用的公式排版工具之一。为了帮助用户更加高效地编辑和管理 LaTeX 公式&#xff0c;我们开发了一个集成了实时预览、公式管理和多格式导出功能的公式编辑器。本文将介绍这个工具的核心功能&#xff0c;并展示部分实现代码。 核心功能 …

OpenAI 12天发布会:AI革命的里程碑@附35页PDF文件下载

在人工智能的浪潮中&#xff0c;OpenAI的12天发布会无疑是2024年科技界的一场盛宴。从12月5日开始&#xff0c;OpenAI连续12天每天发布一个新应用或功能&#xff0c;标志着AI技术的又一次飞跃。本文将梳理这些激动人心的发布&#xff0c;带你一探究竟。 OpenAI发布会概览 Ope…

水电站视频智能监控系统方案设计与技术应用方案

一、背景需求 水电站作为国家重要的能源基地&#xff0c;其安全运行对于保障能源供应和社会稳定具有重要意义。然而&#xff0c;传统的人工监控方式存在着诸多问题&#xff0c;如人力成本高、监控范围有限、反应不及时等。因此&#xff0c;水电站急需引进一种先进的视频智能监控…

Batch_Size对神经网络训练效率的影响:一个PyTorch实例分析

一、Batch_Size简介 想象一下&#xff0c;你是一位老师&#xff0c;正在教一群学生学习数学。在这个比喻中&#xff0c;每个学生都是神经网络训练中的一个数据样本&#xff0c;而你教学生的方式就是通过“批量”来进行的。这里的“批量”就是我们所说的batch_size。 现在&…

Flutter组件————FloatingActionButton

FloatingActionButton 是Flutter中的一个组件&#xff0c;通常用于显示一个圆形的按钮&#xff0c;它悬浮在内容之上&#xff0c;旨在吸引用户的注意力&#xff0c;并代表屏幕上的主要动作。这种按钮是Material Design的一部分&#xff0c;通常放置在页面的右下角&#xff0c;但…

机器学习基础 衡量模型性能指标

目录 1 前言 ​编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error)&#xff1a; 1.2 过拟合(overfitting): 训练误差小&#xff0c;测试误差大 1.3 欠拟合(underfitting)&#xff1a;训练误差大&#xff0c;测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…

langchain使用FewShotPromptTemplate出现KeyError的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Arduino驱动DS18B20测量环境温度

DS18B20是一款高精度的单总线数字温度传感器&#xff0c;具体参数如下表所示&#xff1a; 参数名称 参数特性 测温范围 -55~125℃ 测量精度 在-10~85℃范围内的误差为0.5℃ 分辨率 9~12位数字信号&#xff0c;分辨率分别为0.5℃、0.25℃、0.125℃和0.0625℃ 通信方式 …

ffmpeg之播放一个yuv视频

播放YUV视频的步骤 初始化SDL库&#xff1a; 目的&#xff1a;确保SDL库正确初始化&#xff0c;以便可以使用其窗口、渲染和事件处理功能。操作&#xff1a;调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频&#xff1a; 目的&#xff1a;…