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

KRaft (Kafka 4.0) 集群配置指南(超简单,脱离 ZooKeeper 集群)还包含了简化测试指令的脚本!!!

docker-compose方式部署kafka集群

Kafka 4.0 引入了 KRaft 模式(Kafka Raft Metadata Mode),它使 Kafka 集群不再依赖 ZooKeeper 进行元数据管理。KRaft 模式简化了 Kafka 部署和管理,不需要额外配置 ZooKeeper 服务,使得集群的配置和运维更加高效。

本文将介绍如何配置一个基于 KRaft 模式的 Kafka 集群,步骤简单明了。我们将从零开始,介绍如何配置 Kafka 集群并进行测试,包括遇到的权限问题以及如何通过自定义工具简化测试命令。

一、KRaft 模式简介

KRaft(Kafka Raft Metadata Mode)是 Kafka 在 4.0 版本引入的一个新特性,旨在替代传统的依赖 ZooKeeper 的架构。在 KRaft 模式下,Kafka 使用内建的 Raft 协议来管理元数据和集群协调,而不需要外部的 ZooKeeper 服务。

主要特点:

  • 不再依赖 ZooKeeper。

  • 使用 Kafka 自带的 Raft 协议处理元数据和控制器选举。

  • 简化了集群配置,降低了维护成本。

二、集群配置

1. 配置主机

在本例中,我们使用了 3 台主机,每台主机上启动一个 Kafka 容器,形成一个简单的 KRaft 模式集群。

  • 主机 1 (IP: 172.16.0.106):配置为 Kafka 节点 0。

  • 主机 2 (IP: 172.16.0.107):配置为 Kafka 节点 1。

  • 主机 3 (IP: 172.16.0.108):配置为 Kafka 节点 2。

2. Kafka 配置

docker-compose.yml 中,我们配置了 3 个 Kafka 节点的容器,采用 KRaft 模式,并设置了必要的环境变量来启动集群。
这是第一个节点:0

services:kafka-0:image: bitnami/kafka:4.0.0container_name: kafka-0ports:- "9092:9092"- "9093:9093"environment:- KAFKA_CFG_NODE_ID=0- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@172.16.0.106:9093,1@172.16.0.107:9093,2@172.16.0.108:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv- KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.106:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- /data/kafka/kafka-0:/bitnami/kafka

 这是第一个节点::1

services:kafka-1:image: bitnami/kafka:4.0.0container_name: kafka-1ports:- "9092:9092"- "9093:9093"environment:- KAFKA_CFG_NODE_ID=1- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@172.16.0.106:9093,1@172.16.0.107:9093,2@172.16.0.108:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv- KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.107:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- /data/kafka/kafka-0:/bitnami/kafka

 这是第三个节点:2

services:kafka-2:image: bitnami/kafka:4.0.0container_name: kafka-2ports:- "9092:9092"- "9093:9093"environment:- KAFKA_CFG_NODE_ID=0- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@172.16.0.106:9093,1@172.16.0.107:9093,2@172.16.0.108:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv- KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.108:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- /data/kafka/kafka-0:/bitnami/kafka

 

每个 Kafka 节点的配置都类似,只是 KAFKA_CFG_NODE_IDKAFKA_CFG_ADVERTISED_LISTENERS 不同。

3. 数据持久化

通过 Docker 的 volumes 配置,我们将每个容器的数据目录挂载到宿主机上,从而实现数据持久化。如下所示:

volumes:- /data/kafka/kafka-0:/bitnami/kafka

这意味着 Kafka 容器中的数据会存储在宿主机的 /data/kafka/kafka-0 目录中,即使容器停止或删除,数据也不会丢失。

三、遇到的权限问题及解决方法

在配置过程中,我遇到了一个权限问题:容器内的脚本无法删除临时文件或执行一些操作。

解决方法:

  1. 容器内操作权限问题:由于容器内没有 sudo 权限,导致无法执行一些文件删除操作。解决方案是在宿主机上执行相关操作,使用 docker exec 执行命令时确保使用正确的权限。

  2. 文件系统权限:挂载到容器的宿主机目录 /data/kafka/kafka-0 必须确保有正确的读写权限,否则 Kafka 容器无法正常写入数据。确保宿主机上的目录拥有正确的权限,例如使用 chmod 命令修改目录权限。

