kafka集群单独开启kerberos详细步骤

Kafka 2.8新特性
可以不使用zk。使用自我管理的仲裁机制。
增加describe集群的API。
支持SASL、SSL双向TLS身份认证。
根据IP,限制broker connection的创建速率。

JDK 1.8
zookeeper(可以使用DP的zk,但需指定zk的namespace,避免跟DP的kafka冲突。)
kafka自带的zookeeper的启动:nohup ./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties 2>&1 & @XY

一、kafka安装部署
tar -xzf kafka_2.13-2.8.0.tgz
$ cd kafka_2.13-2.8.0/config

1、配置 server.properties
broker.id=0 ##依次递增
listeners=PLAINTEXT://demo2:9092 ##访问端口
advertised.listeners=PLAINTEXT://demo2:9092
zookeeper.connect=localhost:2181
zookeeper.connect=demo2:2181/kafka-2.8 ##设置zk Chroot path。一个zk可以管理多个kafka集群。也称kafka的namespace

log.dirs=/data/kafka/kafka_2.12-2.8.0/kafka-logs
2、启动kafka
./bin/kafka-server-start.sh -daemon ./config/server.properties

3、测试kafka
./bin/kafka-topics.sh --create --zookeeper demo2:2181/kafka-2.8 --replication-factor 1 --partitions 1 --topic test
./bin/kafka-topics.sh --list --zookeeper demo2:2181/kafka-2.8

./bin/kafka-console-producer.sh --broker-list demo2:9092 --topic test
./bin/kafka-console-consumer.sh --bootstrap-server demo2:9092 --topic test --from-beginning

二、Kafka配置kerberos认证 https://blog.csdn.net/man_earth/article/details/87256449
1、准备工作:
(1)、安装无限制的jce
(2)、手动创建每个broker server的pricipals,并导出keytab,然后分发到每个broker server节点。
addprinc -randkey kafka/kafkahost1@EXAMPLE.COM
xst -norandkey -k /opt/kafkahost1/kafka.keytab kafka/kafkahost1@EXAMPLE.COM
xst -norandkey -k /data/kafka/kafka_2.12-2.8.0-krb/config/kafka.keytab kafka/demo2@HADOOP.COM

2、部署zk的kerberos认证(单独下载的zk)
下载apache-zookeeper-3.5.9-bin.tar.gz ,并解压
cp zoo_sample.cfg zoo.cfg

修改zoo.cfg
dataDir=/data/kafka/apache-zookeeper-3.5.9-bin/zk-data
clientPort=12181
admin.serverPort=38080
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000

创建zk_server_jaas.conf文件
在zookeeper/conf目录下,新建zk_server_jaas.conf文件(vi zk_server_jaas.conf)
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
keyTab=“/data/kafka/apache-zookeeper-3.5.9-bin/conf/zk.keytab”
principal=“zookeeper/demo2@HADOOP.COM”;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
keyTab=“/data/kafka/apache-zookeeper-3.5.9-bin/conf/zk.keytab”
principal=“zookeeper/demo2@HADOOP.COM”;
};

修改启动文件zkEnv.sh
启动文件添加如下内容:
export JVMFLAGS=" -Djava.security.auth.login.config=$ZOOCFGDIR/zk_server_jaas.conf "

启动zk: ./zkServer.sh start

3、配置kafka/config/server.properties
listeners=PLAINTEXT://demo2:9093,SASL_PLAINTEXT://demo2:9092
advertised.listeners=SASL_PLAINTEXT://demo2:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka //这里的service.name要跟上面建立的principal相对应,kafka/kafkahost3@EXAMPLE.COM的principal服务名就是kafka

log.dirs=/data/kafka/kafka_2.12-2.8.0-krb/kafka-logs
zookeeper.connect=demo2:12181

3、ACL配置
kafka自带了一个开箱即用的ACL授权工具。它基于zk来存储所有的acl授权信息。可通过authorizer.class.name属性来配置:authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=true
super.users=User:kafka;User:@@@ ##跟kafka.keytab的pricipals的用户名一致。

