消息中间件Kafka分布式数据处理平台+ZooKeeper
目录
一.消息队列基本介绍
1.为什么需要消息队列(MQ)
2.使用消息队列的好处
2.1 解耦
2.2 可恢复性
2.3 缓冲
2.4 灵活性 & 峰值处理能力
2.5 异步通信
3.消息队列的两种模式
3.1 点对点模式
3.2 发布/订阅模式
二.Kafka基本介绍
1.Kafka是什么?
2.Kafka的特性
3.Kafka系统架构
3.1 Broker(服务代理节点)
3.2 Producer(生产者)
3.3 Consumer(消费者)
3.4 Consumer Group(消费组)
3.5 ZooKeeper
3.6 Topic(主题)
3.7 Partition(分区)
3.8 Replica(副本)
3.9 Leader and Follower
3.10 Offset(偏移量)
三.部署ZooKeeper+Kafka集群
1.环境准备
2.下载安装安装包
3.修改配置文件
4.设置环境变量
5.配置ZooKeeper启动脚本
6.设置开机自启并启动
7.Kafka命令行操作
7.1 创建topic
7.2 查看当前服务器中的所有topic
7.3 查看某个topic的详情
7.4 发布消息
7.5 消费消息
7.6 修改分区数
7.7 删除topic
一.消息队列基本介绍
1.为什么需要消息队列(MQ)
主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多, 从而触发 too many connection 错误, 引发雪崩效应。
我们使用消息队列,通过异步处理请求,从而缓解系统的压力。消息队列常应用于异步处理,流量削峰,应用解耦,消息通讯等场景当前比较常见的 MQ 中间件有 ActiveMQ、RabbitMQ、RocketMQ、Kafka 等。
2.使用消息队列的好处
2.1 解耦
允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
耦合(非解耦)
- 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
- 在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
- 分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
解耦
- 解耦,字面意思就是解除耦合关系。
- 在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
- 设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。
- 观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。
2.2 可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
2.3 缓冲
有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
2.4 灵活性 & 峰值处理能力
在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
2.5 异步通信
很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
3.消息队列的两种模式
3.1 点对点模式
(一对一,消费者主动拉取数据,消息收到后消息清除)
消息生产者生产消息发送到消息队列中, 然后消息消费者从消息队列中取出并且消费消息。 消息被消费以后, 消息队列中不再有存储,所以消息消费者不可能消费到已经被消费的消息。消息队列支持存在多个消费者, 但是对一个消息而言,只会有一个消费者可以消费。
-
每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中)
-
发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息
-
接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息
3.2 发布/订阅模式
(一对多, 又叫观察者模式,消费者消费数据之后不会清除消息)
消息生产者 (发布)将消息发布到 topic 中,同时有多个消息消费者 (订阅)消费该消息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
发布/订阅模式是定 义对象间一种—对多的依赖关系,使得每当一个对象 ( 目标对象)的状态发生改变, 则所有依赖干它的对象 (观察者对象)都会得到通知并自动更新。
-
每个消息可以有多个订阅者
-
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息
-
为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行
二.Kafka基本介绍
1.Kafka是什么?
Kafka 是一个分布式的基于发布/订阅模式的消息队列(MQ,Message Queue),主要应用于大数据实时处理领域。
最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于 Zookeeper 协调的分布式消息中间件系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如基于 hadoop 的批处理系统、低延迟的实时系统、Spark/Flink 流式处理引擎,nginx 访问日志,消息服务等等,用 scala 语言编写,Linkedin 于 2010 年贡献给了 Apache 基金会并成为顶级开源项目。
官方网址:Apache Kafka
2.Kafka的特性
-
高吞吐量、低延迟
Kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒。每个 topic 可以分多个 Partition,Consumer Group 对 Partition 进行消费操作,提高负载均衡能力和消费能力。 -
可扩展性
kafka 集群支持热扩展 -
持久性、可靠性
消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 -
容错性
允许集群中节点失败(多副本情况下,若副本数量为 n,则允许 n-1 个节点失败) -
高并发
支持数干个客户端同时读写
3.Kafka系统架构
- 生产者生产数据传给broker即kafka服务器集群
- kafka集群将数据存储在topic主题中,每个topic主题中有多个分片(分片做了备份在其他topic)
- 分片中存储数据,kafka集群注册在zookeeper中,zookeeper通知消费者kafka服务器在线列表
- 消费者收到zookeeper通知的在线列表,从broker中拉取数据
- 消费者保存偏移量到zookeeper中,以便记录自己宕机消费到什么地方
图中展示出了kafka的一些重要组件,接下来逐个介绍一下。
3.1 Broker(服务代理节点)
- 服务代理节点,其实就是一个kafka实例或服务节点,多个broker构成了kafka集群
- 一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic
3.2 Producer(生产者)
- 生产者,也就是写入消息的一方,将消息写入broker中
- 即数据的发布者,该角色将消息 push 发布到 Kafka 的 topic 中
- broker 接收到生产者发送的消息后,broker 将该消息追加到当前用于追加数据的 segment 文件中
- 生产者发送的消息,存储到一个 partition 中,生产者也可以指定数据存储的 partition
3.3 Consumer(消费者)
- 消费者,也就是读取消息的一方,从broker中pull 拉取数据
- 可以消费多个 topic 中的数据
3.4 Consumer Group(消费组)
- 消费者组,由多个 consumer 组成
- 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。可为每个消费者指定组名,若不指定组名则属于默认的组
- 将多个消费者集中到一起去处理某一个 Topic 的数据,可以更快的提高数据的消费能力
- 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费,防止数据被重复读取
- 消费者组之间互不影响
- 消费组。一个或多个消费者构成一个消费组,不同的消费组可以订阅同一个主题的消息且互不影响
3.5 ZooKeeper
- kafka使用zookeeper来管理集群的元数据 meta 信息,以及控制器的选举等操作
- 由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费
- zookeeper的作用就是,生产者push数据到kafka集群,就必须要找到kafka集群的节点在哪里,这些都是通过zookeeper去寻找的。消费者消费哪一条数据,也需要zookeeper的支持,从zookeeper获得offset,offset记录上一次消费的数据消费到哪里,这样就可以接着下一条数据进行消费
3.6 Topic(主题)
- 可以理解为一个队列,生产者和消费者面向的都是一个 topic。
- 类似于数据库的表名或者 ES 的 index
- 物理上不同 topic 的消息分开存储
3.7 Partition(分区)
- 分区,同一个主题下的消息还可以继续分成多个分区,一个分区只属于一个主题
- 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分割为一个或多个 partition,每个 partition 是一个有序的队列。Kafka 只保证 partition 内的记录是有序的,而不保证 topic 中不同 partition 的顺序
- 每个 topic 至少有一个 partition,当生产者产生数据的时候,会根据分配策略选择分区,然后将消息追加到指定的分区的队列末尾
Partation 数据路由规则:
1.指定了 patition,则直接使用
2.未指定 patition 但指定 key(相当于消息中某个属性),通过对 key 的 value 进行 hash 取模,选出一个 patition
3.patition 和 key 都未指定,使用轮询选出一个 patition每条消息都会有一个自增的编号,用于标识消息的偏移量,标识顺序从 0 开始。
每个 partition 中的数据使用多个 segment 文件存储。
如果 topic 有多个 partition,消费数据时就不能保证数据的顺序。严格保证消息的消费顺序的场景下(例如商品秒杀、 抢红包),需要将 partition 数目设为 1。
- broker 存储 topic 的数据。如果某 topic 有 N 个 partition,集群有 N 个 broker,那么每个 broker 存储该 topic 的一个 partition。
- 如果某 topic 有 N 个 partition,集群有 (N+M) 个 broker,那么其中有 N 个 broker 存储 topic 的一个 partition, 剩下的 M 个 broker 不存储该 topic 的 partition 数据。
- 如果某 topic 有 N 个 partition,集群中 broker 数目少于 N 个,那么一个 broker 存储该 topic 的一个或多个 partition。在实际生产环境中,尽量避免这种情况的发生,这种情况容易导致 Kafka 集群数据不均衡。
3.8 Replica(副本)
- 副本,一个分区可以有多个副本来提高容灾性
- 为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower
3.9 Leader and Follower
- 分区有了多个副本,那么就需要有同步方式。kafka使用一主多从进行消息同步,主副本提供读写的能力,而从副本不提供读写,仅仅作为主副本的备份
- 每个 partition 有多个副本,其中有且仅有一个作为 Leader,Leader 是当前负责数据的读写的 partition
- Follower 跟随 Leader,所有写请求都通过 Leader 路由,数据变更会广播给所有 Follower,Follower 与 Leader 保持数据同步。Follower 只负责备份,不负责数据的读写。
- 如果 Leader 故障,则从 Follower 中选举出一个新的 Leader。
- 当 Follower 挂掉、卡住或者同步太慢,Leader 会把这个 Follower 从 ISR(Leader 维护的一个和 Leader 保持同步的 Follower 集合) 列表中删除,重新创建一个 Follower
3.10 Offset(偏移量)
- 可以唯一的标识一条消息,分区中的每一条消息都有一个所在分区的偏移量,这个偏移量唯一标识了该消息在当前这个分区的位置,并保证了在这个分区的顺序性,不过不保证跨分区的顺序性
- 偏移量决定读取数据的位置,不会有线程安全的问题,消费者通过偏移量来决定下次读取的消息(即消费位置)
- 消息被消费之后,并不被马上删除,这样多个业务就可以重复使用 Kafka 的消息
- 某一个业务也可以通过修改偏移量达到重新读取消息的目的,偏移量由用户控制
- 消息最终还是会被删除的,默认生命周期为 1 周(7*24小时)
三.部署ZooKeeper+Kafka集群
1.环境准备
服务器类型 | 系统和IP地址 | 需要安装的组件 |
---|---|---|
Zookeeper服务器1 | CentOS7.4(64 位) 192.168.79.250 | jdk、ZooKeeper |
Zookeeper服务器2 | CentOS7.4(64 位) 192.168.79.26 | jdk、ZooKeeper |
Zookeeper服务器3 | CentOS7.4(64 位) 192.168.79.27 | jdk、ZooKeeper |
需要部署ZooKeeper集群(教程见上一章节)三台服务器步骤相同,此处只展示一台设备的搭建
2.下载安装安装包
1. #下载安装包
cd /opt
wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2.13-2.7.1.tgz1.1 #有压缩包就直接拖进来
cd /opt
rz -E2. #安装Kafka
tar zxvf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka
3.修改配置文件
1. #移动并将配置文件进行备份
cd /usr/local/kafka/config/
cp server.properties{,.bak}2. #修改
vim server.properties
-------------------------------------------
broker.id=0
#21行,broker的全局唯一编号,每个broker不能重复,因此要在其他机器上配置 broker.id=1、broker.id=2listeners=PLAINTEXT://192.168.79.250:9092
#31行,指定监听的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.79.250:2181,192.168.79.26:2181,192.168.79.27:2181
#123行,配置连接Zookeeper集群地址
------------------------------------------------
以下演示为需要更改的部分(注意部分内容,不同主机配置不同)
4.设置环境变量
1. #修改环境变量
vim /etc/profile
----------------------------------------
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
-----------------------------------------2. #刷新配置文件
source /etc/profile3. #查看环境变量
echo $PATN
5.配置ZooKeeper启动脚本
vim /etc/init.d/kafka
------------------------------------------------
#!/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 ];thenecho "kafka is not running"elseecho "kafka is running"fi
;;
*)echo "Usage: $0 {start|stop|restart|status}"
esac
------------------------------------------------------------------
6.设置开机自启并启动
1. #设置开机自启
chmod +x /etc/init.d/kafka
chkconfig --add kafka2. #分别启动 Kafka
service kafka start
7.Kafka命令行操作
7.1 创建topic
kafka-topics.sh --create --zookeeper 192.168.79.250:2181,192.168.79.26:2181,192.168.79.27:2181 --replication-factor 2 --partitions 3 --topic test############################################
--zookeeper:定义 zookeeper 集群服务器地址,如果有多个 IP 地址使用逗号分割,一般使用一个 IP 即可
--replication-factor:定义分区副本数,1 代表单副本,建议为 2
--partitions:定义分区数
--topic:定义 topic 名称
可能出现的报错问题:
报错信息:
ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 2 larger than available brokers: 0(kafka.admin.TopicCommand$)
排错思路:
1.防火墙问题
解决方法: systemctl stop firewalld && setenforce 0
2.服务没全部起来
解决方法: service kafka status #查看状态 service kafka start #开启
3.配置文件出错
解决方法: vim server.properties 修改配置文件:可能是broker.id相同了?可能是指定监听的IP地址和端口写错了?可能格式有问题? 自己细心对比着排
7.2 查看当前服务器中的所有topic
kafka-topics.sh --list --zookeeper 192.168.79.250:2181,192.168.79.26:2181,192.168.79.27:2181
7.3 查看某个topic的详情
kafka-topics.sh --describe --zookeeper 192.168.79.250:2181,192.168.79.26:2181,192.168.79.27:2181
7.4 发布消息
kafka-console-producer.sh --broker-list 192.168.79.250:9092,192.168.79.26:9092,192.168.79.27:9092 --topic test
7.5 消费消息
kafka-console-consumer.sh --bootstrap-server 192.168.79.250:9092,192.168.79.26:9092,192.168.79.27:9092 --topic test --from-beginning
#--from-beginning:会把主题中以往所有的数据都读取出来
7.6 修改分区数
kafka-topics.sh --zookeeper 192.168.79.250:2181,192.168.79.26:2181,192.168.79.27:2181 --alter --topic test --partitions 6
7.7 删除topic
kafka-topics.sh --delete --zookeeper 192.168.79.250:2181,192.168.79.26:2181,192.168.79.27:2181 --topic test
相关文章:

消息中间件Kafka分布式数据处理平台+ZooKeeper
目录 一.消息队列基本介绍 1.为什么需要消息队列(MQ) 2.使用消息队列的好处 2.1 解耦 2.2 可恢复性 2.3 缓冲 2.4 灵活性 & 峰值处理能力 2.5 异步通信 3.消息队列的两种模式 3.1 点对点模式 3.2 发布/订阅模式 二.Kafka基本介绍 1.Kaf…...

Linux 用户文件磁盘网络进程指令
用户相关指令 useradd 用户名添加用户useradd -g 组名 用户名 向组添加用户passwd 用户名 设置密码id 用户名 查看用户名的具体信息cat /etc/passwd 查看创建了哪些用户su 用户名 切换用户名(不能获得环境变量)su - 用户名获得环境变量以及执行权…...
如何使用Socks5代理IP提高网络安全性
随着网络的快速发展,网络安全问题变得越来越重要。为了保障网络安全,人们普遍使用代理IP,其中Socks5代理IP是一种常用的选择。本文将介绍什么是Socks5代理IP,以及如何使用它提高网络安全性。 一、什么是Socks5代理IP Socks5代…...

《Java8实战》第3章 Lambda 表达式
利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一段代码块来表示一个行为,然后传递它。采用匿名类来表示多种行为并不令人满意:代码十分啰唆,这会影响程序员在实践中使用行为参数化的积极性。 3.1 Lambda 管中窥豹 可以…...