四、集群测试

测试 Kafka 集群是否成功部署,我们使用了以下步骤:

  1. 启动 Kafka 容器:使用 docker-compose up 分别启动集群。

  2. 这个问题!Kafka 在 Docker 容器中运行时,通常会以 1001 这个用户 ID(UID)来启动,而宿主机上的目录默认可能是 root 用户所有。这就导致了 Kafka 在容器内无法对挂载的目录进行写入或修改,因为容器用户与宿主机目录的所有者不同。

    解决方法:

    你可以通过更改宿主机目录的所有者为容器内的 Kafka 用户(即 UID 1001),这样容器就能够正确地访问和修改该目录。

    执行以下命令:

sudo chown -R 1001:1001 ./kafka_data

这将会把宿主机上的 ./kafka_data 目录的所有者更改为 UID 1001,即容器内的 Kafka 用户。这样,容器就可以在该目录下创建所需的文件了。

为什么要这么做?

  • Kafka 容器默认使用 1001 用户运行,而宿主机的目录默认是 root 用户拥有。

  • Docker 容器内的进程没有 root 权限,因此无法修改宿主机上的目录(除非你将宿主机目录的权限改为所有人都能写入)。

  • 使用 chown -R 1001:1001 将目录所有者改为容器内 Kafka 用户,使容器能够访问和操作该目录。

 

  1. 检查 Kafka 主题:使用

    kafka-topics.sh --list --bootstrap-server localhost:9092

    命令查看集群中的所有主题。

  2. 创建测试主题:通过

    kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1

    创建一个名为 test 的测试主题。

docker exec -it kafka-0 bash
kafka-topics.sh --create --topic test --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
kafka-topics.sh --list --bootstrap-server localhost:9092

五、自定义工具简化命令

为了方便测试,我编写了一个自定义工具脚本 kafka-tools.sh,通过简单的命令执行 Kafka 常用操作:

1.宿主机(容器外部)执行:

vim kafka-tools.sh

#!/bin/bash# Kafka操作函数# 列出所有主题
kt() {kafka-topics.sh --list --bootstrap-server localhost:9092
}# 生产消息到指定主题
kp() {if [ -z "$1" ]; thenecho "请指定主题名称!"return 1fikafka-console-producer.sh --broker-list localhost:9092 --topic "$1"
}# 消费指定主题的消息
kc() {if [ -z "$1" ]; thenecho "请指定主题名称!"return 1fikafka-console-consumer.sh --bootstrap-server localhost:9092 --topic "$1" --from-beginning
}# 删除指定主题
kd() {if [ -z "$1" ]; thenecho "请指定主题名称!"return 1fikafka-topics.sh --bootstrap-server localhost:9092 --topic "$1" --delete
}# 查看指定主题描述
kdesc() {if [ -z "$1" ]; thenecho "请指定主题名称!"return 1fikafka-topics.sh --bootstrap-server localhost:9092 --describe --topic "$1"
}# 创建一个新主题
create_topic() {if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ]; thenecho "请提供主题名称、分区数和副本数!"return 1fikafka-topics.sh --create --topic "$1" --bootstrap-server localhost:9092 --partitions "$2" --replication-factor "$3"
}# 提示
echo "✅ Kafka 自定义工具函数已经加载成功(使用方式如下):"
echo "  kt --list            ----查看所有主题"
echo "  kp my-topic          ----使用主题生产"
echo "  kc my-topic          ----使用主题消费"
echo "  kd my-topic          ----删除主题"
echo "  kdesc my-topic       ----主题描述"
echo "  create_topic my-topic 3 1 ----创建主题 (例如:3个分区,1个副本)"

 

 2.将.sh文件移动到容器内部:

docker cp kafka-tools.sh kafka-0:/tmp/kafka-tools.sh
docker cp kafka-tools.sh kafka-1:/tmp/kafka-tools.sh
docker cp kafka-tools.sh kafka-2:/tmp/kafka-tools.sh

docker cp kafka-tools.sh kafka-0:/tmp/kafka-tools.sh
docker exec -it kafka-0 bash
source /tmp/kafka-tools.sh

 