#ACL : topic 的用户权限配置,比如org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer
super.users=User:kafka;User:@@@ //acl相关,broker服务本身是采用kafka这个服务身份进行交互,只有配置成superuser才能获取集群内的metadata信息。
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer //acl相关,配置后才能启用acl
#设置为true,ACL机制为黑名单机制,只有黑名单中的用户无法访问
allow.everyone.if.no.acl.found=true
#默认为false,ACL机制为白名单机制,只有白名单中的用户可以访问。启动kafka时,需添加zookeeper.sasl.client.username=zookeeper,需要有该pricipals。
#allow.everyone.if.no.acl.found=false

3、配置kafka/config/kafka_jaas.conf
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/data/kafka/kafka_2.12-2.8.0-krb/config/kafka.keytab”
storeKey=true
useTicketCache=false
serviceName=“kafka”
principal=“kafka/demo2@HADOOP.COM”;
};
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=false
useKeyTab=true
seKeyTab=true
keyTab=“/data/kafka/kafka_2.12-2.8.0-krb/config/kafka.keytab”
principal=“kafka/demo2@HADOOP.COM”
renewTicket=true
serviceName=“kafka”;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=false
useKeyTab=true
seKeyTab=true
keyTab=“/data/kafka/kafka_2.12-2.8.0-krb/config/zk.keytab”
principal=“zookeeper/demo2@HADOOP.COM”
renewTicket=true
serviceName=“zookeeper”;
};

4、修改bin目录下kafka-run-class.sh,增加kerberos启动参数:
export KAFKA_OPTS=“-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/data/kafka/kafka_2.12-2.8.0-krb/config/kafka_jaas.conf -Dsun.security.krb5.debug=true”

-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf
-Dzookeeper.sasl.client=Client #默认是Client,对应jaas中的Client
-Dzookeeper.sasl.client.username=zk ##默认是zookeeper,跟pricipals一致。

5、启动kafka
./bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
./bin/kafka-server-start.sh -daemon ./config/server.properties

常见问题:/etc/krb5.conf中配置的default realm必须和使用的realm一致,否则必须先做kdc互信。
##注意kafka broker与kdc的时间同步。
查看错误日志:kafkaServer.out

6、测试创建topic:
./bin/kafka-topics.sh --create --zookeeper demo2:12181 --replication-factor 1 --partitions 1 --topic test
./bin/kafka-topics.sh --list --zookeeper demo2:12181

6、客户端使用kafka
启用kerberos后,部分kafka管理脚本需要增加额外的参数才能使用

首先建立配置文件client.properties:
security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka
sasl.mechanism=GSSAPI

所以新命令的使用方式为:
./bin/kafka-consumer-groups.sh --bootstrap-server demo2:9092 --list --command-config ./client.properties
./bin/kafka-console-producer.sh --broker-list demo2:9092 --topic test --producer.config ./client.properties
./bin/kafka-console-consumer.sh --bootstrap-server demo2:9092 --topic test --consumer.config ./client.properties

7、登录zk: ./bin/zookeeper-shell.sh demo2:12181
三、Kakfa配置SSL安全认证
http://kafka.apache.org/documentation/#security_ssl
https://docs.confluent.io/platform/current/kafka/authentication_ssl.html

单向SSL认证:仅仅是在客户端,校验kafka服务器端的合法性。ssl.client.auth=requested。只需拷贝服务器端的kafka.client.truststore.jks即可。
双向SSL认证:除了客户端去校验kafka服务器端的合法性,服务器端还要校验客户端的合法性。ssl.client.auth=required。需要拷贝服务器端的kafka.client.truststore.jks和kafka.server.keystore.jks。

(一)、SSL认证之生成证书
https://blog.csdn.net/justry_deng/article/details/88383081 中文配置
SSL的基础知识、kafka证书生成过程,参考《 SSL安全认证是什么?》

证书生成脚本参考:

集群内选择其中一台broker节点,执行以下命令:
#! /bin/bash

CLUSTER_NAME=kafak2.8-ssl
BASE_DIR=/data/kafka/kafka_2.12-2.8.0/ssl
export PASSWORD=“@@@@123”