开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破
千呼万唤的南卡OE Pro终于要在最近正式官宣上线,此消息一经放出,蓝牙耳机市场就已经沸腾。NANK南卡品牌作为国内的音频大牌,发展和潜力一直备受业内关注,这次要上线的南卡OE Pro更是南卡十余年来积累的声学技术结晶之一。 据透露…...

生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]
文章目录概念相关图示代码示例框架中的应用场景多个生成器(Concrete Builder):单个生成器概念 生成器设计模式(Builder Design Pattern)是一种创建型设计模式,用于处理具有多个属性和复杂构造过程的对象。生…...

JUC并发工具
JUC并发工具 一、CountDownLatch应用&源码分析 1.1 CountDownLatch介绍 CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。 如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。 需要一个并发安全的计数器来操作。 CountDown…...
java面试题-基础问题-如何理解Java中的多态?
如何理解Java中的多态?如何理解Java中的多态?典型回答扩展知识方法的重载与重写重载和重写的区别如何理解Java中的多态? 典型回答 多态的概念比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产…...

03.vue3的计算属性
文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以,对于任何…...
Ceph性能调优
1. 最佳实践 1.1 基本 监控节点对于集群的正确运行非常重要,应当为其分配独立的硬件资源。如果跨数据中心部署,监控节点应该分散在不同数据中心或者可用性区域日志可能会让集群的吞吐量减半。理想情况下,应该在不同磁盘上运行操作系统、OSD…...
机器学习-问答题准备(英文)-更新中
第一章 入门 How would you define Machine Learning? Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure. Can you name four types of problems where it shines? To r…...

