kubernetes集群 应用实践 kafka部署
kubernetes集群 应用实践 kafka部署
零.1、环境说明
零.2、kafka架构说明
zookeeper在kafka集群中的作用
一、Broker注册
二、Topic注册
三、Topic Partition选主
四、生产者负载均衡
五、消费者负载均衡
一、持久化存储资源准备
1.1 创建共享目录
[root@nfsserver ~]# mkdir -p /vdc/kafka/data1 [root@nfsserver ~]# mkdir -p /vdc/kafka/data2 [root@nfsserver ~]# mkdir -p /vdc/kafka/data3
1.2 验证共享目录
[root@nfsserver ~]# tree /vdc/kafka /vdc/kafka ├── data1 ├── data2 └── data3 3 directories, 0 files
1.3 共享存储目录
[root@nfsserver ~]# cat /etc/exports /vdc/zk/data1 *(rw,sync,no_root_squash) /vdc/zk/data2 *(rw,sync,no_root_squash) /vdc/zk/data3 *(rw,sync,no_root_squash) /vdc/kafka/data1 *(rw,sync,no_root_squash) /vdc/kafka/data2 *(rw,sync,no_root_squash) /vdc/kafka/data3 *(rw,sync,no_root_squash)
[root@nfsserver ~]# exportfs -a
[root@nfsserver ~]# showmount -e 192.168.122.250 Export list for 192.168.122.250: /vdc/kafka/data3 * /vdc/kafka/data2 * /vdc/kafka/data1 * /vdc/zk/data3 * /vdc/zk/data2 * /vdc/zk/data1 *
二、k8s集群中kafka持久化存储PV准备
2.1 创建PV资源清单文件
[root@nginxk8syaml kafka]# cat kafka-pv.yaml apiVersion: v1 kind: PersistentVolume metadata:name: kafka-data1 spec:capacity:storage: 3GiaccessModes:- ReadWriteOncenfs:server: nfs.wego.redpath: /vdc/kafka/data1 --- apiVersion: v1 kind: PersistentVolume metadata:name: kafka-data2 spec:capacity:storage: 3GiaccessModes:- ReadWriteOncenfs:server: nfs.wego.redpath: /vdc/kafka/data2 --- apiVersion: v1 kind: PersistentVolume metadata:name: kafka-data3 spec:capacity:storage: 3GiaccessModes:- ReadWriteOncenfs:server: nfs.wego.redpath: /vdc/kafka/data3
2.2 定位资源清单文件位置
2.3 应用资源清单文件
[root@master1 ~]# kubectl apply -f http://nginxk8syaml.k8sonline.com.cn/kafka/kafka-pv.yaml persistentvolume/kafka-data1 created persistentvolume/kafka-data2 created persistentvolume/kafka-data3 created
2.4 验证PV创建情况
[root@master1 ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE kafka-data1 3Gi RWO Retain Available 19s kafka-data2 3Gi RWO Retain Available 19s kafka-data3 3Gi RWO Retain Available 19s
三、k8s集群中部署kafka
3.1 kafka资源清单文件
[root@nginxk8syaml kafka]# cat kafka.yaml --- apiVersion: v1 kind: Service metadata:name: kafka-hsnamespace: defaultlabels:app: kafka spec:ports:- port: 9093name: serverclusterIP: Noneselector:app: kafka --- apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata:name: kafka-pdbnamespace: default spec:selector:matchLabels:app: kafkamaxUnavailable: 1 --- apiVersion: apps/v1 kind: StatefulSet metadata:name: kafkanamespace: default spec:serviceName: kafka-hsreplicas: 3selector:matchLabels:app: kafkapodManagementPolicy: ParallelupdateStrategy:type: RollingUpdatetemplate:metadata:labels:app: kafkaspec:terminationGracePeriodSeconds: 300containers:- name: k8skafkaimagePullPolicy: IfNotPresentimage: harbor.wego.red/library/kubernetes-kafka:v10.2.1resources:requests:memory: "256Mi"cpu: "0.1"ports:- containerPort: 9093name: servercommand:- sh- -c- "exec kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \--override listeners=PLAINTEXT://:9093 \--override zookeeper.connect=zk-cs.default.svc.cluster.local:2181 \--override log.dir=/var/lib/kafka \--override auto.create.topics.enable=true \--override auto.leader.rebalance.enable=true \--override background.threads=10 \--override compression.type=producer \--override delete.topic.enable=false \--override leader.imbalance.check.interval.seconds=300 \--override leader.imbalance.per.broker.percentage=10 \--override log.flush.interval.messages=9223372036854775807 \--override log.flush.offset.checkpoint.interval.ms=60000 \--override log.flush.scheduler.interval.ms=9223372036854775807 \--override log.retention.bytes=-1 \--override log.retention.hours=168 \--override log.roll.hours=168 \--override log.roll.jitter.hours=0 \--override log.segment.bytes=1073741824 \--override log.segment.delete.delay.ms=60000 \--override message.max.bytes=1000012 \--override min.insync.replicas=1 \--override num.io.threads=8 \--override num.network.threads=3 \--override num.recovery.threads.per.data.dir=1 \--override num.replica.fetchers=1 \--override offset.metadata.max.bytes=4096 \--override offsets.commit.required.acks=-1 \--override offsets.commit.timeout.ms=5000 \--override offsets.load.buffer.size=5242880 \--override offsets.retention.check.interval.ms=600000 \--override offsets.retention.minutes=1440 \--override offsets.topic.compression.codec=0 \--override offsets.topic.num.partitions=50 \--override offsets.topic.replication.factor=3 \--override offsets.topic.segment.bytes=104857600 \--override queued.max.requests=500 \--override quota.consumer.default=9223372036854775807 \--override quota.producer.default=9223372036854775807 \--override replica.fetch.min.bytes=1 \--override replica.fetch.wait.max.ms=500 \--override replica.high.watermark.checkpoint.interval.ms=5000 \--override replica.lag.time.max.ms=10000 \--override replica.socket.receive.buffer.bytes=65536 \--override replica.socket.timeout.ms=30000 \--override request.timeout.ms=30000 \--override socket.receive.buffer.bytes=102400 \--override socket.request.max.bytes=104857600 \--override socket.send.buffer.bytes=102400 \--override unclean.leader.election.enable=true \--override zookeeper.session.timeout.ms=6000 \--override zookeeper.set.acl=false \--override broker.id.generation.enable=true \--override connections.max.idle.ms=600000 \--override controlled.shutdown.enable=true \--override controlled.shutdown.max.retries=3 \--override controlled.shutdown.retry.backoff.ms=5000 \--override controller.socket.timeout.ms=30000 \--override default.replication.factor=1 \--override fetch.purgatory.purge.interval.requests=1000 \--override group.max.session.timeout.ms=300000 \--override group.min.session.timeout.ms=6000 \--override inter.broker.protocol.version=0.10.2-IV0 \--override log.cleaner.backoff.ms=15000 \--override log.cleaner.dedupe.buffer.size=134217728 \--override log.cleaner.delete.retention.ms=86400000 \--override log.cleaner.enable=true \--override log.cleaner.io.buffer.load.factor=0.9 \--override log.cleaner.io.buffer.size=524288 \--override log.cleaner.io.max.bytes.per.second=1.7976931348623157E308 \--override log.cleaner.min.cleanable.ratio=0.5 \--override log.cleaner.min.compaction.lag.ms=0 \--override log.cleaner.threads=1 \--override log.cleanup.policy=delete \--override log.index.interval.bytes=4096 \--override log.index.size.max.bytes=10485760 \--override log.message.timestamp.difference.max.ms=9223372036854775807 \--override log.message.timestamp.type=CreateTime \--override log.preallocate=false \--override log.retention.check.interval.ms=300000 \--override max.connections.per.ip=2147483647 \--override num.partitions=3 \--override producer.purgatory.purge.interval.requests=1000 \--override replica.fetch.backoff.ms=1000 \--override replica.fetch.max.bytes=1048576 \--override replica.fetch.response.max.bytes=10485760 \--override reserved.broker.max.id=1000 "env:- name: KAFKA_HEAP_OPTSvalue : "-Xmx256M -Xms256M"- name: KAFKA_OPTSvalue: "-Dlogging.level=INFO"volumeMounts:- name: datadirmountPath: /var/lib/kafkareadinessProbe:exec:command:- sh- -c- "/opt/kafka/bin/kafka-broker-api-versions.sh --bootstrap-server=localhost:9093"volumeClaimTemplates:- metadata:name: datadirspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 3Gi
3.1.1 修改容器镜像
在课程目录中有相关镜像,直接导入harbor主机并上传到harbor仓库
修改容器镜像 containers:- name: k8skafkaimagePullPolicy: IfNotPresentimage: harbor.wego.red/library/kubernetes-kafka:v10.2.1
3.1.2 修改zookeeper连接地址
修改zookeeper.connect连接地址,使用k8s集群内域名,需要DNS服务。 command:- sh- -c- "exec kafka-server-start.sh /opt/kafka/config/server.properties --override broker.id=${HOSTNAME##*-} \--override listeners=PLAINTEXT://:9093 \--override zookeeper.connect=zk-cs.default.svc.cluster.local:2181 \
3.2 应用kafka资源清单文件
[root@master1 ~]# kubectl apply -f http://nginx.wego.red/kafka/kafka.yaml service/kafka-hs created poddisruptionbudget.policy/kafka-pdb created statefulset.apps/kafka created
3.3 验证kafka创建情况
[root@master1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE busybox-pod 1/1 Running 397 28d kafka-0 1/1 Running 0 106s kafka-1 1/1 Running 0 106s kafka-2 1/1 Running 0 106s nfs-client-provisioner-5786f95795-54v4s 1/1 Running 4 9d zok-0 1/1 Running 2 3h38m zok-1 1/1 Running 1 3h38m zok-2 1/1 Running 1 3h37m
四、通过zookeeper查看broker
[root@master1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE zok-0 1/1 Running 2 5h4m zok-1 1/1 Running 1 5h3m zok-2 1/1 Running 1 5h3m
[root@master1 ~]# kubectl exec -it zok-1 -n default bash root@zok-1:/# zkCli.sh Connecting to localhost:2181 Welcome to ZooKeeper![zk: localhost:2181(CONNECTING) 0] ls / [cluster, controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, hello, config][zk: localhost:2181(CONNECTED) 1] ls /brokers [ids, topics, seqid] [zk: localhost:2181(CONNECTED) 2] ls /brokers/ids [0, 1, 2] [zk: localhost:2181(CONNECTED) 3] get /brokers/ids/0 {"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://kafka-0.kafka-hs.default.svc.cluster.local:9093"],"jmx_port":-1,"host":"kafka-0.kafka-hs.default.svc.cluster.local","timestamp":"1581591232561","port":9093,"version":4} cZxid = 0x20000001a ctime = Thu Feb 13 10:53:52 UTC 2020 mZxid = 0x20000001a mtime = Thu Feb 13 10:53:52 UTC 2020 pZxid = 0x20000001a cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x1703e20e92c0000 dataLength = 254 numChildren = 0 [zk: localhost:2181(CONNECTED) 4] get /brokers/ids/1 {"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://kafka-1.kafka-hs.default.svc.cluster.local:9093"],"jmx_port":-1,"host":"kafka-1.kafka-hs.default.svc.cluster.local","timestamp":"1581591238213","port":9093,"version":4} cZxid = 0x20000001e ctime = Thu Feb 13 10:53:58 UTC 2020 mZxid = 0x20000001e mtime = Thu Feb 13 10:53:58 UTC 2020 pZxid = 0x20000001e cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x1703e20e92c0001 dataLength = 254 numChildren = 0 [zk: localhost:2181(CONNECTED) 5] get /brokers/ids/2 {"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://kafka-2.kafka-hs.default.svc.cluster.local:9093"],"jmx_port":-1,"host":"kafka-2.kafka-hs.default.svc.cluster.local","timestamp":"1581591242262","port":9093,"version":4} cZxid = 0x200000022 ctime = Thu Feb 13 10:54:02 UTC 2020 mZxid = 0x200000022 mtime = Thu Feb 13 10:54:02 UTC 2020 pZxid = 0x200000022 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x2703e207a150000 dataLength = 254 numChildren = 0
五、kafka应用操作测试
5.1 查看pod
[root@master1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE busybox-pod 1/1 Running 398 28d kafka-0 1/1 Running 0 87m kafka-1 1/1 Running 0 87m kafka-2 1/1 Running 0 87m
5.2 进入kafka pod
[root@master1 ~]# kubectl exec -it kafka-0 -n default bash # pwd / # ls KEYS boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var # cd /opt/kafka/bin # pwd /opt/kafka/bin # ls connect-distributed.sh kafka-replica-verification.sh connect-standalone.sh kafka-run-class.sh kafka-acls.sh kafka-server-start.sh kafka-broker-api-versions.sh kafka-server-stop.sh kafka-configs.sh kafka-simple-consumer-shell.sh kafka-console-consumer.sh kafka-streams-application-reset.sh kafka-console-producer.sh kafka-topics.sh kafka-consumer-groups.sh kafka-verifiable-consumer.sh kafka-consumer-offset-checker.sh kafka-verifiable-producer.sh kafka-consumer-perf-test.sh windows kafka-mirror-maker.sh zookeeper-security-migration.sh kafka-preferred-replica-election.sh zookeeper-server-start.sh kafka-producer-perf-test.sh zookeeper-server-stop.sh kafka-reassign-partitions.sh zookeeper-shell.sh kafka-replay-log-producer.sh
5.3 创建test topic
root@kafka-0:/opt/kafka/bin# ./kafka-topics.sh --create --topic test --zookeeper zk-cs.default.svc.cluster.local:2181 --partitions 3 --replication-factor 3
输出 Created topic "test".
5.4 查看 topic
root@kafka-0:/opt/kafka/bin# ./kafka-topics.sh --zookeeper zk-cs.default.svc.cluster.local:2181 --list
输出 test
5.5 模拟生产者
终端1
root@kafka-0:/opt/kafka/bin# ./kafka-console-producer.sh --topic test --broker-list kafka-0.kafka-hs.default.svc.cluster.local:9093,kafka-1.kafka-hs.default.svc.cluster.local:9093,kafka-2.kafka-hs.default.svc.cluster.local:9093 this is a test message hello worldCTRL+C即可退出
5.6 模拟消费者
终端2
[root@master1 ~]# kubectl exec -it kafka-0 bash root@kafka-0:/# cd /opt/kafka/bin root@kafka-0:/opt/kafka/bin# ./kafka-console-consumer.sh --topic test --zookeeper zk-cs.default.svc.cluster.local:2181 --from-beginning Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper]. this is a test message hello world
六、集群内业务系统访问kafka
broker-list:kafka-0.kafka-hs.default.svc.cluster.local:9093kafka-1.kafka-hs.default.svc.cluster.local:9093kafka-2.kafka-hs.default.svc.cluster.local:9093
相关文章:

kubernetes集群 应用实践 kafka部署
kubernetes集群 应用实践 kafka部署 零.1、环境说明 零.2、kafka架构说明 zookeeper在kafka集群中的作用 一、Broker注册 二、Topic注册 三、Topic Partition选主 四、生产者负载均衡 五、消费者负载均衡 一、持久化存储资源准备 1.1 创建共享目录 [rootnfsserver ~]# mkdir -…...

Featured Based知识蒸馏及代码(3): Focal and Global Knowledge (FGD)
文章目录 1. 摘要2. Focal and Global 蒸馏的原理2.1 常规的feature based蒸馏算法2.2 Focal Distillation2.3 Global Distillation2.4 total loss3. 实验完整代码论文: htt...

CentOs 安装MySQL
1、拉取安装包 wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 成功拉取 2、安装 yum install mysql-community-release-el6-5.noarch.rpm 过程中可能需要你同意一些东西,y 即可 然后稍微检查一下 yum repolist enabled…...

基于Java (spring-boot)的在线考试管理系统
一、项目介绍 系统功能说明 1、系统共有管理员、老师、学生三个角色,管理员拥有系统最高权限。 2、老师拥有考试管理、题库管理、成绩管理、学生管理四个模块。 3、学生可以参与考试、查看成绩、试题练习、留言等功能 二、作品包含 三、项目技术 后端语言&…...

5. 结构型模式 - 外观模式
亦称: Facade 意图 外观模式是一种结构型设计模式, 能为程序库、 框架或其他复杂类提供一个简单的接口 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下, 你需要负责所有对象的初始化工作、 管理其依赖关系并按正确…...

微服务之配置中心与服务跟踪
zookeeper 配置中心 实现的架构图如下所示,采取数据加载到内存方式解决高效获取的问题,借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度(kafka) 消息服务和事件的统一调度,常用用 kafka …...
链表 典型习题
160 相交链表:遍历,统计是否出现过 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(L…...

面试题:JVM 对锁都进行了哪些优化?
文章目录 锁优化自旋锁和自适应自旋锁消除锁粗化逃逸分析方法逃逸线程逃逸通过逃逸分析,编译器对代码的优化 锁优化 jvm 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。 自旋锁和自适应自旋 现在大多的处理器都是…...

SSM整合实战(Spring、SpringMVC、MyBatis)
五、SSM整合实战 目录 一、SSM整合理解 1. 什么是SSM整合?2. SSM整合核心理解五连问! 2.1 SSM整合涉及几个IoC容器?2.2 每个IoC容器盛放哪些组件?2.3 IoC容器之间是什么关系?2.4 需要几个配置文件和对应IoC容器关系&…...
QT调用外部exe及无终端弹窗的解决方案、并实现进程输出信息获取
博主使用QT调用外部exe程序,外部exe程序有printf输出,起初使用的是C语言中的system()方法,但在笔记本上有概率出现终端窗口一闪而过的情况,后修改了调用方案。 1. QT调用外部exe 使用QT中的QProcess方法 #include <QProcess…...

大语言模型的三种主要架构 Decoder-Only、Encoder-Only、Encoder-Decoder
现代大型语言模型(LLM)的演变进化树,如下图: https://arxiv.org/pdf/2304.13712.pdf 基于 Transformer 模型以非灰色显示: decoder-only 模型在蓝色分支, encoder-only 模型在粉色分支, encod…...
【MySQL】外连接 where 和 on 的区别
力扣题 1、题目地址 1158. 市场分析 I 2、模拟表 User Column NameTypeuser_idintjoin_datedatefavorite_brandvarchar user_id 是此表主键(具有唯一值的列)。表中描述了购物网站的用户信息,用户可以在此网站上进行商品买卖。 Orders…...

【优化】XXLJOB修改为使用虚拟线程
【优化】XXLJOB修改为使用虚拟线程 新建这几个目录 类, 去找项目对应的xxljob的源码 主要是将 new Thread 改为 虚拟线程 Thread.ofVirtual().name("VT").unstarted 以下代码是 xxljob 2.3.0版本 举一反三 去修改对应版本的代码 <!-- 定…...

金蝶Apusic应用服务器 loadTree JNDI注入漏洞复现(QVD-2023-48297)
0x01 产品简介 金蝶Apusic应用服务器是一款企业级应用服务器,支持Java EE技术,适用于各种商业环境。 0x02 漏洞概述 由于金蝶Apusic应用服务器权限验证不当,导致攻击者可以向loadTree接口执行JNDI注入,造成远程代码执行漏洞。利用该漏洞需低版本JDK。(漏洞比较旧,8月份…...

PromptNER: Prompt Locating and Typing for Named Entity Recognition
原文链接: https://aclanthology.org/2023.acl-long.698.pdf ACL 2023 介绍 问题 目前将prompt方法应用在ner中主要有两种方法:对枚举的span类型进行预测,或者通过构建特殊的prompt来对实体进行定位。但作者认为这些方法存在以下问题…...

QT编写应用的界面自适应分辨率的解决方案
博主在工作机上完成QT软件开发(控件大小与字体大小比例正常),部署到客户机后,发现控件大小与字体大小比例失调,具体表现为控件装不下字体,即字体显示不全,推测是软件不能自适应分辨率导致的。 文…...

Kubernetes pod ip 暴露
1. k8s pod 和 service 网络暴露 借助 iptables 的路由转发功能,打通k8s集群内的pod和service网络,与外部网络联通 # 查看集群的 pod 网段和 service 网段 kubectl -n kube-system describe cm kubeadm-config networking:dnsDomain: cluster.localpod…...

442. 数组中重复的数据
数组中重复的数据 描述 : 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个时间复杂度为 O(n) 且仅使用…...

Qt/C++视频监控Onvif工具/组播搜索/显示监控画面/图片参数调节/OSD管理/祖传原创
一、前言 能够写出简单易用而又不失功能强大的组件,一直是我的追求,简单主要体现在易用性,不能搞一些繁琐的流程和一些极难使用的API接口,或者一些看不懂的很难以理解的函数名称,一定是要越简单越好。功能强大主要体现…...

word2003 open word2007+
Win 7 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates 还是不行,重装office2003吧,再安装转换插件,但是再高版本好像没转换工具...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...