KEY_STORE=“ B A S E D I R / s e r v e r / k a f k a . s e r v e r . k e y s t o r e . j k s " C E R T O U T P U T P A T H = " BASE_DIR/server/kafka.server.keystore.jks" CERT_OUTPUT_PATH=" BASEDIR/server/kafka.server.keystore.jks"CERTOUTPUTPATH="BASE_DIR/ca”
CERT_AUTH_FILE=“ C E R T O U T P U T P A T H / c a − c e r t . p e m " T R U S T S T O R E P A T H = " CERT_OUTPUT_PATH/ca-cert.pem" TRUST_STORE_PATH=" CERTOUTPUTPATH/cacert.pem"TRUSTSTOREPATH="BASE_DIR/trust”
CLUSTER_CERT_FILE=“ B A S E D I R / s e r v e r / c l u s t e r − BASE_DIR/server/cluster- BASEDIR/server/cluster{CLUSTER_NAME}-cert”

echo “Step1: Config env”
STORE_PASSWORD= P A S S W O R D K E Y P A S S W O R D = PASSWORD KEY_PASSWORD= PASSWORDKEYPASSWORD=PASSWORD
TRUST_KEY_PASSWORD= P A S S W O R D T R U S T S T O R E P A S S W O R D = PASSWORD TRUST_STORE_PASSWORD= PASSWORDTRUSTSTOREPASSWORD=PASSWORD
DAYS_VALID=3650
export Local_HOSTNAME=hostname -f
D_NAME=“CN=$Local_HOSTNAME, OU=asiainfo”

mkdir -p ${BASE_DIR}/{ca,server,client,trust}

echo “Step2: Create certificate to keystore.每个broker节点执行”
keytool -genkey -keystore $KEY_STORE -alias $CLUSTER_NAME -validity $DAYS_VALID -keyalg RSA -storetype pkcs12 -storepass $STORE_PASSWORD -keypass K E Y P A S S W O R D − d n a m e " KEY_PASSWORD -dname " KEYPASSWORDdname"D_NAME" -ext “SAN=DNS:$Local_HOSTNAME”

echo “Step3: Create CA(证书签发机构)的证书.只需在其中一个节点上执行即可,执行完成后,会生成了两个文件cat-key、ca-cert,然后将这两个文件分别拷贝到所有broker节点上,后面需要用到。”
openssl req -new -x509 -keyout C E R T O U T P U T P A T H / c a − k e y − o u t " CERT_OUTPUT_PATH/ca-key -out " CERTOUTPUTPATH/cakeyout"CERT_AUTH_FILE" -days “ D A Y S V A L I D " − p a s s i n p a s s : " DAYS_VALID" -passin pass:" DAYSVALID"passinpass:"PASSWORD” -passout pass:“ P A S S W O R D " − s u b j " / C = C N / S T = b e i j i n g / L = b e i j i n g / O = a s i a i n f o / O U = a s i a i n f o / C N = PASSWORD" -subj "/C=CN/ST=beijing/L=beijing/O=asiainfo/OU=asiainfo/CN= PASSWORD"subj"/C=CN/ST=beijing/L=beijing/O=asiainfo/OU=asiainfo/CN=Local_HOSTNAME”
#openssl req -x509 -config openssl-ca.cnf -newkey rsa:4096 -sha256 -nodes -out cacert.pem -outform PEM

echo “Step4: Import CA into kafka client truststore.每个broker节点执行”
keytool -keystore “ T R U S T S T O R E P A T H / k a f k a . c l i e n t . t r u s t s t o r e . j k s " − a l i a s C A R o o t − i m p o r t − f i l e " TRUST_STORE_PATH/kafka.client.truststore.jks" -alias CARoot -import -file " TRUSTSTOREPATH/kafka.client.truststore.jks"aliasCARootimportfile"CERT_AUTH_FILE” -storepass “ T R U S T S T O R E P A S S W O R D " − k e y p a s s " TRUST_STORE_PASSWORD" -keypass " TRUSTSTOREPASSWORD"keypass"TRUST_KEY_PASS” -noprompt

