zookeeper机制及消息队列kafka集群部署

news2025/5/20 23:52:48

目录

  • 一、zookeeper
    • 1、zookeeper简介
    • 2、zookeeper特点
    • 3、zookeeper工作模式及机制
    • 4、zookeeper应用场景及选举机制
    • 5、zookeeper集群部署
  • 二、消息队列kafka
    • 1、为什么要有消息队列
    • 2、使用消息队列的好处
    • 3、kafka简介
    • 4、kafka特点
    • 5、kafka系统架构名词介绍
    • 6、Kafka架构及流程
    • 7、kafka集群部署
  • 三、Kafka 架构深入
    • 1、Kafka 工作流程及文件存储机制
    • 2、 数据可靠性保证
    • 3、 数据一致性问题
    • 4、 ack 应答机制
    • 5、Filebeat+Kafka+ELK部署


一、zookeeper

1、zookeeper简介

Zookeeper:开源分布式的服务,为分布式框架提供协调服务的apache项目

2、zookeeper特点

①、zookper是一个领导者,多个跟随着组成

②、集群中有半数以上节点存活,集群正常服务,奇数台最小3台

③、全局数据一致,每个server保存一份相同的数据副本,client无论连接到那台server,数据都一样

④、更新请求顺序执行,来自同一个client更新请求按照其发送顺序一次执行,先进先出

⑤、原子性,要么成功要么失败

3、zookeeper工作模式及机制

Zookeeper工作模式:文件系统+通知机制
在这里插入图片描述

工作机制:

1、每个服务端上线时需要到zookeeper集群注册信息

2、客户端从zookeeper集群获取在线服务端信息列表并监听

3、服务端上线下线时,zookeeper需要更新列表信息并通知客户端

4、客户端接收到通知重新获取zookeeper在线服务器列表

4、zookeeper应用场景及选举机制

应用场景:

统一命名服务、统一配置管理、统一集群管理、服务节点动态上下线、软负载均衡

选举机制:

第一次启动选举机制:

服务器1启动,自己投自己一票myid(可以自己设置集群中不能重复)为1,没有明确的leader处于locking状态

服务器2启动,自己投自己一票myid为2,服务器1因为2的myid大于1则投2一票,处于locking状态

服务器3启动,自己投自己一票myid为3,服务器1和2myid小则投服务器3,服务器3成为leader

服务器4启动,已经有leader则加入leader中成为从follower。

非第一次启动选举机制:

SID:服务器id,用来表示一台zookeeper集群汇总的机器,每台机器不能重复和myid一致

ZXID:事务id,ZXID是一个事务id,用来标识服务器状态的变更。与服务器对客户端更新请求处理逻辑速度有关

Epoch:每个leader任期的代号,没有leader时同一轮投票过程中的值是一样的,每投票一次这个数据增加

①、Epoch值大的直接胜出成为leader

②、epoch值相同事务id大的胜出

③、事务id相同则服务器id大的胜出

5、zookeeper集群部署

准备 3 台服务器做 Zookeeper 集群
192.168.154.10
192.168.154.11
192.168.154.12
1.安装前准备

//关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
//安装 JDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
//下载安装包
官方下载地址:https://archive.apache.org/dist/zookeeper/

2.安装 Zookeeper

