当前位置: 首页 > news >正文

Kafka 架构深入探索

目录

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

二、数据可靠性保证

三 、数据一致性问题

3.1follower 故障 

3.2leader 故障 

四、ack 应答机制

五、部署Filebeat+Kafka+ELK 

5.1环境准备

5.2部署ELK

5.2.1部署 Elasticsearch 软件

5.2.1.1修改elasticsearch主配置文件

5.2.1.2启动elasticsearch是否成功开启

5.2.1.3安装 Elasticsearch-head 插件

5.2.1.3.1编译安装 node

5.2.1.3.2安装 phantomjs(前端的框架)

5.2.1.3.3安装 Elasticsearch-head 数据可视化工具

5.2.1.3.4启动 elasticsearch-head 服务

5.2.2ELK-Logstash部署(在Apache节点上操作)

5.2.1.1安装Apahce服务(httpd)

5.2.1.2安装Java环境

5.2.1.3安装logstash

5.2.1.4测试 Logstash

5.2.3ELK Kiabana 部署(在 Node1 节点上操作)

安装Kibana

设置 Kibana 的主配置文件

启动 Kibana 服务

验证 Kibana

5.3ELFK(Filebeat+ELK)

5.3.1设置 filebeat 的主配置文件

5.3.2在logstash组件所在节点(apache节点)上新建一个logstash配置文件

5.4zookeeper集群部署

5.5部署 Zookeeper+Kafka 集群

5.6部署 Filebeat 

5.7 修改Logstash节点配置并启动


一、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 的物理偏移地址。

二、数据可靠性保证

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

三 、数据一致性问题

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

3.1follower 故障 

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

3.2leader 故障 

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

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

四、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 端都只会持久化一条

五、部署Filebeat+Kafka+ELK 

数据流向

5.1环境准备

服务器配置主机名ip地址主要软件部署
node1节点2C/4Gnode1192.168.246.8ElasticSearch、Kibana、Zookeeper、Kafka
node2节点2C/4Gnode2192.168.246.12ElasticSearch、Zookeeper、Kafka
logstash节点2C/4Gapache192.168.246.10Logstash、Apache、Zookeeper、Kafka
filebeat节点-filebeat192.168.246.11Filebeat、Zookeeper、Kafka

5.2部署ELK

systemctl stop firewalld
setenforce 0
hostnamectl set-hostname node2
hostnamectl set-hostname node1

由于原来的7-3虚拟机损坏,换一台7-6虚拟机做node2

5.2.1部署 Elasticsearch 软件

192.168.246.8和192.168.246.12机器安装 elasticsearch-5.5.0.rpm

cd /opt
rpm -ivh elasticsearch-5.5.0.rpm 

5.2.1.1修改elasticsearch主配置文件
systemctl daemon-reload 
systemctl enable elasticsearch.service
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
 vim /etc/elasticsearch/elasticsearch.yml
---------------------------------------
##17行,取消注释,指定群集名称cluster.name: my-elk-cluster
##23行,取消注释,指定节点名称(node1节点为node1,node2节点为node2)node.name: node1
##33行,取消注释,指定数据存放路径path.data: /data/elk_data
##37行,取消注释,指定日志存放路径path.logs: /var/log/elasticsearch/
##43行,取消注释,改为在启动的时候不锁定内存,开启为truebootstrap.memory_lock: false
##55行,取消注释,设置监听地址,0.0.0.0代表所有地址network.host: 0.0.0.0
##59行,取消注释,ES服务的默认监听端口为9200http.port: 9200
##68行,取消注释,集群发现通过单播实现,指定要发现的节点node1、node2discovery.zen.ping.unicast.hosts: ["node1", "node2"]

5.2.1.2启动elasticsearch是否成功开启
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
systemctl start elasticsearch.service 
netstat -natp| grep 9200

浏览器访问

​浏览器访问 
http://192.168.246.8:9200 和http://192.168.246.9:9200 查看节点 Node1、Node2 的信息。
----------------------------------------
浏览器访问 
http://192.168.246.8:9200/_cluster/health?pretty  http://192.168.246.9:9200/_cluster/health?pretty
#查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。

由于原来的7-3虚拟机损坏,换一台7-6虚拟机做node2

5.2.1.3安装 Elasticsearch-head 插件

方便好看的清晰