echo “Step4: Import CA into kafka server truststore.每个broker节点执行”
keytool -keystore “ T R U S T S T O R E P A T H / k a f k a . s e r v e r . t r u s t s t o r e . j k s " − a l i a s C A R o o t − i m p o r t − f i l e " TRUST_STORE_PATH/kafka.server.truststore.jks" -alias CARoot -import -file " TRUSTSTOREPATH/kafka.server.truststore.jks"aliasCARootimportfile"CERT_AUTH_FILE” -storepass “ T R U S T S T O R E P A S S W O R D " − k e y p a s s " TRUST_STORE_PASSWORD" -keypass " TRUSTSTOREPASSWORD"keypass"TRUST_KEY_PASS” -noprompt

echo “Step5: Export certificate from (Step2)keystore, prepare for signing.导出证书,准备签名.每个broker节点执行”
keytool -keystore “ K E Y S T O R E " − a l i a s " KEY_STORE" -alias " KEYSTORE"alias"CLUSTER_NAME” -certreq -file “ C L U S T E R C E R T F I L E " − s t o r e p a s s " CLUSTER_CERT_FILE" -storepass " CLUSTERCERTFILE"storepass"STORE_PASSWORD” -keypass “$KEY_PASSWORD” -noprompt

echo “Step6: Signing the certificate.证书签名.每个broker节点执行”
openssl x509 -req -CA “$CERT_AUTH_FILE” -CAkey C E R T O U T P U T P A T H / c a − k e y − i n " CERT_OUTPUT_PATH/ca-key -in " CERTOUTPUTPATH/cakeyin"CLUSTER_CERT_FILE" -out “ C L U S T E R C E R T F I L E − s i g n e d " − d a y s " {CLUSTER_CERT_FILE}-signed" -days " CLUSTERCERTFILEsigned"days"DAYS_VALID” -CAcreateserial -passin pass:“$PASSWORD”

echo “Setp7: Import CA into keystore”
keytool -keystore “ K E Y S T O R E " − a l i a s C A R o o t − i m p o r t − f i l e " KEY_STORE" -alias CARoot -import -file " KEYSTORE"aliasCARootimportfile"CERT_AUTH_FILE.每个broker节点执行” -storepass “ S T O R E P A S S W O R D " − k e y p a s s " STORE_PASSWORD" -keypass " STOREPASSWORD"keypass"KEY_PASSWORD” -noprompt

echo “Setp8: Import signed certificate into keystore.每个broker节点执行”
keytool -keystore “ K E Y S T O R E " − a l i a s " KEY_STORE" -alias " KEYSTORE"alias"{CLUSTER_NAME}” -import -file “ C L U S T E R C E R T F I L E − s i g n e d " − s t o r e p a s s " {CLUSTER_CERT_FILE}-signed" -storepass " CLUSTERCERTFILEsigned"storepass"STORE_PASSWORD” -keypass “$KEY_PASSWORD” -noprompt

echo “done,list keystore”
keytool -list -v -keystore $KEY_STORE -storepass ${KEY_PASSWORD}

注意:以上步骤,只有步骤3,生成CA认证证书时,在其中一台主机上执行即可。集群内的所有主机使用同一个CA证书签发机构。

集群内其他broker节点,执行以下命令:执行除了Step3: Create CA(证书签发机构)以外的其他的命令。

(二)、修改config/server.properties
注意:SSL配置最好写在配置文件的最上面,否者可能导致Kafka配置SSL失败。

1、如果配置了SSL认证,那么原来的port和advertised.listeners可以注释掉。也可以保留PLAINTEXT配置,另外增加SSL协议的端口吗?

listeners=PLAINTEXT://host.name:port,SSL://host.name:9093
advertised.listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093
#advertised.listeners=SSL://kafka-single:9095
ssl.keystore.location=/…/ssl/server/kafka.server.keystore.jks
ssl.keystore.password=@@@@123
ssl.key.password=@@@@123
ssl.truststore.location=/…/ssl/trust/kafka.server.truststore.jks
ssl.truststore.password=@@@@123##注意:ssl.truststore.password 在技术上是可选的,但强烈推荐设置。 如果未设置密码,则仍可访问信任库,但会禁用完整性检查。
ssl.client.auth=required ##是否需要客户端身份验证。如果设置为required,是双向认证,服务器端会验证客户端身份。如果设置为requested,是单向认证,则没有keystore证书的客户端也可连接broker。不建议设置为reqeusted。
ssl.keystore.type=PKCS12
ssl.truststore.type=JKS