展示演示软件设计制作(C语言)
展示演示软件设计制作 所谓展示演示软件就像是PPT那样的东西。PPT是幻灯片式的展示,而我设计的软件是多媒体的,多样展示方法的,多种功能的。可以扩展为产品展示,项目介绍,景点导游,多媒体授课,…...

Android 自定义view 入门 案例
自定义一个圆环进度条: 1.首页Android Studio创建一个项目 2.在项目src/xxx/目录下右键选择创建一个自定义view页面:new->UICompoent->customer view 3.输入自定义名称,选择开发语言 4.确定之后,自动生成3个文件一个是&…...

[imangazaliev/didom]一个简单又快速的DOM操作库
DiDOM是一个功能齐全、易于使用和高性能的解析器和操作库,可以帮助PHP开发者更加高效地处理HTML文档。 为了更好地了解这个项目,我们先来看看下面的介绍。 安装 你可以使用composer来安装DiDOM,只需要在你的项目目录下执行下面的命令&…...

Cookie和Session的工作流程及区别(附代码案例)
目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的? 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…...

适用于高级别自动驾驶的驾驶员可预见误用仿真测试
摘要 借助高级别自动驾驶(HAD),驾驶员可以从事与驾驶无关的任务。在系统出现失效的情况下,驾驶员应该合理地重新获得对自动驾驶车辆(AV)的控制。不正确的系统理解可能会引起驾驶员的误操作,并可能导致车辆级的危害。ISO 21448预期功能安全标…...