只需要安装一台,此处在node1上安装

5.2.1.3.1编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/optyum install gcc gcc-c++ make -ycd /opt
tar zxvf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make -j 4 && make install
5.2.1.3.2安装 phantomjs(前端的框架)

以node1为例

cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin/
5.2.1.3.3安装 Elasticsearch-head 数据可视化工具
cd /opt
tar xf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install
vim /etc/elasticsearch/elasticsearch.yml
---------------------------------
G到配置文件末尾,添加以下内容
http.cors.enabled: true  #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"  #指定跨域访问允许的域名地址为所有
--------------------------------
systemctl restart elasticsearch.service

systemctl restart elasticsearch.service 
ss -natp|grep 9200
5.2.1.3.4启动 elasticsearch-head 服务
cd /usr/local/src/elasticsearch-head/
npm run start &
netstat -natp |grep 9100

通过浏览器输入http://192.168.246.8:9100/ 去访问,然后Elasticsearch 输入下面网址访问http://192.168.246.8:9200/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康

curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

5.2.2ELK-Logstash部署(在Apache节点上操作)

hostnamectl set-hostname apache
5.2.1.1安装Apahce服务(httpd)
yum install httpd -y
systemctl start httpd
5.2.1.2安装Java环境
java -version如果没有jdk就yum -y install java 安装
5.2.1.3安装logstash
​#上传软件包 logstash-5.5.1.rpm 到/opt目录下
cd /opt
---------------------------
rpm -ivh logstash-5.5.1.rpm systemctl start logstash.service 
systemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.2.1.4测试 Logstash

参考之前文章

5.2.3ELK Kiabana 部署(在 Node1 节点上操作)

安装Kibana
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
vim /etc/kibana/kibana.yml
设置 Kibana 的主配置文件
##2行,取消注释,kibana服务的默认监听端口为5601
server.port: 5601
##7行,取消注释,设置kibana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
##21行,取消注释,设置和ES建立连接的地址和端口
elasticsearch.url: "http://192.168.246.8:9200"
##30行,取消注释,设置在ES中添加.kibana索引
kibana.index: ".kibana"
启动 Kibana 服务
systemctl start kibana.service 
systemctl enable kibana.service
验证 Kibana

浏览器访问 http://192.168.246.8:5601

5.3ELFK(Filebeat+ELK)

在ELK的基础上,增加一台filebeat服务器,因此只需再前述ELK部署的前提下进一步操作

hostnamectl set-hostname filebeat
su
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

5.3.1设置 filebeat 的主配置文件
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak
vim /etc/filebeat/filebeat.yml

filebeat节点

cd /usr/local/filebeat/
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml-----------------
filebeat.prospectors:
##21行,指定log类型,从日志文件中读取消息- type: log
##24行,开启日志收集功能,默认为false  enabled: true
##28行,指定监控的日志文件    - /var/log/*.log
##29行,添加收集/var/log/messages    - /var/log/messages
##31行,添加以下内容,注意格式 
fields:     
service_name: filebeat    
log_type: log    
service_id: 192.168.246.11
#-------------------------- Elasticsearch output ------------------------------
该区域内容全部注释
#----------------------------- Logstash output --------------------------------
##157行,取消注释output.logstash:
##159行,取消注释,指定logstash的IP和端口号  hosts: ["192.168.246.10:5044"] ./filebeat -e -c filebeat.yml
#启动filebeat,-e记录到stderr并禁用syslog /文件输出,-c指定配置文件

其它修改参见如上

5.3.2在logstash组件所在节点(apache节点)上新建一个logstash配置文件

(apache节点)