cd /opt
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz
mv apache-zookeeper-3.6.3-bin /usr/local/zookeeper-3.6.3
//修改配置文件
cd /usr/local/zookeeper-3.6.3/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000   #通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒
initLimit=10    #Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量),这里表示为10*2s
syncLimit=5     #Leader和Follower之间同步通信的超时时间,这里表示如果超过5*2s,Leader认为Follwer死掉,并从服务器列表中删除Follwer
dataDir=/usr/local/zookeeper-3.6.3/data      ●修改,指定保存Zookeeper中的数据的目录,目录需要单独创建
dataLogDir=/usr/local/zookeeper-3.6.3/logs   ●添加,指定存放日志的目录,目录需要单独创建
clientPort=2181   #客户端连接端口
#添加集群信息
server.1=192.168.154.10:3188:3288
server.2=192.168.154.11:3188:3288
server.3=192.168.154.12: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 配置文件到其他机器上
scp /usr/local/zookeeper-3.6.3/conf/zoo.cfg 192.168.154.11:/usr/local/zookeeper-3.6.3/conf/
scp /usr/local/zookeeper-3.6.3/conf/zoo.cfg 192.168.154.12:/usr/local/zookeeper-3.6.3/conf/
//在每个节点上创建数据目录和日志目录
mkdir /usr/local/zookeeper-3.6.3/data
mkdir /usr/local/zookeeper-3.6.3/logs
//在每个节点的dataDir指定的目录下创建一个 myid 的文件
echo 1 > /usr/local/zookeeper-3.6.3/data/myid
echo 2 > /usr/local/zookeeper-3.6.3/data/myid
echo 3 > /usr/local/zookeeper-3.6.3/data/myid
//配置 Zookeeper 启动脚本
vim /etc/init.d/zookeeper.sh
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.6.3'
case $1 in
start)
	echo "---------- zookeeper 启动 ------------"
	$ZK_HOME/bin/zkServer.sh start
;;
stop)
	echo "---------- zookeeper 停止 ------------"
	$ZK_HOME/bin/zkServer.sh stop
;;
restart)
	echo "---------- zookeeper 重启 ------------"
	$ZK_HOME/bin/zkServer.sh restart
;;
status)
	echo "---------- zookeeper 状态 ------------"
	$ZK_HOME/bin/zkServer.sh status
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac
//	设置开机自启
chmod +x /etc/init.d/zookeeper.sh
chkconfig --add zookeeper.sh
//分别启动 Zookeeper
service zookeeper start
//查看当前状态
service zookeeper status

netstat -lntp | grep 2181

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、消息队列kafka

1、为什么要有消息队列

高并发环境下,同步请求来不及处理,请求往往会发生阻塞,比如大量请求并发访问数据库,导致行锁表,最后请求线程堆积过多,引发雪崩。

雪崩:高并发情况下redis服务器无法同时处理大量请求,导致rdis崩溃直接查询数据库。

2、使用消息队列的好处

1)解耦

允许独立的扩展或修改两边的处理过程,只有确保他们遵守同样的接口约束

2)可恢复性

系统一部分组件失效不会影响整个系统,消息队列降低了过程的耦合度,即使一个处理消息的进程挂掉了,加入队列中的消息仍然可以在系统恢复后被处理。

3)缓存

有助于控制和优化数据流经过的速度,解决生成消费信息的处理速度不一致的情况

4)灵活性&峰值处理能力

能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃

5)异步通信

允许用户把一个消息加入队列,但并不立即处理它。想向队列中放多少消息就放多少,在需要的时候去处理他们

3、消息队列的2种模式

点对点(一对一):消费者主动拉取数据,消费者将生产者生成的数据拉取完成则消费者将消息删除。

发布/订阅模式(一对多也称为观察者模式):消费者消费数据之后不会清除消息

1)、生产者发布消息到topic,同时有多个消费者

2)、观察者(实时观察消费者消费能力即处理数据能力)观察整个消息队列,根据消费者的能力配置,发送数据给消费者

3、kafka简介

kafka:是一个分布式的,支持分区的,多副本基于发布/订阅模式的消息队列(MQ message quene),主要用于日志和大数据实时处理

4、kafka特点

1)高吞吐量每秒钟可以处理几十万消息,延迟最低只是几毫秒。

2)持久性、可靠性,完善的消息存储机制存储到磁盘,保证数据的高效和持久化

3)分布式,生产者数据会存放在所有机器上,挂一台数据不会丢失。

4)容错性,允许集群中节点失败,允许副本-1个节点失败

5)高并发,支持千个客户端同时读写

5、kafka系统架构名词介绍

①broker:一台kafka服务器就是一个broker。一个集群由多个broker组成,一个broker可以容纳多个topic

②Produer:生产者。也就是写入消息的一方,将消息写入broker中

③Consumer:消费者。也就是读取消息的一方,从broker中读取消息

④Zookeeper:kafka使用zookeeper来管理集群的元数据,以及控制器的选举等操作。