Linux之进程知识点
一、什么是进程 进程是一个运行起来的程序。 问题思考: ❓ 思考:程序是文件吗? 是!都读到这一章了,这种问题都无需思考!文件在磁盘哈。 本章一开始讲的冯诺依曼,磁盘就是外设,和内…...

一种供水系统物联网监测系统
1.1供水系统 1.1.1监测范围选择依据 (1)管网老化区域管网 管网建设年代久远,通常管网发生破损问题较大,根据管网本身属性和历史发生事件的统计分析,结合数理统计,优先选择管网老化区域的管段所在区域进行…...

Linux驱动开发——字符设备(2)
目录 虚拟串口设备驱动 一个驱动支持多个设备 习题 虚拟串口设备驱动 字符设备驱动除了前面搭建好代码的框架外,接下来最重要的就是要实现特定于设备的操作方法,这是驱动的核心和关键所在,是一个驱动区别于其他驱动的本质所在,…...

【MySQL数据库原理】MySQL Community安装与配置
目录 安装成功之后查看版本验证1、介绍、安装与配置数据库2、操作MySQL数据库3、MySQL数据库原理安装成功之后查看版本验证 SELECT VERSION();查看mysql版本号 1、介绍、安装与配置数据库 下载安装包:https://download.csdn.net/download/weixin_41194129/87672588 MySQL…...
unix/linux source 命令,其基本属性、语法、操作、api
现在像解剖精密仪器一样,来细致地审视 source (或 .) 命令的各个方面:它的属性、语法、操作方式,以及可以称之为“API”的交互接口。这种细致的分析有助于我们精确地理解和使用它。 让我们深入细节: 一、基本属性 (Core Attributes) 命令类型 (Command Type): Shell 内置…...
JVM——从JIT到AOT:JVM编译器的云原生演进之路
引入 在Java的世界里,一段代码从开发者手中的文本到计算机执行的机器指令,需要跨越"字节码"这座桥梁。而JVM编译器正是架起这座桥梁的工程师,它的每一次技术演进都推动着Java性能的跃迁。从早期逐行翻译的解释器,到智能…...
如何成为一名优秀的产品经理(自动驾驶)
一、 夯实核心基础 深入理解智能驾驶技术栈: 感知: 摄像头、雷达(毫米波、激光雷达)、超声波传感器的工作原理、优缺点、融合策略。了解目标检测、跟踪、SLAM等基础算法概念。 定位: GNSS、IMU、高精地图、轮速计等定…...