3.进入容器 
docker exec -it kafka-0 bash
4.执行:
 source /tmp/kafka-tools.sh

 提示:则执行成功
生命周期是每次容器内执行后(容器不死,方便测试,复杂参数的命令还是需要自己去写或者完善该脚本)

使用方法:

  • kt --list:查看所有 Kafka 主题。

  • kp <topic>:生产消息到指定主题。

  • kc <topic>:消费指定主题的消息。

  • kd <topic>:删除指定的主题。

  • kdesc <topic>:查看指定主题的描述。

通过这些简化命令,我可以在容器内快速执行 Kafka 操作,而不需要记住每个命令的详细参数。

加载成功后,你可以直接在容器内使用简化命令,极大地方便了测试和管理 Kafka 集群。

六、总结

本文介绍了如何配置 KRaft 模式的 Kafka 4.0 集群,并解决了容器内的权限问题。通过自定义工具脚本,我们将常用的 Kafka 操作简化为一系列简单的命令,使得集群管理更加高效。

KRaft 模式是 Kafka 4.0 中的重要特性,它的引入让 Kafka 不再依赖 ZooKeeper,简化了集群的部署和管理。希望本文能帮助你顺利部署并管理 KRaft 模式的 Kafka 集群。

相关文章:

KRaft (Kafka 4.0) 集群配置指南(超简单,脱离 ZooKeeper 集群)还包含了简化测试指令的脚本!!!

docker-compose方式部署kafka集群 Kafka 4.0 引入了 KRaft 模式&#xff08;Kafka Raft Metadata Mode&#xff09;&#xff0c;它使 Kafka 集群不再依赖 ZooKeeper 进行元数据管理。KRaft 模式简化了 Kafka 部署和管理&#xff0c;不需要额外配置 ZooKeeper 服务&#xff0c;…...

安全月演讲比赛活动讲话稿

同志们&#xff1a;在公司上下万众一心创建“无违章企业”的大形势下&#xff0c;由公司工会、团委举办的“安全与我”演讲比赛&#xff0c;经过紧张激烈的预赛&#xff0c;今天进行正式决赛。 从预赛的38名选手中脱颖而出的10名选手&#xff0c;今天将再次登台献技&#xff0c…...

实时操作系统:航空电子系统的安全基石还是创新枷锁?

引言&#xff1a;航空电子系统的进化论 在航空电子技术的漫长发展历程中&#xff0c;飞行器控制系统实现从机械仪表到数字计算机的跨越&#xff0c;这一进步具有深远意义。现代战机以超过 2 马赫的速度突破音障&#xff0c;无人机群在复杂电磁环境下完成自主编队&#xff0c;这…...

windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper

1.下载 https://archive.apache.org/dist/kafka/3.9.0/kafka_2.12-3.9.0.tgz2.配置使用 KRaft 模式 2.1 修改 Kafka 的配置文件 cd D:\data\bigdata\kafka_2.12-3.9.0\config\kraft 修改 server.properties # 设置 Kafka 数据日志存储目录 log.dirsD:\\data\\bigdata\\kaf…...

SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)

1 目的 物料(例如晶圆)加工在设备中的自动化管理与控制是实现工厂自动化的关键要素。本标准针对半导体制造环境中与设备内部物料处理相关的通信需求进行了规范。本标准规定了在加工单元接收到的指定材料所应适用的加工方法(例如Etch腔室需要Run哪支Recipe)。它阐述了物料加工的…...

Web 架构之高可用基础

文章目录 引言一、无状态服务设计&#xff08;Session 托管至 Redis 集群&#xff09;1. 概念与原理2. 代码示例&#xff08;Python Flask 应用&#xff09;3. 常见问题及解决办法 二、数据库读写分离&#xff08;MySQL 主从 ProxySQL 流量分发&#xff09;1. 概念与原理2. 配…...

巧用python之--模仿PLC(PLC模拟器)

工作中用到了VM(VisionMaster4.3)有时候需要和PLC打交道,但是PLC毕竟是别人的,不方便修改别人的程序,这时候需要一个灵活的PLC模拟器是多么好呀! 先说背景: PLC型号 汇川Easy521: Modbus TCP 192.168.1.10:502 在汇川Easy521中Modbus保持寄存器D寄存器 ,在modbus协议中 0-4区…...

