分布式服务框架zookeeper+消息队列kafka
一、zookeeper概述
zookeeper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务,状态同步,配置中心,集群管理等。
在分布式环境下,经常需要对应用/服务进行统一命名,便于识别
命名服务:命名服务是分布式系统中比较常见的一类场景。命名服务是分布式系统最基本的公共服务之一。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等——这些我们都可以统称它们为名字(Name),其中较为常见的就是一些分布式服务框架(如 RPC、RMI)中的服务地址列表,通过使用命名服务,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供者的信息等。
状态同步:每个节点除了存储数据内容和 node 节点状态信息之外,还存储了已经注册的APP 的状态信息,当有些节点或 APP 不可用,就将当前状态同步给其他服务。
配置中心:配置管理可交由ZooKeeper实现。可将配置信息写入ZooKeeper上的一个Znode。各个客户端服务器监听这个Znode。一旦 Znode中的数据被修改,ZooKeeper将通知各个客户端服务器。
集群管理:所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者则是对集群进行操作与控制,在日常开发和运维过程中,我们经常会有类似于如下的需求:
希望知道当前集群中究竟有多少机器在工作。
对集群中每台机器的运行时状态进行数据收集。
对集群中机器进行上下操作。
分布式环境中,实时掌握每个节点的状态是必要的。可根据节点实时状态做出一些调整。
二、zookeeper特性
zookeeper = 文件系统 + 通知机制
客户端如果对 ZooKeeper 的一个数据节点注册 Watcher 监听,那么当该数据节点的内容或是其子节点列表发生变更时,ZooKeeper 服务器就会向订阅的客户端发送变更通知。
对在 ZooKeeper 上创建的临时节点,一旦客户端与服务器之间的会话失效,那么该临时节点也就被自动清除。
Watcher(事件监听器),是Zookeeper中的一个很重要的特性。Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,ZooKeeper服务端会将事件通知到感兴趣的客户端上去,该机制是Zookeeper实现分布式协调服务的重要特性。
0 生产者启动
1 生产者注册至 zookeeper
2 消费者启动并订阅频道
3 zookeeper 通知消费者事件
4 消费者调用生产者
5 监控中心负责统计和监控服务状态
三、集群介绍
在zookeeper集群中,有各自的角色,分为领导者Leader,学习者learner(跟随者Follower,观察者Observer)
领导者主要工作:事务请求的唯一调度和处理者,保证集群事务处理的顺序性;集群内部个服务器的调度者。
跟随者:处理客户端非事务请求,转发事务请求给leader服务器;参与事务请求proposal的投票;参与leader选举的投票。
观察者:follower和Observer唯一的区别在于Observer机器不参与Leader的选举过程,也不参与写操作的“过半写成功”策略,因此Observer机器可以在不影响写性能的情况下提升集群的读性能。
选举机制:Leader
(1)服务器1启动,发起一次选举。服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成,服务器1状态保持为LOOKING;
(2)服务器2启动,再发起一次选举。服务器1和2分别投自己一票并交换选票信息:此时服务器1发现服务器2的myid比自己目前投票推举的(服务器1)大,更改选票为推举服务器2为主。此时服务器1票数0票,服务器2票数2票,没有半数以上结果,选举无法完成,服务器1,2状态保持LOOKING
(3)服务器3启动,发起一次选举。此时服务器1和2都会更改选票为服务器3。此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数,服务器3当选Leader。服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;
(4)服务器4启动,发起一次选举。此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。此时服务器4服从多数,更改选票信息为服务器3,并更改状态为FOLLOWING;
(5)服务器5启动,同4一样当小弟。
集群特性:
整个集群中只要有超过集群数量一半的 zookeeper 工作只正常的,那么整个集群对外就是可用的,假如有 2 台服务器做了一个 zookeeper集群,只要有任何一台故障或宕机,那么这个 zookeeper 集群就不可用了,因为剩下的一台没有超过集群一半的数量,但是假如有三台 zookeeper 组成一个集群,那么损坏一台就还剩两台,大于 3 台的一半,所以损坏一台还是可以正常运行的,但是再损坏一台就只剩一台集群就不可用了。
四、消息队列
消息队列(Message Queue)是为了实现各个APP之间的通讯,APP基于MQ实现消息的发送和接收应用程序之间的通讯,这样多个应用程序可以运行在不同的主机上,通过MQ就可以实现夸网络通信,因此MQ实现了业务的解耦和异步机制。
MQ分类:
目前主流的消息队列软件有RabbitMQ,kafka,ActiveMQ,RocketMQ等,还有小众的消息队列软件如ZeroMQ,ApacheQpid等。
同步处理:
用户将请求发给系统A,系统A受到请求调用B系统,系统B返回结果到系统A,系统A才能返回给用户,这就是同步调用。
同步调用就是各个系统之间相互依赖,一个系统发出请求,其他系统会跟着一起执行,只有所有系统处理完后对用户来说才算是完成了一次请求,只有任何一个系统出现故障,就会报错给用户。
异步处理:
用户发送给请求给系统A,系统A将发送消息到MQ,然后就返回结果给用户,不会去管系统B是否处理,系统B再根据自己的能力去MQ中获取消息,执行自己的操作也不会去告诉系统A,所以整个过程的通信时异步调用。
Kafka优势:
1.高吞吐量、低延迟
Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。
2.可扩展性
kafka 集群支持热扩展
3.持久性、可靠性
允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)kafka 通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能
4.容错性
- 允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败)
高并发 支持数千个客户端同时读写
kafka角色:
broker:kafka集群包含一个或多个服务器,这种服务器被称为broker。
- Topic :每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 topic,(物理上不同 topic 的消息分开存储在不同的文件夹,逻辑上一个 topic 的消息虽然保存于一个或多个 broker 上但用户只需指定消息的 topic 即可生产或消费数据而不必关心数据存于何处),topic 在逻辑上对 record(记录、日志)进行分组保存,消费者需要订阅相应的 topic 才能消费 topic 中的消息。
- Partition :是物理上的概念,每个 topic 包含一个或多个 partition,创建 topic 时可指定 parition 数量,每个partition对应于一个文件夹,该文件夹下存储该partition的数据和索引文件,为了实现实现数据的高可用,比如将分区 0的数据分散到不同的kafka节点,每一个分区都有一个broker作为leader 和一个 broker作为Follower。
- Producer:负责发布消息到 Kafka broker
- Consumer:消费消息,每个 consumer 属于一个特定的 consuer group(可为每个consumer 指定 group name,若不指定 group name 则属于默认的 group),使用consumer high level API 时,同一 topic 的一条消息只能被同一个 consumer group内的一个 consumer 消费,但多个 consumer group 可同时消费这一消息。
五、zookeeper与kafka
由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。
Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中;从 0.9 版本开始,consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic 为 __consumer_offsets。
也就是说,zookeeper的作用就是,生产者push数据到kafka集群,就必须要找到kafka集群的节点在哪里,这些都是通过zookeeper去寻找的。消费者消费哪一条数据,也需要zookeeper的支持,从zookeeper获得offset,offset记录上一次消费的数据消费到哪里,这样就可以接着下一条数据进行消费。
部署kafka需要先部署zookeeper
5.1 部署zookeeper
需要三台服务器:
Node1:192.168.114.10
Node2:192.168.114.20
Node3:192.168.114.30
前期准备:防火墙和核心防护,三台机器。
systemctl stop firewalld
setenforce 0
需要依赖java环境:
yum install -y java
java版本:
[root@Node1 data]#:java -version
openjdk version "1.8.0_412"
OpenJDK Runtime Environment (build 1.8.0_412-b08)
OpenJDK 64-Bit Server VM (build 25.412-b08, mixed mode)
下载安装zookeeper:
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
[root@Node1 data]#:wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
#解压
[root@Node1 data]#:tar xf apache-zookeeper-3.5.7-bin.tar.gz
[root@Node1 data]#:ls
apache-zookeeper-3.5.7-bin apache-zookeeper-3.5.7-bin.tar.gz
#移动到/usr/local/下并改名为zookeeper
[root@Node1 data]#:mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper
修改配置文件:
修改目录,和日志目录,添加集群信息
[root@Node1 data]#:cd /usr/local/zookeeper/conf/
[root@Node1 conf]#:ls
configuration.xsl log4j.properties zoo_sample.cfg
#先做个备份
[root@Node1 conf]#:cp -a zoo_sample.cfg zoo.cfg
[root@Node1 conf]#:vim zoo.cfg
......
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
......
server.1=192.168.114.10:3188:3288
server.2=192.168.114.20:3188:3288
server.3=192.168.114.30:3188:3288
集群信息:
server.A=B:C:D
#A是一个数字,表示这个是第几号服务器。集群模式下需要在zoo.cfg中dataDir指定的目录下创建一个文件myid,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
#B是这个服务器的地址。
#C是这个服务器Follower与集群中的Leader服务器交换信息的端口。
#D是万一集群中的Leader服务器宕机了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
在zookeeper目录下创建两个文件夹data,logs
[root@Node1 conf]#:cd ..
[root@Node1 zookeeper]#:mkdir logs data
[root@Node1 zookeeper]#:ls
bin conf data docs lib LICENSE.txt logs NOTICE.txt README.md README_packaging.txt
在每个节点生成serverid
[root@Node1 zookeeper]#:echo 1 > data/myid
将zookeeper远程传给另外两台服务器上:并修改serverid
[root@Node1 zookeeper]#:cd ..
[root@Node1 local]#:scp -r zookeeper 192.168.114.20:/usr/local/
[root@Node1 local]#:scp -r zookeeper 192.168.114.30:/usr/local/
#修改serverid
[root@Node2 zookeeper]#:echo 2 > data/myid
[root@Node3 zookeeper]#:echo 3 > data/myid
启动zookeeper
把其他两台启动后,再看状态:
[root@Node2 zookeeper]#:bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@Node3 zookeeper]#:bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
可以在Node2上看到Leader
5.2 部署kafka
准备kafka的安装包
[root@Node1 data]#:ls
apache-zookeeper-3.5.7-bin.tar.gz kafka_2.13-2.7.1.tgz
#解压到指定路径下
[root@Node1 data]#:tar xf kafka_2.13-2.7.1.tgz -C /usr/local/
[root@Node1 data]#:cd /usr/local/
做个软连接
[root@Node1 local]#:ln -s kafka_2.13-2.7.1/ kafka
进入配置文件
[root@Node1 local]#:cd kafka/config/
修改配置文件,修改以下配置项
[root@Node1 local]#:vim server.properties
......
broker.id=0
listeners=PLAINTEXT://192.168.114.10:9092
log.dirs=/usr/local/kafka/logs
zookeeper.connect=192.168.114.10:2181,192.168.114.20:2181,192.168.114.30:2181
......
21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=1、broker.id=2
broker.id=0
31行,指定监听的IP和端口,如果修改每个broker的IP需区分开来,也可保持默认配置不用修改
listeners=PLAINTEXT://192.168.114.10:9092
60行,kafka运行日志存放的路径,也是数据存放的路径
log.dirs=/usr/local/kafka/logs
123行设置连接zookeeper
zookeeper.connect=192.168.114.10:2181,192.168.114.20:2181,192.168.114.30:2181
其他两台服务器同理:
这里直接将Node1的配置文件传过去:
对Node2和Node3做个修改:
[root@Node2 local]#:cd /usr/local/kafka/config/
[root@Node2 config]#:vim server.properties
broker.id=1
listeners=PLAINTEXT://192.168.114.20:9092
创建logs文件夹:
[root@Node2 config]#:cd ..
[root@Node2 kafka]#:mkdir logs
[root@Node3 local]#:cd /usr/local/kafka/config/
[root@Node3 config]#:vim server.properties
broker.id=2
listeners=PLAINTEXT://192.168.114.30:9092
[root@Node3 config]#:cd ..
[root@Node3 kafka]#:mkdir logs
启动kafka:
[root@Node1 bin]#:cd /usr/local/kafka/bin/
查看三台服务器的端口,观察连接状态
Node2为Leader。与Node1和Node3连接
5.3 测试
1.创建topic:
[root@Node2 bin]#:./kafka-topics.sh --create --zookeeper 192.168.114.10:2181,192.168.114.20:2181,192.168.114.30:2181 --replication-factor 2 --partitions 3 --topic test
--zookeeper:定义 zookeeper 集群服务器地址,如果有多个 IP 地址使用逗号分割,一般使用一个 IP 即可
--replication-factor:定义分区副本数,1 代表单副本,建议为 2
--partitions:定义分区数
--topic:定义 topic 名称
2.查看当前服务器中所有的topic
[root@Node2 bin]#:./kafka-topics.sh --list --zookeeper 192.168.114.10:2181,192.168.114.20:2181,192.168.114.30:2181
test
--list:列出所有的topic
3.查看某个topic的详情
[root@Node1 bin]#:./kafka-topics.sh --describe --zookeeper 192.168.114.10:2181,192.168.114.20:2181,192.168.114.30:2181
Topic: test PartitionCount: 3 ReplicationFactor: 2 Configs: Topic: test Partition: 0 Leader: 1 Replicas: 1,0 Isr: 1,0Topic: test Partition: 1 Leader: 3 Replicas: 3,1 Isr: 3,1Topic: test Partition: 2 Leader: 0 Replicas: 0,3 Isr: 0,3
在任意一台主机上都能看到。
发布消息:
[root@Node2 bin]#:./kafka-console-producer.sh --broker-list 192.168.114.10:9092,192.168.114.20:9092,192.168.114.30:9092 --topic test
>1
>2
>3
>4
消费消息:
[root@Node3 bin]#:./kafka-console-consumer.sh --bootstrap-server 192.168.114.10:9092,192.168.114.20:9092,192.168.114.30:9092 --topic test --from-beginning
1
2
3
4
删除topic:
[root@Node3 bin]#:./kafka-topics.sh --delete --zookeeper 192.168.114.10:2181,192.168.114.20:2181,192.168.114.30 --topic test
Topic test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
---end---
相关文章:
分布式服务框架zookeeper+消息队列kafka
一、zookeeper概述 zookeeper是一个分布式服务框架,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:命名服务,状态同步,配置中心,集群管理等。 在分布式环境下,经常需要对应用/服…...
服务攻防-应用协议cve
Cve-2015-3306 背景: ProFTPD 1.3.5中的mod_copy模块允许远程攻击者通过站点cpfr和site cpto命令读取和写入任意文件。 任何未经身份验证的客户端都可以利用这些命令将文件从文件系统的任何部分复制到选定的目标。 复制命令使用ProFTPD服务的权限执行,…...
Springcloud之gateway的使用详解
官网地址:https://docs.spring.io/spring-cloud-gateway/docs/4.0.4/reference/html/ 1.网关入门 helloword 网关不依赖start-web 导入的pom: <!--gateway--> <dependency><groupIdorg.springframework.cloud</groupId><arti…...
中望CAD 建筑 v2024 解锁版下载、安装教程 (超强的CAD三维制图)
前言 中望CAD建筑版是一款国产CAD制图软件,专注于建筑设计领域。中望CAD建筑版拥有丰富多样的建筑图块和图案,完美兼容各类建筑图纸。同时,它提供了绘图标准规范,使绘图更加规范和专业。更值得一提的是,该软件还具备智…...
windows edge自带的pdf分割工具(功能)
WPS分割pdf得会员,要充值!网上一顿乱找,发现最简单,最好用,免费的还是回到Windows。 Windows上直接在edge浏览器打开PDF,点击 打印 按钮,页面下选择对应页数 打印机 选择 另存为PDF,然后保存就…...
HTML5实现好看的天气预报网站源码
文章目录 1.设计来源1.1 获取天气接口1.2 PC端页面设计1.3 手机端页面设计 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4…...
比较(八)利用python绘制指示器
比较(八)利用python绘制指示器 指示器(Indicators)简介 指示器是一系列相关图的统称,主要用于突出展示某一变量的实际值与目标值的差异,例如常见的数据delta、仪表盘、子弹图、水滴图等。 快速绘制 基于p…...
【体外诊断】ARM/X86+FPGA嵌入式计算机在医疗CT机中的应用
体外诊断 信迈科技提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板,以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显,提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口,扩展性强&…...
力扣 28找到字符串中第一个匹配项的下标 KMP算法
思路: 朴素匹配有很多步骤是多余的 KMP算法能够避免重复匹配 KMP算法主要是根据子串生成的next数组作为回退的依据,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。 这里讲一下为什么用模式串的最大公共前后缀…...
JavaScript(10)——匿名函数
匿名函数 没有名字的函数,无法直接使用。 使用方式: 函数表达式立即执行函数 函数表达式 将匿名函数赋值给一个变量,并且通过变量名称进行调用 let fn function(){ 函数体 } 调用: fn() 立即执行函数 语法: (function () {…...
图片上传成功却无法显示:静态资源路径配置问题解析
1、故事的背景 最近,有个学弟做了一个简单的后台管理页面。于是他开始巴拉巴拉撘框架,写代码,一顿操作猛如虎,终于将一个简单的壳子搭建完毕。但是在实现功能:点击头像弹出上传图片进行头像替换的时候,卡壳…...
【转盘案例-弹框-修改Bug-完成 Objective-C语言】
一、我们来看示例程序啊 1.旋转完了以后,它会弹一个框,这个框,是啥, Alert 啊,AlertView 也行, AlertView,跟大家说过,是吧,演示过的啊,然后,我们就用iOS9来做了啊,完成了以后,我们要去弹一个框, // 弹框 UIAlertController *alertController = [UIAlertContr…...
Perl 基础语法
Perl 基础语法 Perl 是一种高级、解释型、动态编程语言,广泛用于CGI脚本、系统管理、网络编程、以及其他领域。Perl 以其强大的文本处理能力和简洁的语法而闻名。本文将详细介绍 Perl 的基础语法,帮助读者快速入门。 1. Perl 变量和数据类型 1.1 变量…...
【嵌入式开发之标准I/O】二进制文件的读写及实验
文本文件和二进制的区别 文本文件和二进制文件的区别主要在于它们的编码方式和数据组织方式。 编码方式:文本文件是基于字符编码的文件,常见的编码有ASCII编码、UNICODE编码等。这些编码将字符映射到特定的二进制值,使得字符可以…...
Arduino学习笔记1——IDE安装与起步
一、IDE安装 去浏览器直接搜索Arduino官网,点击Software栏进入下载界面,选择Windows操作系统: 新版IDE下载不需要提前勾选所下载的拓展包,下载好后直接点击安装即可。 安装好后打开Arduino IDE,会自动开始下载所需的…...
一个注解解决重复提交问题
一、前言 在应用系统中提交是一个极为常见的功能,倘若不加管控,极易由于用户的误操作或网络延迟致使同一请求被发送多次,从而生成重复的数据记录。针对用户的误操作,前端通常会实现按钮的 loading 状态,以阻…...
在qt的c++程序嵌入一个qml窗口
//拖拽一个QQuickWidget c端和qml通信的桥梁 找到qml的main.qml的路径 ui->quickWidget->setSource(QUrl::fromLocalFile("../../../code/main.qml"));// QML 与 Qt Widgets 通信//窗口就成了一个类实例对象pRoot (QObject*)ui->quickWidget->rootObje…...
Vue的依赖注入:组件树中的共享数据与功能
引言 在构建大型前端应用时,组件间的通信和状态共享是一个常见问题。Vue.js 提供了一种类似于 React 的 Context 机制的依赖注入系统,允许开发者在组件树中共享数据和功能。provide 和 inject 是 Vue 依赖注入的两个关键概念。本文将深入探讨 Vue 的依赖注入机制,讨论如何使…...
softmax 函数的多种实现方式 包括纯C语言、C++版本、Eigen版本等
softmax 函数的多种实现方式 包括纯C语言、C版本、Eigen版本等 flyfish 先看这里Softmax函数介绍 版本1 规矩的写法 #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <cmath>// 计算 softmax 的函…...
R语言学习笔记11-读取csv-xlsx-txt-json-pdf-lua格式文件
R语言学习笔记11-读取csv-xlsx-txt-json-pdf-lua格式文件 读取csv使用base的 read.csv 函数使用 readr 包的 read_csv 函数 读取xlsx使用 xlsx 包的 read.xlsx 函数使用 readxl 包的 read_excel 函数 读取txt使用base的文件读取函数 readLines使用 readr 包的 read_lines 函数 …...
Vue的计算属性和方法有什么区别
Vue中的计算属性(computed)和方法(methods)都是用于处理数据和逻辑的重要特性,但它们之间存在一些关键的区别。以下是两者的主要区别: 1. 缓存性 计算属性:计算属性是基于它们的依赖进行缓存的…...
学生成绩管理系统(C语言)
系统分析 1. 主菜单的实现 2. 增加人员功能的实现 3. 删除数据功能的实现 4. 编辑人员功能的实现 5. 排序功能的实现 6. 输出功能 7. 查找信息功能 具体代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 100000typedef struc…...
C语言 通讯录管理 完整代码
这份代码,是我从网上找的。目前是能运行。我正在读。有些不懂的地方,等下再记录下来。 有些地方的命名,还需要重新写一下。 比如: PersonInfo* info &address_book->all_address[address_book->size]; 应该改为: Perso…...
2024北京国际智能工厂及自动化展览会亮点前瞻
随着“工业创新,智造未来”的浪潮席卷而来,2024年度北京国际智能工厂及自动化与工业装配展览会定于8月1日至3日在中国国际展览中心(顺义新馆)盛大开幕。本次展会汇聚了智能制造与自动化技术的最新成果,通过三展联动的创…...
《网络安全等级保护制度详解》
网络安全等级保护制度是我国网络安全领域的一项重要制度,旨在保障网络安全,维护国家安全、社会秩序和公共利益。 网络安全等级保护制度主要包含以下几个关键方面: 等级划分 根据信息系统在国家安全、经济建设、社会生活中的重要程度ÿ…...
使用Wanderboat AI 来规划到巴黎的旅行计划
Wanderboat AI 平台是一个由 GPT-4 驱动的智能旅行规划工具,旨在通过自然对话和多模式互动,为用户提供个性化的旅行行程。以下是该平台的架构和使用方法: 平台架构 GPT-4 驱动:平台利用 GPT-4 的强大自然语言处理能力&#x…...
基于YOLO8的目标检测系统:开启智能视觉识别之旅
文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 target_dec_app.py 二、核心代码介绍篇2.1 target_dec_app.py2.2 scan_taskflow.py 三、结语 在线体验 基于YOLO8的目标检测系统 基于opencv的摄像头…...
实验07 接口测试postman
目录 知识点 1 接口测试概念 1.1为什么要做接口测试 1.2接口测试的优点 1.3接口测试概念 1.4接口测试原理和目的 2 接口测试内容 2.1测什么 2.1.1单一接口 2.1.2组合接口 2.1.3结构检查 2.1.4调用方式 2.1.5参数格式校验 2.1.6返回结果 2.2四大块 2.2.1功能逻辑…...
C++常用但难记的语法
模板函数的声明和定义必须在同一个文件中。 C中每一个对象所占用的空间大小,是在编译的时候就确定的,在模板类没有真正的被使用之前,编译器是无法知道,模板类中使用模板类型的对象的所占用的空间的大小的。只有模板被真正使用的时…...
Qt 快速保存配置的方法
Qt 快速保存配置的方法 一、概述二、代码1. QFileHelper.cpp2. QSettingHelper.cpp 三、使用 一、概述 这里分享一下,Qt界面开发时,快速保存界面上一些参数配置的方法。 因为我在做实验的时候,界面上可能涉及到很多参数的配置,我…...
律师事务所网站设计/营销型网站建设价格
Python 近两年一直霸占编程语言排行榜 Top3,火热程度有目共睹。这也让刚入行的程序员,甚至 BATJ 的技术大牛,都意识到 Python 对于一个程序员职业发展的重要性,将其作为第一/第二开发语言去学习。虽然 Python 以简单易学著称&…...
装修网站合作/百度关键词指数查询
ROS支持多机互通,可以设置一台主机,多台从机,主机中运行roscore,启动master节点,从机直接运行其他节点,在配置好的机器之间就可以互相通信了,就像在同一台机器上一样。 具体应该如何配置呢&…...
在网站上做教育直播平台多少钱/淘特app推广代理
另外%f标识的数会被当成double读取,即取出8个字节读取。...
网站做支付链接安全吗/抖音seo怎么收费
1: 实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一: 将字符串的第一个元素赋给一个变量temp;将字符串后面的元素依次向前挪一位;如果左旋一次以上循环1,2步骤; #defi…...
html网页制作表格代码/seo数据分析
参考文档:https://blog.51cto.com/bovin/2170723Docker图形化管理工具之Portainer1 这里的portainer 的部署采用的是docker stack deploy -c 文件的方式部署的2 这里面关于docker 远程通信的方式端口打开的方法.我这里是Centos7.5,注意集群中的每个节点要打开这个操…...
怎样给公司做网站/seo竞价
combo-tree是一款jQuery带多选和过滤功能的树状结构下拉框插件。通过该插件,可以在下拉框中生成指定数据结构的目录树,提供单选和多选,以及过滤功能。它的特点有:在下拉框中显示树状结构。支持单选和多选。返回选择数据的 title 或…...