KubeSphere 部署 Kafka 集群实战指南
本文档将详细阐述如何利用 Helm 这一强大的工具,快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群。
实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
ksp-registry | 192.168.9.90 | 4 | 8 | 40 | 200 | Harbor 镜像仓库 |
ksp-control-1 | 192.168.9.91 | 4 | 8 | 40 | 100 | KubeSphere/k8s-control-plane |
ksp-control-2 | 192.168.9.92 | 4 | 8 | 40 | 100 | KubeSphere/k8s-control-plane |
ksp-control-3 | 192.168.9.93 | 4 | 8 | 40 | 100 | KubeSphere/k8s-control-plane |
ksp-worker-1 | 192.168.9.94 | 8 | 16 | 40 | 100 | k8s-worker/CI |
ksp-worker-2 | 192.168.9.95 | 8 | 16 | 40 | 100 | k8s-worker |
ksp-worker-3 | 192.168.9.96 | 8 | 16 | 40 | 100 | k8s-worker |
ksp-storage-1 | 192.168.9.97 | 4 | 8 | 40 | 400+ | ElasticSearch/Longhorn/Ceph/NFS |
ksp-storage-2 | 192.168.9.98 | 4 | 8 | 40 | 300+ | ElasticSearch/Longhorn/Ceph |
ksp-storage-3 | 192.168.9.99 | 4 | 8 | 40 | 300+ | ElasticSearch/Longhorn/Ceph |
ksp-gpu-worker-1 | 192.168.9.101 | 4 | 16 | 40 | 100 | k8s-worker(GPU NVIDIA Tesla M40 24G) |
ksp-gpu-worker-2 | 192.168.9.102 | 4 | 16 | 40 | 100 | k8s-worker(GPU NVIDIA Tesla P100 16G) |
ksp-gateway-1 | 192.168.9.103 | 2 | 4 | 40 | 自建应用服务代理网关/VIP:192.168.9.100 | |
ksp-gateway-2 | 192.168.9.104 | 2 | 4 | 40 | 自建应用服务代理网关/VIP:192.168.9.100 | |
ksp-mid | 192.168.9.105 | 4 | 8 | 40 | 100 | 部署在 k8s 集群之外的服务节点(Gitlab 等) |
合计 | 15 | 68 | 152 | 600 | 2100+ |
实战环境涉及软件版本信息
- 操作系统:openEuler 22.03 LTS SP3 x86_64
- KubeSphere:v3.4.1
- Kubernetes:v1.28.8
- KubeKey: v3.1.1
- Bitnami Kafka Helm Charts:29.3.13
- Kafka: 3.7.1
1. 前提条件
目前在 K8s 集群部署 Kafka 的主流方案有以下几种:
- 手写资源配置清单(麻烦,涉及的组件、配置多)
- Kafka Helm chart (Bitnami 出品,简单可定制,但是需要花时间成本学习可配置参数)
经过细致的调研、思考,本文选择采用 Bitnami 的 Kafka Helm chart 进行部署。Bitnami 提供的 Helm chart 以其稳定性和易用性著称,是快速部署 Kafka 到 Kubernetes 集群的理想选择。
编写本文的目的是为了验证 Kafka Helm chart 的部署可行性,并评估其在实际应用中的表现。为了确保过程的顺利和提高成功几率,以下部署配置进行了适度简化,某些配置并不符合生产环境的标准。
- 外部访问安全协议,使用了
PLAINTEXT
,关闭了访问认证,默认值为SASL_PLAINTEXT
。生产环境务必开启认证。 - 外部访问使用了 NodePort 模式
- 默认 StorageClass 使用了 NFS
- 没有考虑数据持久化的配置
对于计划在生产环境部署的用户,我建议详细参考 Bitnami 官方文档,以获取更全面的配置指导和最佳实践。我认为生产环境应该考虑的几项配置如下:
- 外部访问安全协议,选择
PLAINTEXT
,SASL_PLAINTEXT
,SASL_SSL
和SSL
中的哪种方式加密认证方式, - 数据、日志持久化配置
- k8s 集群外部访问 Kafka 的方式,NodePort 是否合适?是否需要使用 LoadBalancer、Ingress
- 内否启用内置的监控
Metrics
- 是否利用 Helm 生成 Kubectl 可用的资源配置清单,离线部署
2. 使用 Helm 安装 Kafka 集群
2.1 安装 Kafka Helm Chart
- 添加 Kafka Helm repository
helm repo add bitnami https://charts.bitnami.com/bitnami
- 更新本地 charts
helm repo update bitnami
2.2 安装 Kafka
- 官方默认安装命令(仅供参考,本文未用)
helm install my-release oci://registry-1.docker.io/bitnamicharts/kafka
- 按规划设置自定义配置项,执行下面的安装命令:
helm install opsxlab bitnami/kafka \--namespace opsxlab --create-namespace \--set replicaCount=3 \--set global.imageRegistry="registry.opsxlab.cn:8443" \--set global.defaultStorageClass="nfs-sc" \--set externalAccess.enabled=true \--set externalAccess.controller.service.type=NodePort \--set externalAccess.controller.service.nodePorts[0]='31211' \--set externalAccess.controller.service.nodePorts[1]='31212' \--set externalAccess.controller.service.nodePorts[2]='31213' \--set externalAccess.controller.service.useHostIPs=true \--set listeners.client.protocol=PLAINTEXT \--set listeners.external.protocol=PLAINTEXT
自定义配置说明:
- 指定并自动创建命名空间 opsxlab
- 设置组件的镜像地址,本文为了演示修改方法,使用了内部的镜像仓库,实际使用中请修改为自己的镜像仓库地址
- 设置默认的持久化存储类为
nfs-sc
,适用于 K8s 有多种存储类,需要部署到指定存储类的场景 - 开启外部访问,并设置相关参数
- 加密认证方式选择了 PLAINTEXT
正确执行后,输出结果如下 :
$ helm install opsxlab bitnami/kafka \--set externalAccess.controller.service.nodePorts[1]='31212' \
> --namespace opsxlab --create-namespace \
> --set replicaCount=3 \
> --set global.imageRegistry="registry.opsxlab.cn:8443" \
> --set global.defaultStorageClass="nfs-sc" \
> --set externalAccess.enabled=true \
> --set externalAccess.controller.service.type=NodePort \
> --set externalAccess.controller.service.nodePorts[0]='31211' \
> --set externalAccess.controller.service.nodePorts[1]='31212' \
> --set externalAccess.controller.service.nodePorts[2]='31213' \
> --set externalAccess.controller.service.useHostIPs=true \
> --set listeners.client.protocol=PLAINTEXT \
> --set listeners.external.protocol=PLAINTEXT
NAME: opsxlab
LAST DEPLOYED: Wed Jul 30 22:08:38 2024
NAMESPACE: opsxlab
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kafka
CHART VERSION: 29.3.13
APP VERSION: 3.7.1
---------------------------------------------------------------------------------------------WARNINGBy specifying "serviceType=LoadBalancer" and not configuring the authenticationyou have most likely exposed the Kafka service externally without anyauthentication mechanism.For security reasons, we strongly suggest that you switch to "ClusterIP" or"NodePort". As alternative, you can also configure the Kafka authentication.---------------------------------------------------------------------------------------------** Please be patient while the chart is being deployed **Kafka can be accessed by consumers via port 9092 on the following DNS name from within your cluster:opsxlab-kafka.opsxlab.svc.cluster.localEach Kafka broker can be accessed by producers via port 9092 on the following DNS name(s) from within your cluster:opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092To create a pod that you can use as a Kafka client run the following commands:kubectl run opsxlab-kafka-client --restart='Never' --image registry.opsxlab.cn:8443/bitnami/kafka:3.7.1-debian-12-r4 --namespace opsxlab --command -- sleep infinitykubectl exec --tty -i opsxlab-kafka-client --namespace opsxlab -- bashPRODUCER:kafka-console-producer.sh \--broker-list opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092 \--topic testCONSUMER:kafka-console-consumer.sh \--bootstrap-server opsxlab-kafka.opsxlab.svc.cluster.local:9092 \--topic test \--from-beginning
To connect to your Kafka controller+broker nodes from outside the cluster, follow these instructions:Kafka brokers domain: You can get the external node IP from the Kafka configuration file with the following commands (Check the EXTERNAL listener)1. Obtain the pod name:kubectl get pods --namespace opsxlab -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=opsxlab,app.kubernetes.io/component=kafka"2. Obtain pod configuration:kubectl exec -it KAFKA_POD -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listenersKafka brokers port: You will have a different node port for each Kafka broker. You can get the list of configured node ports using the command below:echo "$(kubectl get svc --namespace opsxlab -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=opsxlab,app.kubernetes.io/component=kafka,pod" -o jsonpath='{.items[*].spec.ports[0].nodePort}' | tr ' ' '\n')"WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:- controller.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
2.3 查看安装结果
Helm 安装命令成功执行后,观察 Pod 运行状态。
kubectl get pods -n opsxlab
安装成功后,输出结果如下 :
$ kubectl get pods -n opsxlab
NAME READY STATUS RESTARTS AGE
opsxlab-kafka-controller-0 1/1 Running 0 1m17s
opsxlab-kafka-controller-1 1/1 Running 0 1m17s
opsxlab-kafka-controller-2 1/1 Running 0 1m17s
KubeSphere 管理控制台查看部署的组件信息。
- StatefulSet(1个)
- Services(5个)
3. 验证测试 Kafka 服务可用性
分别在 K8s 集群内和集群外验证 Kafka 服务的可用性。
3.1 K8s 集群内部验证
在 K8s 集群内的验证过程,可以参考 Helm 部署 Kafka 时给出的提示信息。
- 创建测试 Pod
kubectl run opsxlab-kafka-client --restart='Never' --image registry.opsxlab.cn:8443/bitnami/kafka:3.7.1-debian-12-r4 --namespace opsxlab --command -- sleep infinity
- 打开测试 Pod 终端
kubectl exec --tty -i opsxlab-kafka-client --namespace opsxlab -- bash
- 执行命令,生产数据
kafka-console-producer.sh \--broker-list opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092 \--topic test
- 再打开一个测试 Pod 终端,消费数据
再打开一个终端后,先执行 第 2 步打开测试 Pod 终端
的命令,然后再执行下面的命令。
kafka-console-consumer.sh \--bootstrap-server opsxlab-kafka.opsxlab.svc.cluster.local:9092 \--topic test \--from-beginning
- 生产并消费数据测试
在生产者一侧随便输入测试数据,观察消费者一侧是否正确收到信息。
生产者侧:
I have no name!@opsxlab-kafka-client:/$ kafka-console-producer.sh --broker-list opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092 --topic test
>cluster kafka test 1
>cluster kafka test 2
消费者侧:
I have no name!@opsxlab-kafka-client:/$ kafka-console-consumer.sh \--bootstrap-server opsxlab-kafka.opsxlab.svc.cluster.local:9092 \--topic test \--from-beginningcluster kafka test 1
cluster kafka test 2
3.2 k8s 集群外部验证
为了更严谨的测试 Kafka 在 K8s 集群外的可用性,我在 K8s 集群外找了一台机器,安装 JDK 和 Kafka。安装方式上 JDK 选择了 Yum 安装 openjdk
,Kafka 则选用了官方提供的二进制包。
实际测试时还可以选择 Docker 镜像或是在 K8s 集群上再创建一个 Pod,测试时连接 K8s 节点的宿主机 IP 和 NodePort。
- 准备外部测试环境
# 安装 JDK
yum install java-1.8.0-openjdk# 下载 Kafka
cd /srv
wget https://downloads.apache.org/kafka/3.7.1/kafka_2.13-3.7.1.tgz# 解压
tar xvf kafka_2.13-3.7.1.tgz
cd /srv/kafka_2.13-3.7.1/bin
- 获取 Kafka 外部访问配置信息
一共 3个 Kafka Pod,每个 Pod 的 advertised.listeners
配置不同,在 K8s 控制节点,分别执行下面的命令:
kubectl exec -n opsxlab -it opsxlab-kafka-controller-0 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
kubectl exec -n opsxlab -it opsxlab-kafka-controller-1 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
kubectl exec -n opsxlab -it opsxlab-kafka-controller-2 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
正确执行后,输出结果如下 :
$ kubectl exec -n opsxlab -it opsxlab-kafka-controller-0 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
Defaulted container "kafka" out of: kafka, kafka-init (init)
advertised.listeners=CLIENT://opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,INTERNAL://opsxlab-kafka-controller-0.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9094,EXTERNAL://192.168.9.125:31211$ kubectl exec -n opsxlab -it opsxlab-kafka-controller-1 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
Defaulted container "kafka" out of: kafka, kafka-init (init)
advertised.listeners=CLIENT://opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,INTERNAL://opsxlab-kafka-controller-1.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9094,EXTERNAL://192.168.9.124:31212$ kubectl exec -n opsxlab -it opsxlab-kafka-controller-2 -- cat /opt/bitnami/kafka/config/server.properties | grep advertised.listeners
Defaulted container "kafka" out of: kafka, kafka-init (init)
advertised.listeners=CLIENT://opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9092,INTERNAL://opsxlab-kafka-controller-2.opsxlab-kafka-controller-headless.opsxlab.svc.cluster.local:9094,EXTERNAL://192.168.9.126:31213
- 外部节点连接 Kafka 测试
跟 K8s 集群内部验证测试过程一样,打开两个终端,运行生产者和消费者脚本。执行下面的命令验证测试(细节略过,直接上结果)。
外部生产者侧:
$ ./kafka-console-producer.sh --broker-list 192.168.9.125:31211 --topic test
>external kafka test 3
>external kafka test 4
外部消费者侧:
$ ./kafka-console-consumer.sh --bootstrap-server 192.168.9.125:31211 --topic test --from-beginningcluster kafka test 1
cluster kafka test 2
external kafka test 3
external kafka test 4
注意: 外部消费者能消费到所有数据,包括集群内部测试时生成的数据。
集群内消费者侧: 集群内的消费者,同样能获取外部生产者产生的数据。
I have no name!@opsxlab-kafka-client:/$ kafka-console-consumer.sh \--bootstrap-server opsxlab-kafka.opsxlab.svc.cluster.local:9092 \--topic test \--from-beginningcluster kafka test 1
cluster kafka test 2
external kafka test 3
external kafka test 4
免责声明:
- 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
- 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境。由此引发的任何问题,作者概不负责!
本文由博客一文多发平台 OpenWrite 发布!
相关文章:

KubeSphere 部署 Kafka 集群实战指南
本文档将详细阐述如何利用 Helm 这一强大的工具,快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群。 实战服务器配置(架构 1:1 复刻小规模生产环境,配置略有不同) 主机名IPCPU内存系统盘数据盘用途ksp-registry192.168.9.904840200Harbor 镜像仓库…...

手把手教你安装音乐制作软件FL Studio 24.1.1.4285中文破解版
在当今数字化时代,音乐创作不再局限于传统的乐器和录音室,而是借助先进的音乐制作软件,如FL Studio,实现了前所未有的便捷与高效。FL Studio,以其强大的功能、直观的界面和丰富的插件资源,成为了众多音乐制…...
SDL 与 OpenGL 的关系
OpenGL 和 SDL 是两个不同的库,但它们可以配合使用来创建图形应用程序。 SDL(Simple DirectMedia Layer) SDL 是一个跨平台的多媒体库,用于处理图形、声音、输入和其他游戏开发所需的功能。它简化了窗口创建、事件处理和图形上下…...

考研数学 线性代数----行列式与矩阵
核心框架 前置知识 正式内容 知识点1:单位矩阵 知识点2:可逆矩阵 知识点3: |A|与可逆 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识…...

Golang实现简单的HTTP服务,响应RESTful请求判断形状大小
题目要求: 题目 1.shape 接口有面积Area() float64和 周长Perimeter()fioat64 两个法。为Circle Rectangle实现shape 接口。 2.实现isGreater(shape1,shape2 shape)boo1 函数,用于比较两个形状的大小,并使用单元测试验证 3.实现http.Handle…...

使用C语言构建Lua库
Lua 本身是用 C 语言编写的,因此使用 C 编写扩展可以更好地与 Lua 引擎集成,减少性能瓶颈,同时C 语言提供了对底层硬件和操作系统功能的直接访问能力,让 Lua 可以通过 C 扩展来实现对文件系统、网络等高级功能的支持。因为C 语言非…...

愤怒的江小白,这几年怎么了?
近日,东方甄选和江小白的纠纷引发了广泛关注。 8月8日晚间,东方甄选直播间中,主播天权在带货某款白酒产品时突然对比点评江小白产品,称江小白“不是白酒”:“你现在去看江小白的包装,上面是没有‘白酒’这…...

Unity教程(十)Tile Palette搭建平台关卡
Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…...

如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧
在企业运营中,保护公司的机密信息至关重要。员工私自拷贝公司内部文件不仅可能导致商业秘密泄露,还可能损害公司的声誉和经济利益。下面我们将介绍一些有效的方法来防止这种情况的发生,并以“安企神”软件为例进行详细说明。 1. 明确规章制度…...
Linux应急响应检查工具
最近一直在优化的 linux 应急检查脚本,也是我一直在应急使用的工具 https://github.com/sun977/linuxcheckshoot 脚本包含两个检查工具,详情可看 README 或者 Banner linuxGun.sh 和 linuxcheck.sh 区别 1、linuxcheck.sh 是完整的 linux 系统检查脚本,…...
CP AUTOSAR标准之EEPROMAbstraction(AUTOSAR_SWS_EEPROMAbstraction)(更新中……)
1 简介和功能概述 EEPROM抽象层的功能、API和配置(见图1)。 图1:内存硬件抽象层模块概览 EEPROM抽象(EA)从设备特定的寻址方案和分段中抽象出来,并为上层提供虚拟寻址方案和分段以及“几乎”无限数量的擦除周期。 3 相关文献 3.1 输入文件 [1]基础软件模块列表AUTO…...
重启redis服务时报错:Failed to start redis.service: Unit not found
重启redis服务时报错:Failed to start redis.service: Unit not found redis配合安全修改了bind和auth配置,重启的时候报错了,试了很多方法,最后才通过日志解决了 1 重新加载systemd 配置并启动: sudo systemctl da…...

Hive3:识别内部表、外部表及相互转换
一、识别方法 查看内部表信息 desc formatted stu;查看外部表信息 desc formatted test_ext1;通过Table Type对应的值,我们可以区分外部表和内部表。 二、相互转换 内部表转外部表 alter table stu set tblproperties(EXTERNALTRUE);外部表转内部表 alter ta…...
Android笔试面试题AI答之Kotlin(7)
文章目录 29.简述Kotlin 中的内联类,什么时候需要内联类?内联类的特点何时需要内联类示例注意 30. 什么是 Coroutine Scope,它与 Coroutine Context 有什么不同?Coroutine Scope(协程作用域)Coroutine Cont…...

高辐照整车太阳辐照模拟系统试验舱
概览 高辐照整车太阳辐照模拟系统试验是一种模拟太阳辐照对汽车及其零部件影响的测试方法,主要用于评估汽车在长期日照条件下的性能和可靠性。该试验通常遵循特定的标准,如GB/T 2423.24-1995、DIN 75220、BMW PR306等,旨在模拟自然环境中的太…...

如何制作优秀的年终总结PPT?
制作优秀的年终总结PPT,是每位职场人士在年底时的一项重要任务。 一个优秀的年终总结PPT不仅能够清晰地展示你过去一年的工作成果,还能让领导对你的工作能力和态度留下深刻印象。 下面,我将从几个方面详细讲解如何制作这样的PPT,…...
架构师第六周作业
目录 1.部署3节点mongodb复制集。 1.1 安装mongodb 1.2 部署复制集 2.部署3节点Kafka集群 1.部署3节点mongodb复制集。 1.1 安装mongodb MongoDB安装包下载 下载地址:https://www.mongodb.com/try/download/community 版本根据需求选择,Mongodb6.…...

解密Java中介者模式:代码实例带你深入理解
1. 引言:中介者模式的重要性 在软件设计的世界里,模块间的相互依赖往往会导致系统的复杂性和维护难度的增加。中介者模式(Mediator Pattern)作为一种行为设计模式,它的出现就是为了解决这一问题。通过引入一个中介者对…...

19c做好这件事,大幅提升Data Pump工作效率
老司机遇到的新问题 expdp是Oracle 10g引入的数据导出工具,能够提供并行、压缩及元数据导出等更多的功能,在后续的版本中逐渐替代了传统的数据导出工具exp,是数据库开发运维常用的工具之一。在我的印象中,这个工具除了诸如大量的…...

6种常用的AR跟踪方法
增强现实 (AR) 是一项令人着迷的技术,可将虚拟内容与现实世界无缝集成。实现这种无缝集成的关键组件之一是跟踪。各种类型的跟踪用于确定 AR 内容在环境中的准确位置和方向。本文介绍 AR 最常见的6种跟踪方法。 NSDT工具推荐: Three.js AI纹理开发包 - Y…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...