2、其他可选参数
ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1 ##至少要列出broker端的协议之一。
ssl.cipher.suites= ##TLS or SSL
ssl.secure.random.implementation=SHA1PRNG

配置主机名验证。
kafka2.0.x开始, 默认情况下客户端连接以及broker之间的连接启用了服务器的主机名验证,为防止中间人攻击。
将ssl.endpoint.identification.algorithm设置为了HTTPS,即:需要验证主机名。

如果不需要验证主机名,那么可以这么设置ssl.endpoint.identification.algorithm=即可。

ssl.endpoint.identification.algorithm=HTTPS

设置内部访问也用SSL,默认值为security.inter.broker.protocol=PLAINTEXT

security.inter.broker.protocol=SSL
注:如果设置的内部broker的通讯协议PLAINTEXT,那么监听PLAINTEXT的时候就需要作相应的配置listeners=PLAINTEXT://host.name:port,SSL://host.name:port。

(三)、重启kafka
./bin/kafka-server-start.sh -daemon ./config/server.ssl.properties

如果配置SSL之前,存在Kafka数据,那么建议重新换一个位置来存放数据;
如果确保之前的数据已经没什么用了,也可以直接删除之前的数据

(四)、本机测试
1、测试9093端口可以访问:
openssl s_client -debug -connect demo3:9093 -tls1
以下说明连接成功。

2、测试创建Topic
./bin/kafka-topics.sh --list --zookeeper demo3:2181/kafka-2.8
./bin/kafka-topics.sh --create --zookeeper demo3:2181/kafka-2.8 --replication-factor 2 --partitions 10 --topic test2

3、测试生产、消费数据
首先,创建consumer.properties
group.id=demo3-group
client.id=demo3
security.protocol=SSL
ssl.truststore.location=/data/kafka/kafka_2.12-2.8.0/ssl/trust/kafka.client.truststore.jks
ssl.truststore.password=@@@@123
##如果服务器端设置了:ssl.client.auth=required,则必须提供kafka.server.keystore.jks文件。如果ssl.client.auth=requested,则可以只提供kafka.client.truststore.jks文件。
ssl.keystore.password=@@@@123
ssl.keystore.location=/data/kafka/kafka_2.12-2.8.0/ssl/server/kafka.server.keystore.jks

然后生产、消费数据:
./bin/kafka-console-producer.sh --broker-list demo3:9093 --topic test --producer.config ./ssl/producer.properties
./bin/kafka-console-consumer.sh --bootstrap-server demo3:9093 --topic test --from-beginning --consumer.config ./ssl/consumer.properties

三、远程Kakfa客户端配置https://docs.confluent.io/platform/current/kafka/authentication_ssl.html#clients
任意要与broker进行交互的主机,都要提供安全配置信息。包括:副本、kafka客户端,java客户端。
如果直接在其他主机上执行,消费、生产数据的命令时,会报错Broker连接失败:Bootstrap broker demo3:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

1、将Kafka集群中的ssl/server/kafka.server.keystore.jks文件和ssl/server/kafka.client.truststore.jks文件,拷贝至客户端运行环境。
2、配置consumer.properties(参考以上配置)
#group.id=demo2-consumer-group
client.id=demo2

security.protocol=SSL
ssl.truststore.location=/data/kafka/kafka_2.12-2.8.0/demo3-ssl/trust/kafka.client.truststore.jks
ssl.truststore.password=@@@@123
##如果服务器端设置了:ssl.client.auth=required,则必须提供kafka.server.keystore.jks文件。如果ssl.client.auth=requested,则可以只提供kafka.client.truststore.jks文件。
ssl.keystore.password=@@@@123
ssl.keystore.location=/data/kafka/kafka_2.12-2.8.0/ssl/server/kafka.server.keystore.jks