⑤topic:主题。每一个消息都属于某个主题,kafka通过主题来划分消息,是一个逻辑上的分类

⑥partition:即分区

同一个主题下的消息还可以继续分成多个分区,一个分区只属于一个主题,kafka只保证partition中的数据是有序的,不保证topic中的不通partition数据是有序的,每个topic至少有一个partition,每个 partition 中的数据使用多个 segment 文件存储。

partition数据路由规则:

1.指定partition,则直接使用、 2.未指定partition但指定了key,根据key取模选择partition、3.都未指定则轮询选择partition

分区的原因:为什么在topic下有多个partition?

1.方便集群中扩展,每个partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了;

2.可以提高并发,因为可以以Partition为单位读写了;

⑦Replica:副本。一个分区可以有多个副本来提高容灾性,一般是设置一个分区2个副本

⑧Offset:偏移量。消费者存在zookeeper上的记录自己访问到什么地方

⑨leader负责读写,follow只负责复制和备份

6、Kafka架构及流程

1)、生产者生产数据传给broker即kafka服务器集群

2)、kafka集群将数据存储在topic主题中,每个topic主题中有多个分片(分片做了备份在其他topic)

3)、分片中存储数据,kafka集群注册在zookeeper中,zookeeper通知消费者kafka服务器在线列表

4)、消费者收到zookeeper通知的在线列表,从broker中拉取数据

5)、消费者保存偏移量到zookeeper中,以便记录自己宕机消费到什么地方
在这里插入图片描述

7、kafka集群部署

基于zookeeper的三台机器操作

1.安装 Kafka

cd /opt/
tar zxvf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka
//修改配置文件
cd /usr/local/kafka/config/
cp server.properties{,.bak}
vim server.properties
broker.id=021行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=1、broker.id=2
listeners=PLAINTEXT://192.168.154.10:909231行,指定监听的IP和端口,如果修改每个broker的IP需区分开来,也可保持默认配置不用修改
num.network.threads=3    #42行,broker 处理网络请求的线程数量,一般情况下不需要去修改
num.io.threads=8         #45行,用来处理磁盘IO的线程数量,数值应该大于硬盘数
socket.send.buffer.bytes=102400       #48行,发送套接字的缓冲区大小
socket.receive.buffer.bytes=102400    #51行,接收套接字的缓冲区大小
socket.request.max.bytes=104857600    #54行,请求套接字的缓冲区大小
log.dirs=/usr/local/kafka/logs        #60行,kafka运行日志存放的路径,也是数据存放的路径
num.partitions=1    #65行,topic在当前broker上的默认分区个数,会被topic创建时的指定参数覆盖
num.recovery.threads.per.data.dir=1    #69行,用来恢复和清理data下数据的线程数量
log.retention.hours=168    #103行,segment文件(数据文件)保留的最长时间,单位为小时,默认为7天,超时将被删除
log.segment.bytes=1073741824    #110行,一个segment文件最大的大小,默认为 1G,超出将新建一个新的segment文件
zookeeper.connect=192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181123行,配置连接Zookeeper集群地址
//修改环境变量
vim /etc/profile
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

source /etc/profile
//配置 Zookeeper 启动脚本
vim /etc/init.d/kafka.sh
#!/bin/bash
#chkconfig:2345 22 88
#description:Kafka Service Control Script
KAFKA_HOME='/usr/local/kafka'
case $1 in
start)
	echo "---------- Kafka 启动 ------------"
	${KAFKA_HOME}/bin/kafka-server-start.sh -daemon ${KAFKA_HOME}/config/server.properties
;;
stop)
	echo "---------- Kafka 停止 ------------"
	${KAFKA_HOME}/bin/kafka-server-stop.sh
;;
restart)
	$0 stop
	$0 start
;;
status)
	echo "---------- Kafka 状态 ------------"
	count=$(ps -ef | grep kafka | egrep -cv "grep|$$")
	if [ "$count" -eq 0 ];then
        echo "kafka is not running"
    else
        echo "kafka is running"
    fi
;;
*)
    echo "Usage: $0 {start|stop|restart|status}"
esac
//设置开机自启
chmod +x /etc/init.d/kafka.sh
chkconfig --add kafka.sh