Nginx +Nginx-http-flv-module 推流拉流

这两天为了利用云服务器实现 Nginx 进行OBS Rtmp推流&#xff0c;Flv拉流时发生了诸多情况&#xff0c;记录实现过程。 环境 OS&#xff1a;阿里云CentOS 7.9 64位Nginx&#xff1a;nginx-1.28.0Nginx-http-flv-module&#xff1a;nginx-http-flv-module-1.2.12 安装Nginx编…...

DRF+Vue项目线上部署:腾讯云+Centos7.6

1.服务器选购和配置 1.1.服务器选购 1.2.防火墙/安全组配置 80是HTTP的端口&#xff0c;443是HTTPS的端口&#xff0c;22是远程连接的端口&#xff0c;3306是mysql的端口。 1.3.远程连接软件&#xff08;tabby&#xff09;配置 下载&#xff1a;https://github.com/Eugeny/ta…...

大疆无人机(全系列,包括mini)拉流至电脑,实现直播

参考视频 【保姆级教程】大疆无人机rtmp推流直播教程_哔哩哔哩_bilibili VLC使用教程&#xff1a; VLC工具使用指南-CSDN博客 目录 实现效果&#xff1a; 电脑端 ​编辑 ​编辑 无人机端 VLC拉流 分析 实现效果&#xff1a; (实验机型&#xff1a;大疆mini4kRC-N2遥控器、大…...

Spring普通配置类 vs 自动配置类-笔记

1.简要版 Configuration和Bean&#xff0c;既可以用于普通配置类&#xff0c;也可以用于自动配置类。二者的区别和联系是什么呢&#xff1f; 区别&#xff1a; Configuration和Bean是Spring框架本身的注解&#xff0c;用于定义配置类和生成Bean。而自动配置通常是Spring Boo…...

解决Ceph 14.2.22 Nautilus版本监视器慢操作问题的实践指南

解决Ceph Nautilus版本监视器慢操作问题的实践指南 问题背景问题现象问题分析1. 确认监视器状态2. 检查慢操作详情3. 深入分析操作状态 问题原因解决方案立即解决方法 总结 在生产环境中执行任何操作前&#xff0c;请确保已备份重要数据&#xff0c;并在测试环境中验证解决方案…...

Go使用Gin写一个对MySQL的增删改查服务

首先用SQL创建一个包含id、name属性的users表 create table users (id int auto_incrementprimary key,name varchar(255) null );查询所有用户信息&#xff1a; func queryData(db *sql.DB, w http.ResponseWriter) {rows, err : db.Query("SELECT * FROM users"…...

数字孪生医疗:构建患者特异性数字孪生体路径探析

引言 数字孪生技术正逐渐成为医疗健康领域的一场革命性力量,它通过创建人体器官和系统的数字复制品,为疾病预测、诊断和个性化治疗开辟了前所未有的可能性。在心血管疾病领域,数字孪生技术的应用尤为引人注目,特别是对于扩张型心肌病(Dilated Cardiomyopathy,DCM)这一常…...

rust程序静态编译的两种方法总结

1. 概述 经过我的探索&#xff0c;总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证)&#xff0c;实测方法一性能比方法二好&#xff0c;现总结如下&#xff0c;希望能够帮到你. 2.方法一 2.1 添加配置文件 在项目的同级文件夹下新…...

threejs 添加css3d标签 vue3

如图所示&#xff0c;给收费站标注标签。步骤如下&#xff1a; 一、引入 import {CSS3DRenderer,CSS3DObject, } from "three/examples/jsm/renderers/CSS3DRenderer"; 二、 //一、申明css3渲染器 const label3DRenderer ref()//二、创建css3d渲染器--将渲染器加…...

【git】git fsmonitor

git fsmonitor 是 Git 提供的一个特性&#xff0c;用于提高 Git 的性能&#xff0c;尤其是在处理文件状态检查&#xff08;git status&#xff09;时。它通过文件系统监控服务&#xff08;如 Windows 上的 FileSystemWatcher 或 Linux 上的 inotify&#xff09;来跟踪文件系统的…...