通信算法之280:无人机侦测模块知识框架思维导图
1. 无人机侦测模块知识框架思维导图, 见文末章节。 2. OFDM参数估计,基于循环自相关特性。 3. 无人机其它参数估计...

树欲静而风不止,子欲养而亲不待
2025年6月2日,13~26℃,一般 待办: 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见:使用通义创作了一副照片,很好看!都有想用来创作自己的头像了! 提示词如下: A b…...
【深度剖析】流处理系统性能优化:解决维表JOIN、数据倾斜与数据膨胀问题
目录 前言:为什么你的流处理作业总是慢? 一、维表JOIN优化:从普通连接到高性能查询 1.1 时态表的双面性 1.2 Lookup Join 优化 1.3 多表JOIN优化策略 二、数据倾斜:单分区也会遇到的隐形杀手 2.1 单分区数据倾斜 2.2 热点键打散技术 2.3 时间窗口预聚合 三、数据…...

阿里通义实验室突破空间音频新纪元!OmniAudio让360°全景视频“声”临其境
在虚拟现实和沉浸式娱乐快速发展的今天,视觉体验已经远远不够,声音的沉浸感成为打动用户的关键。然而,传统的视频配音技术往往停留在“平面”的音频层面,难以提供真正的空间感。阿里巴巴通义实验室(Qwen Lab࿰…...

处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249
最近在做部门知识库,选用的dify,作为rag的工具,但是经过多个对比,最后发现, 比较好用的是,纳米搜索,但是可惜纳米搜索无法在内网使用,无法把知识库放到本地,导致 有信息…...

Dify案例实战之智能体应用构建(一)
一、部署dify Windows安装Docker部署dify,接入阿里云api-key进行rag测试-CSDN博客 可以参考我的前面文章,创建一个本地dify或者直接dify官网使用一样的(dify官网需要科学上网) 二、Dify案例实战之智能体 2.1 智能面试官 需求;…...

vscode中launch.json、tasks.json的作用及实例
文章目录 launch.json是什么作用多环境调试简单实例进阶使用核心配置项解析调试第三方程序 launch.json是什么 顾名思义:它是在.vscode文件夹下的launch.json,所以是vscode启动调试的配置文件。总结:通过定义调试参数、环境变量和启动方式&a…...