//分别启动 Kafka
service kafka start

service kafka status
netstat -lntp | grep 9092

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Kafka 命令行操作

//创建topic
kafka-topics.sh --create --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 --replication-factor 2 --partitions 3 --topic test

在这里插入图片描述

–zookeeper:定义 zookeeper 集群服务器地址,如果有多个 IP 地址使用逗号分割,一般使用一个 IP 即可
–replication-factor:定义分区副本数,1 代表单副本,建议为 2
–partitions:定义分区数
–topic:定义 topic 名称

//查看当前服务器中的所有 topic
kafka-topics.sh --list --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 

在这里插入图片描述

//查看某个 topic 的详情
kafka-topics.sh  --describe --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 

在这里插入图片描述

//发布消息
kafka-console-producer.sh --broker-list 192.168.154.10:9092,192.168.154.11:9092,192.168.154.12:9092  --topic test

在这里插入图片描述

//消费消息
kafka-console-consumer.sh --bootstrap-server 192.168.154.10:9092,192.168.154.11:9092,192.168.154.12:9092 --topic test --from-beginning

在这里插入图片描述

–from-beginning:会把主题中以往所有的数据都读取出来

//修改分区数
kafka-topics.sh --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 --alter --topic test --partitions 6

在这里插入图片描述

查看 topic 的详情
kafka-topics.sh  --describe --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 

在这里插入图片描述

//删除 topic
kafka-topics.sh --delete --zookeeper 192.168.154.10:2181,192.168.154.11:2181,192.168.154.12:2181 --topic test

在这里插入图片描述

三、Kafka 架构深入

1、Kafka 工作流程及文件存储机制

Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的。

topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。Producer 生产的数据会被不断追加到该 log 文件末端,且每条数据都有自己的 offset。 消费者组中的每个消费者,都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费。

由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。每个 segment 对应两个文件:“.index” 文件和 “.log” 文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic名称+分区序号。例如,test 这个 topic 有三个分区, 则其对应的文件夹为 test-0、test-1、test-2。

index 和 log 文件以当前 segment 的第一条消息的 offset 命名。

“.index” 文件存储大量的索引信息,“.log” 文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址。

2、 数据可靠性保证

为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到 producer 发送的数据后, 都需要向 producer 发送 ack(acknowledgement 确认收到),如果 producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

3、 数据一致性问题

LEO:指的是每个副本最大的 offset;
HW:指的是消费者能见到的最大的 offset,所有副本中最小的 LEO。

(1)follower 故障
follower 发生故障后会被临时踢出 ISR(Leader 维护的一个和 Leader 保持同步的 Follower 集合),待该 follower 恢复后,follower 会读取本地磁盘记录的上次的 HW,并将 log 文件高于 HW 的部分截取掉,从 HW 开始向 leader 进行同步。等该 follower 的 LEO 大于等于该 Partition 的 HW,即 follower 追上 leader 之后,就可以重新加入 ISR 了。

(2)leader 故障
leader 发生故障之后,会从 ISR 中选出一个新的 leader, 之后,为保证多个副本之间的数据一致性,其余的 follower 会先将各自的 log 文件高于 HW 的部分截掉,然后从新的 leader 同步数据。

注:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复。

4、 ack 应答机制

对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等 ISR 中的 follower 全部接收成功。所以 Kafka 为用户提供了三种可靠性级别,用户根据对可靠性和延迟的要求进行权衡选择。

当 producer 向 leader 发送数据时,可以通过 request.required.acks 参数来设置数据可靠性的级别:
●0:这意味着producer无需等待来自broker的确认而继续发送下一批消息。这种情况下数据传输效率最高,但是数据可靠性确是最低的。当broker故障时有可能丢失数据。

●1(默认配置):这意味着producer在ISR中的leader已成功收到的数据并得到确认后发送下一条message。如果在follower同步成功之前leader故障,那么将会丢失数据。

●-1(或者是all):producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。但是如果在 follower 同步完成后,broker 发送ack 之前,leader 发生故障,那么会造成数据重复。

三种机制性能依次递减,数据可靠性依次递增。