开源照片管理系统PhotoPrism的容器化部署与远程管理配置

文章目录 前言1.关于PhotoPrism2.本地部署PhotoPrism3.PhotoPrism简单使用4. 安装内网穿透5.配置PhotoPrism公网地址6. 配置固定公网地址 前言 你是不是用手机拍照片的时候无所谓拍了多少张&#xff0c;但在整理的时候却要占用超多时间&#xff1f;别怕&#xff0c;今天给大家…...

macOS Python 环境配置指南

1. 检查现有 Python 环境 python3 --version # 检查 Python 3 版本 pip3 --version # 检查 pip 版本 2. 安装 pyenv&#xff08;Python 版本管理工具&#xff09; # 使用 Homebrew 安装 pyenvbrew install pyenv# 配置 pyenv 环境变量&#xff08;添加到 ~/.zshrc&#…...

如何阅读、学习 Git 核心源代码 ?

学习 Git 核心源代码是一个深入理解版本控制系统底层原理的绝佳方式。以下是分阶段的系统性建议&#xff0c;结合了实践经验和学习路径设计&#xff1a; 一、前置知识储备 C语言进阶 重点掌握指针操作&#xff08;尤其是二级指针和函数指针&#xff09;结构体嵌套与内存对齐…...

学习黑客 MAC 地址深入了解

在江湖之中&#xff0c;每位少侠既有“门派”加身&#xff0c;也需持有“令牌”通行。MAC地址便是我被师门铁订在骨血里的“先天武功心法”&#xff0c;铸于出厂之时&#xff0c;终身不变&#xff0c;只有破阵高手才能暗度陈仓才能改写&#xff1b;而IP地址则是我行走江湖的“后…...

长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南

引言&#xff1a;凌晨三点的告警 "张工&#xff01;生产库又告警了&#xff01;"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式&#xff0c;排查发现某核心表的年龄值&#xff08;Age&#xff09;已突破20亿大关。经过一夜奋战&#xff0c…...

WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁

一&#xff1a;开发背景 随着消费升级和AI技术进步&#xff0c;传统玩具的机械式互动已难以满足市场需求。语音控制芯片的引入使玩具实现了从被动玩耍到智能交互的跨越式发展。通过集成高性价比的语音识别芯片&#xff0c;现代智能玩具不仅能精准响应儿童指令&#xff0c;还能实…...

一文读懂Python之requests模块(36)

一、requests模块简介 requests模块是python中原生的一款基于网络请求的模块&#xff0c;功能强大&#xff0c;简单便捷且高效 &#xff0c;该模块可以模拟浏览器发送请求&#xff0c;主要包括指定url、发起请求、获取响应数据和持久化存储&#xff0c;包括 GET、POST、PUT、…...

Java 异常

Java 异常的体系结构 java.lang.Throwable ├── Error&#xff08;严重错误&#xff0c;程序无法处理&#xff09; │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... └── Exception&#xff08;程序可以处理的异常&#xff09;├── Check…...

智能外呼机器人的核心优势

随着人工智能技术的快速发展&#xff0c;智能外呼机器人已成为企业降本增效的重要工具。其通过整合语音识别&#xff08;ASR&#xff09;、自然语言处理&#xff08;NLP&#xff09;、语音合成&#xff08;TTS&#xff09;等技术&#xff0c;不仅替代了大量重复性人工劳动&…...

n8n - 开放灵活的智能自动化工作流平台

n8n - 开放灵活的智能自动化工作流平台 在当今数字化转型的大潮中,自动化已成为众多企业提升效率、优化流程的关键手段。而在众多自动化工具中,n8n以其开放灵活且强大的功能脱颖而出,成为技术团队的可靠选择。今天,我们将深入了解n8n这个开源自动化工作流平台,探索其广泛…...

window 显示驱动开发-处理内存段(二)

KMD 不需要在其内存段中指定 GPU 可用的所有视频内存资源。 但是&#xff0c;KMD 必须指定 VidMm 在系统上运行的所有进程中管理的所有内存资源。 例如&#xff1a; 实现固定函数管道的顶点着色器微代码可以驻留在 GPU 地址空间中&#xff0c;但在 VidMm 管理的内存之外&#x…...

RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理

导读 在机器人领域&#xff0c;让机器人像人类一样理解视觉信息并做出精准行动&#xff0c;一直是科研人员努力的方向。今天&#xff0c;我们要探讨的统一视频行动模型&#xff08;Unified Video Action Model&#xff0c;UVA&#xff09;&#xff0c;就像给机器人装上了一个“…...

代码随想录算法训练营第60期第三十天打卡

大家好&#xff0c;今天我们要走进一个全新的章节&#xff0c;这一章叫做贪心算法&#xff0c;前面我们讲的是回溯算法&#xff0c;那究竟什么是贪心算法呢&#xff1f;我们一起走进今天的内容。 第一部分贪心的理论基础 其实大家看这个名字估计也会有一定了解&#xff0c;贪心…...

腾讯云:数字世界的“量子熔炉”与硅基文明引擎​

​​一、算力拓扑学&#xff1a;重新定义空间的计算密度​​ 腾讯云的算力网络正在突破经典物理限制&#xff0c;其分布式架构通过“量子化”资源调度实现超维计算&#xff1a; ​​虚拟化跃迁​​&#xff1a;基于KVM的轻量级虚拟化技术&#xff0c;将单台物理服务器切割为百…...

Python Cookbook-7.7 通过 shelve 修改对象

任务 你正在使用标准库模块shelve。你用shelve处理过的一些值是易变的对象(mutableobjects)&#xff0c;而且你需要修改这些对象。 解决方案 shelve 模块提供了一种持久的字典——在强大的关系型数据库和简洁的 marshal、pickledbm 以及类似的文件格式之间&#xff0c;它有着…...

Baklib构建AI就绪知识管理体系

Baklib构建AI就绪知识体系 在数字化转型加速的背景下&#xff0c;Baklib通过其AI就绪知识管理体系&#xff0c;为企业提供了从数据整合到智能应用的完整解决方案。该平台以知识中台为核心架构&#xff0c;依托自然语言处理与机器学习技术&#xff0c;对分散在企业文档系统、协…...

嵌入式开发学习日志Day16

一、指针函数 函数的返回值为指针的函数&#xff1b; 注意&#xff1a;不能返回局部变量的地址&#xff1b; 可以返回静态变量的地址&#xff1b; 可以返回全局变量的地址&#xff1b; 1、动态内存分配 void *malloc(size_t size); //申请空间的函数 void free(*ptr); …...

SLAM文献之KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form

KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form 提出了一种在非刚性变形环境下求解 SLAM 问题的闭式全局最优解方法。下面是对其算法原理和核心推导过程的系统解析。 一、算法背景与目标 问题描述&#xff1a; 传统 SLAM 主要假设环境为刚性&am…...

C++之“继承”

继续开始关于C相关的内容。C作为面向对象的语言&#xff0c;有三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。 这篇文章我们开始学习&#xff1a;继承。 一、继承的概念和定义 1. 继承的概念 什么是继承呢&#xff1f; 字面意思理解来看&#xff1a;继承就是…...

java集成telegram机器人

java集成telegram机器人 最近项目需要集成telegram机器人&#xff0c;来实现消息推送功能&#xff0c;以此记录下。 1.创建telegram账号 没有账号的可以去某宝上买一个&#xff0c;千万不要用自己的手机号86去注册&#xff0c;你懂得。 2. 打开BotFather对话创建机器人获取…...

从代码学习深度学习 - 单发多框检测(SSD)PyTorch版

文章目录 前言工具函数数据处理工具 (`utils_for_data.py`)训练工具 (`utils_for_train.py`)检测相关工具 (`utils_for_detection.py`)可视化工具 (`utils_for_huitu.py`)模型类别预测层边界框预测层连接多尺度预测高和宽减半块基础网络块完整的模型训练模型读取数据集和初始化…...

因子分析——数学原理及R语言代码

这里写自定义目录标题 因子分析参数估计方法主成分法主因子法 因子旋转 代码实现Reference 因子分析 FactorAnalysis的目的是从多个高度相关的观测变量中提取出少数几个LatentFactor&#xff0c;这些因子代表了变量背后的共通结构&#xff0c;从而实现降维并提升可解释性。 假…...