3、执行消费命令
./bin/kafka-console-consumer.sh --bootstrap-server demo3:9093 --topic test --from-beginning --consumer.config ./ssl/consumer.properties

四、java访问使用SSL加密的kafka集群。
1、将Kafka集群中的ssl/server/kafka.server.keystore.jks文件和ssl/server/kafka.client.truststore.jks文件,拷贝至客户端
2、配置Properties类的参数
Properties props = new Properties();
props.put(“security.protocol”, “SSL”);
props.put(“ssl.truststore.location”, “E:\kafka\safe\client.truststore.jks”);
props.put(“ssl.truststore.password”, “test1234”);

props.put("ssl.keystore.location", "E:\\kafka\\safe\\client.keystore.jks");
props.put("ssl.keystore.password", "p2****02");
props.put("ssl.key.password", "p((((2");KafkaConsumer consumer=new KafkaConsumer(props);

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

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

相关文章

配置WLAN 示例

规格 仅AR129CVW、AR129CGVW-L、AR109W、AR109GW-L、AR161W、AR161EW、AR161FGW-L、AR161FW、AR169FVW、AR169JFVW-4B4S、AR169JFVW-2S、AR169EGW-L、AR169EW、AR169FGW-L、AR169W-P-M9、AR1220EVW和AR301W支持WLAN-FAT AP功能。 组网需求 如图1所示,企业使用WLAN…

【拓展】理解AppID、OpenID、UnionID