注:在 0.11 版本以前的Kafka,对此是无能为力的,只能保证数据不丢失,再在下游消费者对数据做全局去重。在 0.11 及以后版本的 Kafka,引入了一项重大特性:幂等性。所谓的幂等性就是指 Producer 不论向 Server 发送多少次重复数据, Server 端都只会持久化一条。

5、Filebeat+Kafka+ELK部署

在之前的基础上已经部署 Zookeeper+Kafka 集群

192.168.154.13 Filebeat
192.168.154.14 Elasticsearch
192.168.154.15 Logstash Kiabana

在这里插入图片描述
1.部署 Filebeat

cd /usr/local/filebeat
vim filebeat.yml

在这里插入图片描述

在这里插入图片描述
2.启动 filebeat

./filebeat -e -c filebeat.yml

3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件

/etc/logstash/conf.d
vim apache.conf
input {
    kafka {
        bootstrap_servers => "192.168.154.10:9092,192.168.154.11:9092,192.168.154.12:9092"
        topics  => "apache"
        type => "filebeat-kafka"
        codec => "json"
        auto_offset_reset => "latest"
        decorate_events => true
  }
}

output {
    if "access" in [tags] {
    elasticsearch {
        hosts => ["192.168.154.14:9200"]
        index => "apache_right-%{+YYYY.MM.dd}"
    }
   }
   if "error" in [tags] {
     elasticsearch {
        hosts => ["192.168.154.14:9200"]
        index => "apache_error-%{+YYYY.MM.dd}"
    }
   }
    stdout { codec => rubydebug }
}

在这里插入图片描述

4.启动 logstash

logstash -f filebeat.conf

5.浏览器访问http://192.168.154.15:5601
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?

LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2(Web)与 Vue3(VSCode、lDEA)中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码,还能为后续升级 Vue3 减少一定阻碍。 那么,同时兼容 Vue…

Shell脚本攻略:文本三剑客之grep

目录 一、理论 1.grep 2.sort 3.uniq 4.tr 5.cut 6.split 7.paste 二、实验 1. grep 2.sort 3.uniq 4.tr 5.cut 6.split 7.统计当前主机的连接状态 8.统计当前连接主机数 一、理论 1.grep (1)概念 grep是Linux中最常用的”文本处理工…

Redis-主从复制以及哨兵

前言 ​ 要避免单点故障,即保证高可用,便需要冗余(副本)方式提供集群服务。而Redis 提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。在 Redis 主从集群中,哨兵机制…

共享打印机出现文件无法打印|0X00000709错误的解决方案|win7 win11

现在办公室通常会使用打印机共享功能,在使用打印机共享中会出现在[文件无法打印,因为在“\ip\打印机名 在Ne02:”上发生错误] 这时,我们输入相应IP重新共聚共享端打印机,就会出现“0X00000709”的错误。 回到共享端…

Rust in Action笔记 第三章 复合数据类型

通过#[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZI50wIh1-1685693144796)(null)]),不带感叹号的#[allow]仅为下一行代码提供属性,属性有多种分类,文中出现的allow属性称为诊断属性(Diag…

僵尸网络检测数据集CTU-13介绍及使用

首先感谢爱学习的大白菜爱学习的大白菜的博客_CSDN博客-刷题,ACM之路,机器学习领域博主对CTU-13数据集的描述的翻译,这使得后面对这份数据集的理解更加容易。 参考CTU-13数据集_爱学习的大白菜的博客-CSDN博客 由于要做僵尸网络检测的工作,但是没有相关…

权限维持-HOOK-DLL加载

前言 继续来研究关于权限维持的方法,这里希望与各位一起加油。 这里的HOOK其实指的就是Hook PasswordChangeNotify 其中PasswordChangeNotify是一个函数,如果修改的密码符合要求,那么PasswordChangeNotify在系统上同步更新密码,然…

网讯1860网卡网络流控导致网络异常问题

1、背景介绍 目前使用的飞腾平台中采用国产化WX1860千兆网卡芯片,交换芯片采用盛科的CTC8096。示意图如下: 当其中一块飞腾系统异常时,发现整个平台内所有的千兆网均出现异常,任意两个飞腾千兆网均无法ping通。 2、问题排查 一…