CSS3 过渡与动画

在现代网页设计中&#xff0c;平滑的过渡和生动的动画效果已成为提升用户体验不可或缺的元素。CSS3 为我们提供了强大的 transition 和 animation 属性&#xff0c;让开发者能够轻松实现各种视觉效果。本文将深入探讨这两大功能的特性和应用场景。 一、CSS3 过渡&#xff08;T…...

【JAVA】【重试间隔】多线程中两种常见的重试间隔

一、前言 报&#xff01;&#xff01; 小南啊&#xff0c;今日有个小任务交给你去办。就是程序中有个数据处理&#xff0c;总是会出错&#xff0c;不知道是什么原因&#xff0c;你去处理一下&#xff01; 二、主题 围绕数据处理问题去看&#xff0c;从中发现&#xff0c;是因为…...

在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考

PDF 文档在现代 Web 应用中越来越常见&#xff0c;无论是作为文档预览、报告展示还是在线编辑的载体。Mozilla 的 PDF.js 是一个功能强大的 JavaScript 库&#xff0c;它使得在浏览器端渲染和显示 PDF 文件成为可能&#xff0c;无需依赖原生插件。 本文将深入探讨如何在你的项…...

android ViewModel liveData无法监听之多线程下activityViewModels不安全

我们一般的&#xff0c;会遇到liveData无法监听到结果&#xff0c;可能存在主要2种可能&#xff1a; liveData没有正确注册&#xff1b;liveData连续多次设置值&#xff0c;中间的值&#xff0c;会被丢弃&#xff0c;但最后一次是能监听到的。 但是我们容易忽略一种case&…...

【即插即用涨点模块】DSConv动态蛇形卷积:自适应聚焦细长弯曲的局部结构特征,助力分割高效提点【附源码+注释】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

守护数字家园:个人博客安全防护指南

前言 在之前的文章《WordPress个人博客搭建&#xff08;一&#xff09;》《WordPress个人博客搭建&#xff08;二&#xff09;》《WordPress个人博客搭建&#xff08;三&#xff09;》中&#xff0c;我们已经在非凡云云服务器上&#xff0c;借助1Panel搭建起属于自己的数字庭院…...

课外活动:简单了解原生测试框架Unittest前置后置的逻辑

简单了解原生测试框架Unittest前置后置的逻辑 一、测试框架执行顺序解析 1.1 基础执行流程 import unittestclass A(unittest.TestCase):classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{se…...

带你玩转 Flink TumblingWindow:从理论到代码的深度探索

0.前言 在深入探讨 TumblingWindow 之前&#xff0c;我们先来了解一下流处理或流计算中“窗口”的基本概念。在数据流中&#xff0c;源会持续不断地生成数据&#xff0c;因此计算最终值是不可行的。 在大多数用例中&#xff0c;为了获取有意义的信息&#xff0c;最好使用两种方…...

Java线程安全问题深度解析与解决方案

一、线程安全问题的本质 并发编程的核心挑战&#xff1a;当多个线程同时访问共享资源时&#xff0c;由于操作系统的抢占式调度特性&#xff0c;可能导致不可预期的结果。这种因非原子操作和竞态条件引发的数据不一致问题&#xff0c;称为线程安全问题。 二、经典线程安全问题案…...

python实现的音乐播放器

python实现的音乐播放器 音乐播放器,原来写过一个简陋的例子,可见 https://blog.csdn.net/cnds123/article/details/137874107 那个不能拖动播放进度条上的滑块到新的位置播放。下面介绍的可以拖动播放进度条上的滑块到新的位置播放。 简单实用的音乐播放器 这个简单实用的…...

SMT贴片工艺核心优化与生产实践

内容概要 作为现代电子制造的核心环节&#xff0c;SMT贴片工艺的优化直接决定了产品可靠性与生产效率。本文系统性梳理工艺链中的关键控制点&#xff0c;从锡膏印刷精度到回流焊温度曲线&#xff0c;再到AOI检测技术升级&#xff0c;形成覆盖全流程的优化框架。针对行业普遍存…...