目录 历史背景AppIDAppSecretOpenIDUnionID三者区别使用方法AppIDOpenID/**UnionID**拓展 历史背景 基本概念介绍 | 微信开放文档 微信小程序:一文彻底搞懂openid和unionid-腾讯云开发者社区-腾讯云 用户进行小程序登陆时,需要获取用户信息,…

通用的ERP系统功能清单有哪些?

一、通用的ERP系统功能清单 通用的ERP(Enterprise Resource Planning,企业资源计划)系统是一套集成的业务应用程序,旨在帮助企业有效管理财务、销售、运营等关键业务流程。以下是一个清晰的ERP系统功能清单,涵盖了其主…

类和对象-友元-友元类

友元类 #include<iostream> #include<string> using namespace std;// 前向声明 class Building;class GoodGay { public:GoodGay();void visit(); // 访问函数&#xff0c;访问Building中的属性private:Building * building; // 指向Building的指针 };class Bui…

【Flutter】列表流畅性优化

前言 在日常APP的开发中&#xff0c;列表是使用频率最高的&#xff0c;这里讲述在Flutter中优化列表的滑动速度与流畅度&#xff0c;以来提高用户的体验。 方案 1、使用ListView.builder代替ListView ListView.builder在创建列表的时候要比ListView更高效&#xff0c;因为L…

完成一个逻辑,点击一个按钮让按钮旁边的input输入框中写入‘你好‘

问: 完成一个逻辑,点击一个按钮让按钮旁边的input输入框中写入你好 回答: <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1…

AUTOSAR NvM模块(六)

NvMRbRamInitCheck 允许选择NvM模块在发生复位时的行为。 NVM_RB_RAM_INIT_CHECK_NONE&#xff1a;在复位后&#xff0c;NvM_ReadAll()会读取所有适合ReadAll的块。 NVM_RB_RAM_INIT_CHECK_QUICK&#xff1a;在复位后&#xff0c;会检查保存区是否丢失。如果未丢失&#xff…

工程技术类SCI,低分快刊首选期刊,无版面费!

1、期刊概况 【期刊简介】IF&#xff1a;1.0-2.0&#xff0c;JCR2区&#xff0c;中科院4区&#xff1b; 【检索情况】SCIE在检 【版面类型】正刊&#xff0c;仅少量版面&#xff1b; 【出刊频率】年刊 2、征稿范围 本刊主要是发表有关能源转型和可再生能源需求相关的研究文…

Snappy使用

Snappy使用 Snappy是谷歌开源的压缩和解压的开发包&#xff0c;目标在于实现高速的压缩而不是最大的压缩 项目地址&#xff1a;GitHub - google/snappy&#xff1a;快速压缩器/解压缩器 Cmake版本升级 该项目需要比较新的cmake&#xff0c;CMake 3.16.3 or higher is requi…

一首歌的时间 写成永远

大家好&#xff0c;我是秋意零。 就在&#xff0c;2024年6月20日。我本科毕业了&#xff0c;之前专科毕业挺有感触&#xff0c;也写了一篇文章进行记录。如今又毕业了&#xff0c;还是写一篇文章记录吧&#xff01;&#xff01; 专科毕业总结&#xff1a;大学三年总结&#xf…

Jtti:怎么在FTP服务器上实现多种操作系统的客户端连接?

随着全球互联网的普及&#xff0c;文件传输协议(FTP)成为了跨平台文件共享和传输的主流选择之一。FTP服务器作为地方性的网络存储设施&#xff0c;其支持多种操作系统的客户端连接&#xff0c;为用户提供了便捷的文件存取方式。无论您使用的是Windows、MacOS还是Linux操作系统&…

【SpringBoot3学习 | 第1篇】SpringBoot3介绍与配置文件

文章目录 前言 一. SpringBoot3介绍1.1 SpringBoot项目创建1. 创建Maven工程2. 添加依赖(springboot父工程依赖 , web启动器依赖)3. 编写启动引导类(springboot项目运行的入口)4. 编写处理器Controller5. 启动项目 1.2 项目理解1. 依赖不需要写版本原因2. 启动器(Starter)3. Sp…

vue项目访问 域名/index.html 空页面问题

很大可能是vue前端没做404页面&#xff0c;在路由不匹配时会跳转到空路由页面。 也可以把所有路由不匹配的网址全部跳转到域名首页。防止出现404或者页面错误。 如果使用docker nginx部署项目&#xff0c;配置文件上会有 try_files $uri $uri/ /index.html; 这段配置会尝试…

二刷 动态规划

什么是动态规划 Dynamic Programming DP 如果某一问题有很多重叠子问题&#xff0c;使用动态规划时最有效的 动态规划中每一个状态是由上一个状态推导出来的。 动规五部曲 1.确定dp数组以及下标的含义 2.确定递归公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数…

【java计算机毕设】仓库管理系统 MySQL springboot vue3 Maven 项目源码代码

目录 1项目功能 2项目介绍 3项目地址 1项目功能 【java计算机毕设】仓库管理系统MySQL springboot vue3 Maven小组项目设计源代码 2项目介绍 系统功能&#xff1a; vue3仓库管理系统&#xff0c;主要功能包含&#xff1a;个人信息管理&#xff0c;仓库管理&#xff0c;员工…

java设计模式(七)适配器模式(Adapter Pattern)

1、模式介绍&#xff1a; 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户希望的另外一个接口。适配器模式通常用于需要复用现有的类&#xff0c;但是接口与客户端的要求不完全匹配的情况。它包括两种形式&…

智能洗车管理系统设计

智能洗车管理系统设计的核心在于整合先进的信息技术与自动化设备&#xff0c;以提升洗车服务的效率、降低成本并增强客户体验。以下是一个概括性的设计框架&#xff1a; 1. 系统需求分析 用户需求&#xff1a;了解车主对于快速、便捷、高质量洗车服务的需求。业务需求&#xf…

【深度学习】注意力机制

https://blog.csdn.net/weixin_43334693/article/details/130189238 https://blog.csdn.net/weixin_47936614/article/details/130466448 https://blog.csdn.net/qq_51320133/article/details/138305880 注意力机制&#xff1a;在处理信息的时候&#xff0c;会将注意力放在需要…

gitee项目上不同的项目分别使用不用的用户上传

最近使用根据需要&#xff0c;希望不同的项目使用不同的用户上传&#xff0c;让不同的仓库展示不同的用户名&#xff01;&#xff01;&#xff01; 第一步查看全局的用户信息&#xff1a; # 查看目前全局git配置信息 git config -l #会输出全局的git配置信息 第二步进入到要设…

大科技公司大量裁员背后的真相

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…