什么是边缘计算网关以及什么是边缘计算?

边缘计算 边缘计算是一种分布式计算范例,使计算任务从数据中心或云端移向离数据源更近的地方,即网络的"边缘"。这样做的目的是降低网络延迟,提高数据处理速度,同时减少不必要的数据传输,节省带宽和存储资源。…

如何实现折起来的效果

如何实现范围裁剪和旋转效果。 日常 我还是希望自己的博客能够存在一些温度,而不是冷冰冰的技术分享,我希望留下专属于我自己的个性,就像鸿洋和郭霖的公众号一样。他们会在自己的博客顶端随便写一下最近的新闻什么的,而我不同&a…

msvcr110.dll丢失的解决方法哪种好,推荐这个4种解决方法

Msvcr110.dll是Microsoft Visual Studio 2012的运行时组件之一。这个DLL文件包含一些用于Windows操作系统的C函数库。当程序需要这些函数时,它们会被加载到内存中,以便程序可以使用它们。 当计算机提示“msvcr110.dll丢失”时,可能出现以下影…

基于matlab使用接收机工作特征 (ROC) 曲线评估相干和非相干系统性能

一、前言 此示例说明如何使用接收机工作特征 (ROC) 曲线评估相干和非相干系统的性能。该示例假设检测器在加性复杂高斯白噪声环境中工作。 ROC曲线通常用于评估雷达或声纳探测器的性能。ROC 曲线是给定信噪比 (SNR) 的检测概率 &a…

介绍CSDN的阅览器

大家好!今天给大家一款由csdn官方打造的一个界面阅览器 意思就是靠我们自带的阅览器改变他的外观方式,这就是我用了CSDN阅览器之后的效果图 然后我们也可以清晰看到我们整个界面,对于我们经常写csdn博客的小伙伴来说是很方便,因为…

配电室动环监控系统的功能与应用

来源:山东仁科www.rkckth.com 六月天的 【配电室】,表面 “ 风平浪静 ”,实则 “ 多面夹击 ”。 步入六月份的夏季由高温掌控,为营造舒适凉爽的生活环境,人们的用电量也进入“汛期”,急速上涨&#xff0c…

亚信前端面试真题

目录 1.如何设置一个元素不可见? 2.谷歌浏览器设置比12px还小的字体? 3.深拷贝实现方法???????? 4.防抖节流实现原理???? 5.遍历循环数组方法????? 6.vue的双向绑定????? 7.compute和watche…

【MySQL高级篇笔记-InnoDB数据存储结构 (中) 】

此笔记为尚硅谷MySQL高级篇部分内容 目录 一、数据库的存储结构:页 1、磁盘与内存交互基本单位:页 2、页结构概述 3、页的大小 4、页的上层结构 二、页的内部结构 1、分三个部分看 2、从数据页角度看B 树如何查询 三、InnoDB行格式(或记录格式) 四、区、段与碎片区…

测试环境一键发布

背景 目前公司项目发布测试环境不够自动化,每次需要手动打包并且手动更新,影响开发效率 流程图 而且因为是本地手动发布,容易失误造成一些不必要的麻烦: 远端代码有更新,忘记拉取代码 快速发布,本地代码…

Redis7实战加面试题-高阶篇(Redis为什么快?高性能设计之epoll和IO多路复用深度解析)

多路复用要解决的问题 并发多客户端连接,在多路复用之前最简单和典型的方案:同步阻塞网络IO模型 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求),比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读取数据…

Nginx:Nginx优化与防盗链

Nginx:Nginx优化与防盗链 一、配置Nginx隐藏版本号二、修改Nginx用户与组三、配置Nginx网页缓存时间3.1 修改配置文件3.2 页面缓存验证 四、配置Nginx实现连接超时五、更改Nginx运行进程数六 、配置Nginx实现网页压缩功能七、配置Nginx实现防盗链 一、配置Nginx隐藏…

[数据集][目标检测]目标检测数据集蜜蜂4073张1类别VOC格式

出品方:未来自主研究中心(FIRC) 数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):7398 标注类别数&#xff…