cd /etc/logstash/conf.d/
vim logstash.conf
input {beats {port => "5044"}
}
output {elasticsearch {hosts => ["192.168.246.8:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}

systemctl restart logstash.service
/usr/share/logstash/bin/logstash -f logstash.conf

5.4zookeeper集群部署

参考之前文章

192.168.246.8和192.168.246.12和192.168.246.10三台机器都要搭建zookeeper

5.5部署 Zookeeper+Kafka 集群

参考之前文章

192.168.246.8和192.168.246.12和192.168.246.10三台机器都要搭建 Zookeeper+Kafka

(架构在搭好Zookeeper集群之上继续搭建)

当生产者发布数据,和消费者消费数据不是同时开,顺序可能会有出入,例如

5.6部署 Filebeat 

要搭建ELK,可见之前的文章,接着写

修改Filebeat节点配置并启动

mv filebeat.yml filebeat.yml.qian
cp filebeat.yml.bak filebeat.yml
vim filebeat.yml

cd /usr/local/filebeatvim filebeat.ymlfilebeat.prospectors:
- type: logenabled: truepaths:- /var/log/httpd/access_logtags: ["access"]- type: logenabled: truepaths:- /var/log/httpd/error_logtags: ["error"]
#添加输出到 Kafka 的配置output.kafka:enabled: truehosts: ["192.168.246.8:9092","192.168.246.12:9092","192.168.246.10:9092"]    #指定 Kafka 集群配置topic: "httpd"    #指定 Kafka 的 topic

添加输出到 Kafka 的配置

output.kafka:enabled: truehosts: ["192.168.246.8:9092,192.168.246.12:9092,192.168.246.10:9092"]topic: "httpd"

启动filebeat

#启动 filebeat
./filebeat -e -c filebeat.yml

由于使用rpm安装,直接systemctl 启动就好

5.7 修改Logstash节点配置并启动

部署 ELK在 Logstash 组件所在节点上新建一个 Logstash 配置文件

Logstash节点配置

​cd /etc/logstash/conf.d/vim kafka.conf
--------------------------------------------
input {kafka {bootstrap_servers =>"192.168.246.8:9092,192.168.246.12:9092,192.168.246.10:9092" #kafka集群地址topics  => "httpd"     #拉取的kafka的指定topictype => "httpd_kafka"  #指定 type 字段codec => "json"        #解析json格式的日志数据auto_offset_reset => "latest"  #拉取最近数据,earliest为从头开始拉取decorate_events => true   #传递给elasticsearch的数据额外增加kafka的属性数据}
}output {if "access" in [tags] {elasticsearch {hosts => ["192.168.246.8:9200"]index => "httpd_access-%{+YYYY.MM.dd}"}}if "error" in [tags] {elasticsearch {hosts => ["192.168.246.8:9200"]index => "httpd_error-%{+YYYY.MM.dd}"}}stdout { codec => rubydebug }
}-------------------------------------
#启动 logstash
logstash -f kafka.conf​

input {kafka {bootstrap_servers => "192.168.246.8:9092,192.168.246.12:9092,192.168.246.10:9092"topics  => "httpd"type => "httpd_kafka"codec => "json"auto_offset_reset => "latest"decorate_events => true}
}
output {if "access" in [tags] {elasticsearch {hosts => ["192.168.246.8:9200"]index => "httpd_access-%{+YYYY.MM.dd}"}}if "error" in [tags] {elasticsearch {hosts => ["192.168.246.8:9200"]index => "httpd_error-%{+YYYY.MM.dd}"}}stdout { codec => rubydebug }
}

收集日志查看日志 
注:生产黑屏操作es时查看所有的索引:curl -X GET "localhost:9200/_cat/indices?v"

直接虚拟机查看有没有索引

生产黑屏操作es时查看所有的索引:curl -X GET "localhost:9200/_cat/indices?v"

如果索引出不来,可能是es那台服务器,没有安装httpd服务,安装下

浏览器访问 http://192.168.246.8:9100 登录查看索引

上面两个意思一样,可以文字浏览器查看,也可以直接浏览器查看索引是否有

浏览器访问 http://192.168.246.8:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“filebeat_test-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
 

排错思路
1、ES节点是否都正常 使用netstat -natp|grep java 查看9200和9300是否开启

2、filebeat作为生产者将数据推送到kafka,查看kafka中的topic是否有生成

3、在logstash中添加stdout输出,如果屏幕有内容,那么表示kafka与logstash对接成功了

4、filebeat、logstash的配置多次检查

5、环境问题,比如安全机制、防火墙等

6、如果是多次实验使用相同的nginx日志,可以删除/usr/share/logstash/data的.lock隐藏文件

相关文章:

Kafka 架构深入探索

目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…...

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法,主要用于数据聚类。其工作原理基于迭代优化,将数据点划分为K个集群,使得每个数据点都属于最近的集群,并且每个集群的中心(质心)是所有属于该集群的数据点的平均值。以下是…...

Excel文件转Asc文件

单个转换 import os import pandas as pdfilename (10)result01-1.xlsx df pd.read_excel(filename) # 读取Excel文件# 将数据保存为ASC格式 asc_filename os.path.splitext(filename)[0] .asc # 获取文件名并替换扩展名 with open(asc_filename, w) as file:# 写入文件…...

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题7

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题7 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…...

Webrtc 信令服务器实现

webrtc建联流程图 由上图可知,所谓的信令服务器其实就是将peer的offer/candidate/answer传给对端而已。这样的话实现方式就有很多种了,目前普遍的方式HTTP/HTTPS,WS/WSS。像webrtc-demo-peerconnection就是实现HTTP这种方式。本文使用WS&…...

【Blockchain】连接智能合约与现实世界的桥梁Chainlink

去中心化预言机试图实现依赖因果关系而不是个人关系的去信任和确定性结果。它以与区块链网络相同的方式实现这些结果,即在许多网络参与者之间分配信任。通过利用许多不同的数据源并实施不受单个实体控制的预言机系统,去中心化的预言机网络有可能为智能合…...

解决EasyPoi导入Excel获取不到第一列的问题

文章目录 1. 复现错误2. 分析错误2.1 导入的代码2.2 DictExcel实体类2.2 表头和标题3. 解决问题1. 复现错误 使用EasyPoi导入数据时,Excel表格如下图: 但在导入时,出现如下错误: name为英文名称,在第一列,Excel表格有值,但导入的代码中为null,就很奇怪? 2. 分析错误 …...

Vue 阶段练习:记事本

将 Vue快速入门 和 Vue 指令的学习成果应用到实际场景中(如该练习 记事本),我们能够解决实际问题并提升对 Vue 的技能掌握。 目录 功能展示 需求分析 我的代码 案例代码 知识点总结 功能展示 需求分析 列表渲染删除功能添加功能底部统计…...

JavaScript判断受访域名,调用不同的js文件

比如:我有三个域名: ① dengoo.net ② jfzm.cc ③ ceeha.com 如果当前访问的是 dengoo.net 域名及域名下页面,则调用 a.js 如果当前访问的是 jfzm.cc 域名及域名下页面,则调用 b.js 如果当前访问的是 ceeha.com 域名及域名下…...

下载软件时的Ubuntu x86_64-v2、skylake、aarch64版本分别代表什么?

Ubuntu-x86_64-v2、Ubuntu-x86_64-skylake和Ubuntu-aarch64都是Ubuntu的不同版本或变种,它们之间的主要区别在于所支持的硬件架构和针对特定硬件的优化。 Ubuntu-x86_64-v2: 这是基于x86_64(也称为AMD64或Intel 64)架构的Ubuntu版…...

数字化社交的引擎:解析Facebook的影响力

Facebook,作为全球最大的社交媒体平台,已经深深地融入了我们的日常生活和文化中。它不仅仅是一个简单的社交工具,更是一个复杂的数字生态系统,影响着我们的社交模式、文化认同以及信息获取方式。在这篇文章中,我们将深…...

淘宝API商品详情数据在数据分析行业中具有不可忽视的重要性

淘宝商品详情数据在数据分析行业中具有不可忽视的重要性。这些数据为商家、市场分析师以及数据科学家提供了丰富的信息,有助于他们更深入地理解市场动态、消费者行为以及商品竞争态势。以下是淘宝商品详情数据在数据分析行业中的重要性体现: 请求示例&a…...

【产品】ANET智能通信管理机 物联网网关 电力监控/能耗监测/能源管理系统

产品概述 本系列智能通信管理机是一款采用嵌入式硬件计算机平台,具有多个下行通信接口及一个或者多个上行网络接口,用于将一个目标区域内所有的智能监控/保护装置的通信数据整理汇总后,实时上传主站系统,完成遥信、遥测等能源数据…...

R语言数据分析案例

在R语言中进行数据分析通常涉及数据的导入、清洗、探索、建模和可视化等步骤。以下是一个简化的案例,展示了如何使用R语言进行数据分析: 1. 数据导入 首先,你需要将数据导入R环境中。这可以通过多种方式完成,例如使用read.csv()…...

vscode debug 配置:launch.json

打开新项目左边的“运行和调试” 点击蓝色字体“创建 launch.json 文件” 选择上方“python” 选择“Python 文件 调试当前正在运行的Python文件” 配置launch.json文件内容: {// 使用 IntelliSense 了解相关属性// 悬停以查看现有属性的描述。// 欲了解更多信息&a…...

idea工具使用Tomcat创建jsp 部署servlet到服务器

使用tomcat创建jsp 在tomcat官网中下载对应windows版本的tomcat文件 Apache Tomcat - Welcome! 解压到系统目录中,记得不要有中文路径 新建一个java项目 点击右上角 点击加号 找到Tomcat Service的 Local 点击右下角的Fix一下,然后ok关闭 再重新打开一…...

MyBatisPlus自定义SQL

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:MyBatisPlus自定义SQL 📚个人知识库: Leo知识库,欢迎大家访问 目录 1.前言☕…...

使用formio和react实现在线表单设计

formiojs 是一个开源的在线表单设计工具,今天看看怎样在 react js 中使用 formiojs。 首先创建一个react工程 npx create-react-app my-react-formio-app安装依赖 cd my-react-formio-app npm install formio/react npm install formio/js另外,考虑样…...

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…...

✌粤嵌—2024/4/3—合并K个升序链表✌

代码实现: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…...

企业微信主体的修改方法

企业微信变更主体有什么作用?当我们的企业因为各种原因需要注销或已经注销,或者运营变更等情况,企业微信无法继续使用原主体继续使用时,可以申请企业主体变更,变更为新的主体。企业微信变更主体的条件有哪些&#xff1…...

C++的封装(十):数据和代码分离

封装的好处当然是非常多的。就不一一例举了。但封装也制造了访问壁垒。如果你是初学者,当你面对一堆封装好的C类一筹莫展,不知道从哪里下手时… 可以试试这个方法,数据和代码分离。 就是说,class只写方法,数据都放到…...

第十五届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组(基础题)

试题 C: 好数 时间限制 : 1.0s 内存限制: 256.0MB 本题总分:10 分 【问题描述】 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 )上 的数字是奇数,偶数位(十位、千位、十万位 &…...

模板的进阶

目录 非类型模板参数 C11的静态数组容器-array 按需实例化 模板的特化 函数模板特化 类模板特化 全特化与偏特化 模板的分离编译 总结 非类型模板参数 基本概念:模板参数类型分为类类型模板参数和非类类型模板参数 类类型模板参数:跟在class…...

微服务中Dubbo通俗易懂讲解及代码实现

当你在微服务架构中需要不同服务之间进行远程通信时,Dubbo是一个优秀的选择。Dubbo是一个高性能的Java RPC框架,它提供了服务注册、发现、调用、负载均衡等功能,使得微服务之间的通信变得简单而高效。 让我们来看一下Dubbo的通俗易懂的解释和…...

Unity HDRP Release-Notes

🌈HDRP Release-Notes 收集的最近几年 Unity各个版本中 HDRP的更新内容 信息收集来自自动搜集工具👈 💡HDRP Release-Notes 2023 💡HDRP Release-Notes 2022 💡HDRP Release-Notes 2021...

Chrome将网页保存为PDF的实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

zotero7+Chat GPT实现ai自动阅读论文

关于这一部分的内容我在哔哩哔哩上发布了视频教程 视频链接见: zotero7GPT AI快速阅读文献_哔哩哔哩_bilibili 相关下载的官方链接如下: 1、zotero7 测试版官方下载链接: https://www.zotero.org/support/beta_builds 2、 InfiniCLOUD 云…...

STM32外设配置以及一些小bug总结

USART RX的DMA配置 这里以UART串口1为例,首先点ADD添加RX和TX配置DMA,然后模式一般会选择是normal,这个模式是当DMA的计数器减到0的时候就不做任何动作了,还有一种循环模式,是计数器减到0之后,计数器自动重…...

【数据结构与算法】:10道链表经典OJ

目录 1. 移除链表元素2. 反转链表2.1反转指针法2.2 头插法 3. 合并两个有序链表4. 分隔链表5. 环形链表6. 链表的中间节点7. 链表中倒数第K个节点8. 相交链表9. 环形链表的约瑟夫问题10. 链表的回文结构 1. 移除链表元素 思路1:遍历原链表,将 val 所在的…...

Python SQL解析和转换库之sqlglot使用详解

概要 Python SQLGlot是一个基于Python的SQL解析和转换库,可以帮助开发者更加灵活地处理和操作SQL语句。本文将介绍SQLGlot库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装SQLGlot库非常简单,可以使用pip命令进行安装: pip install sqlglot安装完成后…...

NULL—0—nullptr 三者关系

1.概述 NULL,0,nullptr值都是0,但是类型不同,但是由于C头文件中NULL定义宏混乱,可能是int 0,也可能是(void*)0; 所以在C11及以后的标准中引入新的空指针nullptr,nullptr就是(void*)0&#xff…...

Nginx 请求的 匹配规则 与 转发规则

博文目录 文章目录 URL 与 URI匹配规则案例说明 转发规则响应静态资源案例说明 转发动态代理案例说明案例说明 URL 与 URI 通常, 一个 URL 由以下部分组成 scheme://host:port/path?query#fragment scheme: 协议, 如 http, https, ftp 等host; 主机名或 IP 地址post: 端口…...

OWASP发布10大开源软件风险清单

3月20日,xz-utils 项目被爆植入后门震惊了整个开源社区,2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现,那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险,使得“加强开…...

大学生前端学习第一天:了解前端

引言: 哈喽,各位大学生们,大家好呀,在本篇博客,我们将引入一个新的板块学习,那就是前端,关于前端,GPT是这样描述的:前端通常指的是Web开发中用户界面的部分,…...

公安机关人民警察证照片采集规范及自拍制作电子版指南

在当今社会,证件照的拍摄已成为我们生活中不可或缺的一部分。无论是办理身份证、驾驶证还是护照,一张规范的证件照都是必需的。而对于公安机关的人民警察来说,证件照片的采集更是有着严格的规范和要求。本文将为您详细介绍公安机关人民警察证…...

使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel

Python插入100万条数据到MySQL数据库 步骤一:导入所需模块和库 首先,我们需要导入 MySQL 连接器模块和 Faker 模块。MySQL 连接器模块用于连接到 MySQL 数据库,而 Faker 模块用于生成虚假数据。 import mysql.connector # 导入 MySQL 连接…...

【备忘录】openssl记录

openssl genrsa -out ca.key 2048 openssl req -x509 -new -nodes -key ca.key -days 10000 -out ca.crt -subj “/CCN/STBeijing/LBeijing/Okubernetes/OUKubernetes-manual/CNkubernetes-ca” openssl genrsa -out etcd-ca.key 2048 openssl req -x509 -new -nodes -key etc…...

hadoop编程之工资序列化排序

数据集展示 7369SMITHCLERK79021980/12/17800207499ALLENSALESMAN76981981/2/201600300307521WARDSALESMAN76981981/2/221250500307566JONESMANAGER78391981/4/22975207654MARTINSALESMAN76981981/9/2812501400307698BLAKEMANAGER78391981/5/12850307782CLARKMANAGER78391981/…...

OpenXR手部跟踪接口与VIVE OpenXR扩展详细解析

随着虚拟现实技术的发展,手部跟踪已成为提高沉浸感和交互性的关键技术。OpenXR标准为开发者提供了一套手部跟踪的扩展接口,特别是针对VIVE设备的特定实现。以下是这些接口和类的详细解释: 1. VIVE.OpenXR.Hand VIVE.OpenXR.Hand 是HTC VIVE…...

慎投!5本On Hold全被剔除!新增9本SCI/SSCI被除名!4月WOS更新

本周投稿推荐 SSCI • 2/4区经管类,2.5-3.0(录用率99%) SCIE(CCF推荐) • 计算机类,2.0-3.0(最快18天录用) SCIE(CCF-C类) • IEEE旗下,1/2…...

华为云CodeArts IDE For Python 快速使用指南

CodeArts IDE 带有 Python 扩展,为 Python 语言提供了广泛的支持。Python 扩展可以利用 CodeArts IDE 的代码补全、验证、调试和单元测试等特性,与多种 Python 解释器协同工作,轻松切换包括虚拟环境和 conda 环境的 Python 环境。本文简要概述…...

C# 截图并保存为图片

在winform开发中,有时会用到截图并保存为图片的时候,这里列了三种保存图片的可能情况。 将窗体截图保存成图片的方式是: Bitmap bit new Bitmap(this.Width, this.Height);//实例化一个和窗体一样大的bitmap Graphics g Graphics.FromImag…...

[html]一个动态js倒计时小组件

先看效果 代码 <style>.alert-sec-circle {stroke-dasharray: 735;transition: stroke-dashoffset 1s linear;} </style><div style"width: 110px; height: 110px; float: left;"><svg style"width:110px;height:110px;"><cir…...

Hive-Sql复杂面试题

参考链接&#xff1a;hive sql面试题及答案 - 知乎 有哪些好的题目都可以给我哦 我来汇总到一起 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据&#xff1a; userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,…...

WPS二次开发系列:WPS SDk功能就概览

作者持续关注WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 作者通过深度测试使用了WPS SDK提供的Demo&#xff0…...

华为OD-C卷-结队编程[200分]

题目描述 某部门计划通过结队编程来进行项目开发, 已知该部门有 N 名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程, 结队分组规则如下: 从部门中选出序号分别为 i、j、k 的3名员工,他们的职级分别为 level[i],level[j],level[k], 结队小组满…...

连连看游戏页面网站源码,直接使用

可以上传自己喜欢的图片 游戏页面 通关页面 源码免费下载地址抄笔记 (chaobiji.cn)...

在 Kubernetes 1.24 中使用 Docker:配置与应用指南

在 Kubernetes 1.24 中使用 Docker&#xff1a;配置与应用指南 引言 随着 Kubernetes 社区对容器运行时接口&#xff08;CRI&#xff09;的标准化推进&#xff0c;Docker 原生支持在 Kubernetes 1.24 版本中被弃用。然而&#xff0c;许多开发者和组织仍希望继续使用 Docker。…...

Canvas使用详细教学:从基础绘图到进阶动画再到实战(海报生成、Flappy Bird 小游戏等),掌握绘图与动画的秘诀

一、Canvas基础 1. Canvas简介 Canvas是HTML5引入的一种基于矢量图形的绘图技术&#xff0c;它是一个嵌入HTML文档中的矩形区域&#xff0c;允许开发者使用JavaScript直接操作其内容进行图形绘制。Canvas元素不包含任何内在的绘图能力&#xff0c;而是提供了一个空白的画布&a…...

reset aliyun linux System

...

c++ 纯虚函数与抽象类的理解

1.纯虚函数的概念 只有声明&#xff0c;没有函数体的虚函数。纯虚函数在父类中声明&#xff0c;需要在子类中中去具体实现。 语法为virtual void PureVirtualFunc() 0; 0为纯虚函数的格式&#xff0c;类似于这是一个空的函数指针&#xff1b; 2.抽象类 拥有一个及以上纯虚…...

java安全可控、安可、国产信创、国产化有哪些替代品【完整版本】100%兼容测试

安全可控、安可、 国产信创、国产化 java安全可控、安可、国产信创、国产化有哪些替代品【完整版本】100%兼容测试 系统、芯片、CPU、缓存、数据库、中间件、负载均衡、WEB服务器、防火墙、消息队列 开发 角色: 前端☑ 后端☑ 测试□ 数据库☑ 产品✅ UI设计□ 是否熟悉国产…...

【大数据面试题】28 解释一下大数据的 5V 特性是什么?

一步一个脚印&#xff0c;一天一道面试题。 搞点简单的。 大数据的5V特性是描述大数据本质和特性的五个关键词&#xff0c;它们分别是&#xff1a; Volume&#xff08;大量&#xff09;&#xff1a; 指的是数据的总量非常大&#xff0c;通常涉及到TB&#xff08;万亿字节&am…...

Verdaccio私服搭建

前言 Verdaccio是一个轻量级的私有npm注册表&#xff0c;由Node.js创建&#xff0c;并且是sinopia1.4.0的衍生版本&#xff0c;与其100%向后兼容。Verdaccio的名称来源于意大利中世纪晚期fresco绘画中流行的一种绿色。 Verdaccio的主要功能是在本地环境中管理和共享npm软件包。…...

go的web开发框架gin(一)

一、简介 Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。它具有类似 Martini 的 API&#xff0c;但性能比 Martini 快 40 倍。如果你需要极好的性能&#xff0c;使用 Gin 吧。 它的特性如下&#xff1a; 快速&#xff0c;基于 Radix 树的路由&#xff0c;小内存占用。没有…...