kafka 开启认证授权

前言

1、前面自己写了一篇关于各个环境各个模式的安装的文章,大家可以去看看 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式

2、使用版本 kafka_2.13-3.4.1

3、kafka验证方式,有两大类如下,文档内容在 kafka官方文档的 第七节 security,强烈建议大家去看下,不想看英文的可以翻译中文后看

  • SSL ( 官方3.4.x SSL 文档链接)
  • SASL ( 官方3.4.x SASL 文档链接)

在这里插入图片描述

4、而SASL 又细分如下 4 小类,这四种都可以使用

类型说明官方文档链接
SASL/GSSAPI (Kerberos)使用的Kerberos认证,可以集成目录服务,比如AD。从Kafka0.9版本开始支持Kerberos
SASL/PLAIN使用简单用户名和密码形式。从Kafka0.10版本开始支持,不支持动态增加账户和密码SASL/PLAIN
SASL/SCRAM-SHA-256主要解决PLAIN动态更新问题以及安全机制,从Kafka0.10.2开始支持SCRAM
SASL/SCRAM-SHA-512主要解决PLAIN动态更新问题以及安全机制,从Kafka0.10.2开始支持SCRAM
SASL/OAUTHBEARER基于OAuth 2认证框架,从Kafka2.0版本开始支持OAUTHBEARER

5、在后面指定java 实现的时候,可以去源码里面找对应的,如下
在这里插入图片描述

6、需要先明确的一点是,用户认证和权限控制是两码事。用户认证是确认这个用户能否访问当前的系统,而权限控制是控制用户对当前系统中各种资源的访问权限。用户认证就是今天要讲的内容,而kafka的权限控制,则是对应 bin/kafka-acls.sh 工具所提供的一系列功能,这里不详细展开。

一、Linux 环境

SASL/PLAIN 模式中 Kafka的SASL_SSL和SASL_PLAINTEXT是两种不同的安全协议,用于保护Kafka集群中的通信。它们提供了不同级别的安全性和身份验证选项:

  1. SASL_SSL (Simple Authentication and Security Layer over SSL/TLS):这是Kafka的高度安全的传输协议。它结合了SSL/TLS(用于加密通信)和SASL(用于身份验证)来提供强大的安全性。使用SASL_SSL,Kafka客户端和服务器之间的通信将是加密的,并且需要经过身份验证才能建立连接。常见的身份验证机制包括GSSAPI(Kerberos)、PLAIN(用户名和密码)等。SASL_SSL是Kafka中最安全的选项,适用于敏感数据和合规性要求高的场景。

  2. SASL_PLAINTEXT (Simple Authentication and Security Layer over plaintext):这是Kafka的另一种SASL支持方式,但不涉及加密。使用SASL_PLAINTEXT,身份验证是必需的,但通信不加密。这意味着数据在传输过程中是以明文形式传输的,因此对于保护数据隐私要求较低的场景或在内部网络中使用时,可以选择此选项。常见的身份验证机制也包括PLAIN(用户名和密码)等。

通常,SASL_SSL是更安全的选项,因为它不仅提供身份验证,还提供数据的加密,从而更好地保护了数据的隐私和完整性。但是,它的配置相对复杂,可能需要设置SSL/TLS证书和密钥以及身份验证机制。SASL_PLAINTEXT相对来说更容易配置,但数据在传输过程中不加密,可能不适用于对数据隐私有更高要求的场景。

你的选择应该根据你的具体安全需求来决定。在需要高度安全性的生产环境中,通常会选择SASL_SSL,而在开发和测试环境中,SASL_PLAINTEXT可能更为方便。无论选择哪种方式,都需要谨慎配置和管理Kafka的安全设置,以确保系统的安全性。

所以下面文章中的 SASL_PLAINTEXT 可以替换为 SASL_SSL,相应的配置可以改成如下(可以看官网的 SASL/PLAIN)这一节,采用的就是这种

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

3、下载后解压

tar -xzf kafka_2.13-3.4.1.tgz
cd kafka_2.13-3.4.1

1.1、Kafka with KRaft 单节点 SASL/PLAIN 模式授权

1.1.1、服务端

1.1.1.1、编写服务端授权文件

1、编写授权文件 kafka_server_jaas.conf,此配置定义了两个用户(admin 和 client )。代理使用 KafkaServer 部分中的属性用户名和密码来启动与其他代理的连接。在此示例中,admin 是代理间通信的用户。属性集 user_用户名定义 是连接到代理的所有用户的密码,代理验证所有客户端连接。

# 因为我这里是使用 kraft 模式启动,所以,就把服务端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# 创建文件内容如下
vim kafka_server_jaas.conf### 末尾 分号一定不能忘记
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin-secret"user_admin="admin-secret"user_client="client-secret";
};

在这里插入图片描述

1.1.1.2、编写服务端启动脚本

1、复制kafka服务端启动脚本

cd /opt/kafka/kafka_2.13-3.4.1/bin/
cp kafka-server-start.sh kafka-server-start-sasl.sh

在这里插入图片描述

2、修改我们copy的启动脚本,将我们前面将要创建的配置文件(kafka_jaas.conf),给指定进去

cd /opt/kafka/kafka_2.13-3.4.1/bin
vim kafka-server-start-sasl.sh# 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_server_jaas.conf"

在这里插入图片描述

1.1.1.3、修改服务端 配置文件 server.properties

1、我这边是启动的 kraft 模式,所以我就修改对应的 kraft 目录下的配置文件即可

# 进入kraft/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# copy并编辑server.properties文件
cp server.properties  server-sasl.properties# 修改
vim server-sasl.properties# 修改以下内容
###
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.173.129:9092
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
###

在这里插入图片描述

在这里插入图片描述

1.1.2、客户端

1.1.2.1、编写客户端授权文件
# 因为我这里是使用 kraft 模式启动,所以,就把客户端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft# 创建文件内容如下
vim kafka_client_jaas.conf### 末尾 分号一定不能忘记
KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="client"password="client-secret";
};

在这里插入图片描述

1.1.2.2、编写消费者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin# copy 并修改 
cp kafka-console-consumer.sh kafka-console-consumer-sasl.sh# 修改,指定我们前面写的客户端配置文件
vim kafka-console-consumer-sasl.sh# ★ 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx512M -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf"

在这里插入图片描述

1.1.2.3、编写消费者启动脚本的配置文件 consumer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config# copy编辑consumer-sasl.properties内容
cp consumer.properties  consumer-sasl.properties
vim consumer-sasl.properties###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
###

在这里插入图片描述

1.1.2.4、编写生产者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin# copy 并修改 
cp kafka-console-producer.sh kafka-console-producer-sasl.sh# 修改,指定我们前面写的客户端配置文件
vim kafka-console-producer-sasl.sh# ★ 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx512M  -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf"

在这里插入图片描述

1.1.2.3、编写生产者启动脚本的配置文件 producer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config# copy编辑consumer-sasl.properties内容
cp producer.properties  producer-sasl.properties
vim producer-sasl.properties###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
###

在这里插入图片描述

1.1.1.5、修改通用命令脚本的配置文件

1、什么是通用命令脚本,比如说,创建topic的脚本,它链接kafka也是需要认证的,所以,我们为这一类没有指定配置的脚本,创建一个通用的

# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft
# 创建command_config文件
touch command_config
# 编辑command_config内容
vim command_config###  千万注意 最后的分号 不能忘记了
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="client" password="client-secret";
###

在这里插入图片描述

1.1.3、启动

1、完成上面的配置,那么我们就可以启动了,就是正常的 kraft 模式启动流程。

1.1.3.1、生成集群 UUID
# 进入到文件夹
cd /opt/kafka/kafka_2.13-3.4.1
# 创建 集群id
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
# 查看集群id是多少
echo $KAFKA_CLUSTER_ID

在这里插入图片描述

1.1.3.2、格式化日志目录

1、使用上面的 KAFKA_CLUSTER_ID 参数,默认存储目录是/tmp/kraft-combined-logs,你可以修改配置文件的值

注意这里使用的是 config/kraft/sasl.properties, 你可以点进去看下配置,可以看到,当前的这个配置的角色是 broker,controller了,就不再需要zookeeper了.
在这里插入图片描述

cd /opt/kafka/kafka_2.13-3.4.1
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server-sasl.properties

在这里插入图片描述

2、可以看到了 /tmp/kraft-combined-logs 文件夹也存在了

在这里插入图片描述

1.1.3.3、启动kafka 服务

1、为了方便观察启动状态,这里就直接前台启动了

记得这里一定要用我们修改过后的脚本来启动 kafka-server-start-sasl.sh,这个脚本里面指定认证文件

cd /opt/kafka/kafka_2.13-3.4.1
# 启动
bin/kafka-server-start-sasl.sh config/kraft/server-sasl.properties# 如果希望后台启动,则如下 加上 -daemon 即可  对应的日志文件在  /opt/kafka/kafka_2.13-3.4.1/logs 目录下,最新的日志文件是 erver.log
bin/kafka-server-start-sasl.sh -daemon config/kraft/server-sasl.properties# 关闭kafka ,如果是前台的,直接 CTRL C 关闭当前进程就好,如果是后台的,可以执行命令
bin/kafka-server-stop.sh config/kraft/server-sasl.properties

在这里插入图片描述

1.1.4、链接测试

1.1.3.1、不使用认证的方式脚本命令行(服务端会提示无法链接)

1、我们先不使用认证授权的文件链接试一下,会发现下面这三个都是无法访问的,可以看到对应的服务端输出的日志

2、通用脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

在这里插入图片描述

3、消费者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning 

在这里插入图片描述

4、生产者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接
bin/kafka-console-producer.sh --bootstrap-server 127.0.0.1:9092 --topic test 

在这里插入图片描述

5、springBoot 项目,具体配置这里就不再细说了,链接之后,只要对kafak执行操作,就会如下错误,超时

记得部署 kafka 的服务器开放 9092 端口,或者关闭防火墙

在这里插入图片描述

在这里插入图片描述

1.1.3.2、使用认证的方式脚本命令行(链接成功)

1、通用脚本,第一开始因为这里还未创建过topic ,所以没有数据,后面可以再运行一下。

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092 --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config# 创建topic 
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic test  --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config

在这里插入图片描述

3、消费者脚本,执行完成后,页面会等待队列消息

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接  --consumer.config 指定消费者配置文件
bin/kafka-console-consumer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning --consumer.config config/consumer-sasl.properties

在这里插入图片描述

4、生产者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接  --producer.config  指定消费者配置文件
bin/kafka-console-producer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --producer.config config/producer-sasl.properties

在这里插入图片描述
此刻,消费者控制台也收到消息了

在这里插入图片描述

5、springBoot 项目,增加账号密码,如下,后面的分号一定不能忘记,加上如下配置之后就可以了

consumer和producer可以统一配置也可以单独配置(Kafka stream SASL/PLANTEXT配置也一样,统一配置对stream同样生效)

记得部署 kafka 的服务器开放 9092 端口,或者关闭防火墙

    properties:security.protocol: SASL_PLAINTEXTsasl.mechanism: PLAINsasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password="client-secret";

在这里插入图片描述

1.2、Kafka with KRaft 单节点 SSL 模式授权

参考这篇文章:写的很好 kafka SSL认证

二、kafka-ui 链接开启认证授权的kafka

连接带认证的kafka集群在kafka-ui的github上面也有,但是文章写的不太全面。如果没有配置SASL_PLAINTEXT认证可以参考我之前写的这篇文章 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式

2.1、SASL_PLAINTEXT

1、连接SASL_PLAINTEXT认证的kafka需要添加如下三个环境变量,KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG 变量指定的用户名密码需要与实际情况一致。

我这里因为镜像已经前提下载过了,所以就没有显示下载镜像的步骤

docker run -d -p 1992:8080 --name kafka-ui  \
--restart=always \
-v /data/docker/kafka/kafka-ui/config.yml:/etc/kafkaui/dynamic_config.yaml \
-e KAFKA_CLUSTERS_0_NAME=local \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=192.168.173.129:9092 \
-e DYNAMIC_CONFIG_ENABLED='true' \
-e AUTH_TYPE=LOGIN_FORM   \
-e SPRING_SECURITY_USER_NAME=admin \
-e SPRING_SECURITY_USER_PASSWORD=admin \
-e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=SASL_PLAINTEXT \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM=PLAIN \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG='org.apache.kafka.common.security.plain.PlainLoginModule required username="client" password="client-secret";' \
provectuslabs/kafka-ui:latest

在这里插入图片描述

2、如果报错,查看 /data/docker/kafka/kafka-ui/config.yml 文件是否存在,可以先提前创建,参数含义,大家也能看出来,如果有不明白的,大家可以参考我之前写的这篇文章 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式

3、登录 http://192.168.173.129:1992,密码就是我们在启动时配置的 -e SPRING_SECURITY_USER_NAME-e SPRING_SECURITY_USER_PASSWORD admin admin

在这里插入图片描述

4、登录进去如下,如果能获取带信息,就说明没有问题了
在这里插入图片描述

2.2、SSL认证

1、连接SSL认证的kafka需要额外添加如下四个环境变量,其中KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION 变量指定的配置文件需要时在配置ssl时候提前生成的。

2、另外注意 KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD 变量中指定的密码也是实际的密码。

docker run -p 1993:8080 \--name kafka-ui-pwd \-e KAFKA_CLUSTERS_0_NAME=kafka8082 \-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=localhost:8082 \-e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=SSL \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_LOCATION=/cert/client.truststore.jks \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_TRUSTSTORE_PASSWORD=admin \-e KAFKA_CLUSTERS_0_PROPERTIES_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM='' \-e TZ=Asia/Shanghai \-e LANG=C.UTF-8 \-v /data/users/yulei/ssl_cert:/cert \-d provectuslabs/kafka-ui:latest 

结尾

1、kafka配置个账号密码… 确实有些麻烦!

参考文章:

  • Authentication using SASL/PLAIN

  • 【保姆式通关宝典】使用Kraft快速搭建Kafka集群(含服务鉴权)

  • kafka服务端设置用户和密码登录及springboot访问实现

  • Kafka配置用户名密码访问

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

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

相关文章

WAF绕过-信息收集之反爬虫延时代理池 46

老师用的阿里云的服务器,装了宝塔和安全狗, 演示案例 Safedog-默认拦截机制分析绕过-未开CC 没有打开防止流量攻击的安全狗, 而这里,get请求可以直接看到返回结果,而head就不行。 我们就给工具换成get请求 在没有c…

c++视觉处理----绘制直方图,H—S直方图,二维H—S直方图,RGB三色直方图

直方图:cv::calcHist() cv::calcHist() 是 OpenCV 中用于计算直方图的函数。直方图是一种用于可视化图像亮度或颜色分布的工具。这函数通常应用于灰度图像或彩色图像的各个通道。以下是 cv::calcHist() 函数的基本语法和参数: void cv::calcHist(const…

Docker在边缘计算中的崭露头角:探索容器技术如何驱动边缘计算的新浪潮

文章目录 第一部分:边缘计算和Docker容器边缘计算的定义Docker容器的崭露头角1. 可移植性2. 资源隔离3. 自动化部署和伸缩 第二部分:应用案例1. 边缘分析2. 工业自动化3. 远程办公 第三部分:挑战和解决方案1. 网络延迟2. 安全性3. 管理和部署…

树莓派部署.net core控制台程序

1、在自己的电脑上使用VS写一个Net6.0的控制台程序,我假设我就写个Helloworld。 发布项目 使用mobaxterm上传程序 就传三个文件就行 回到在mobaxterm中,进入目录输入:cd consolepublish,运行程序: dotnet ConsoleApp1.dll 输出h…

入行CSGO游戏搬砖项目前,这些问题一定要了解

最近咨询的人也不少,针对大家平时问到的问题,在这里做一个统一汇总和解答。 1、什么是国外steam游戏装备汇率差项目? 通俗易懂的理解就是,从国外steam游戏平台购买装备,再挂到国内网易buff平台上进行售卖。充值汇率差…

MyCat管理及监控

MyCat原理 在 MyCat 中,当执行一条 SQL 语句时, MyCat 需要进行 SQL 解析、分片分析、路由分析、读写分离分析等操作,最终经过一系列的分析决定将当前的SQL 语句到底路由到那几个 ( 或哪一个 ) 节点数据库,数据库将数据执行完毕后…

WSL+vscode配置miniob环境

1.配置WSL Windows Subsystem for Linux入门:安装配置图形界面中文环境vscode wu-kan 2.获取源码 找个位置Git Bash然后拉取代码 git clone https://github.com/oceanbase/miniob.git 3.安装相关依赖 https://gitee.com/liangcha-xyy/source/blob/master/how…

软件设计之工厂方法模式

工厂方法模式指定义一个创建对象的接口,让子类决定实例化哪一个类。 结构关系如下: 可以看到,客户端创建了两个接口,一个AbstractFactory,负责创建产品,一个Product,负责产品的实现。ConcreteF…

如何生成SSH服务器的ed25519公钥SHA256指纹

最近搭建ubuntu服务器,远程登录让确认指纹,研究一番搞懂了,记录一下。 1、putty 第一次登录服务器,出现提示: 让确认服务器指纹是否正确。 其中:箭头指向的 ed25519 :是一种非对称加密的签名方法&#xf…

【智能家居项目】裸机版本——网卡设备接入输入子系统 | 业务子系统 | 整体效果展示

🐱作者:一只大喵咪1201 🐱专栏:《智能家居项目》 🔥格言:你只管努力,剩下的交给时间! 目录 🥞网卡设备接入输入子系统🍔测试 🥞业务子系统&#…

PostGIS导入shp文件报错:dbf file (.dbf) can not be opened.

一、报错 刚开始以为是SRID输入错误,反复尝试SRID的输入,还是报错! 后来看到了这篇博客,解决了!https://blog.csdn.net/Fama_Q/article/details/117381378 二、导致报错的原因 导入的shp文件路径太深,换…

Jackson+Feign反序列化问题排查

概述 本文记录在使用Spring Cloud微服务开发时遇到的一个反序列化问题,RPC/HTTP框架使用的是Feign,JSON序列化反序列化工具是Jackson。 问题 测试环境的ELK告警日志如下: - [43f42bf7] 500 Server Error for HTTP POST "/api/open/d…

洗地机哪款最好用?口碑最好的家用洗地机推荐

洗地机方便快捷的清洁方式,如今融入到我们的日常生活需求中来了,然而,在市面上琳琅满目的洗地机品牌中,究竟哪款洗地机比较好用呢?今天,笔者将向大家推荐四款口碑最好的家用洗地机,让你在挑选时…

Java实现防重复提交,使用自定义注解的方式

目录 1.背景 2.思路 3.实现 创建自定义注解 编写拦截器 4.使用 5.验证 6.总结 1.背景 在进行添加操作时,防止恶意点击,后端进行请求接口的防重复提交 2.思路 通过拦截器搭配自定义注解的方式进行实现,拦截器拦截请求,使…

JS加密/解密之webpack打包代码逆向

Webpack 是一个强大的打包工具,能够将多个文件打包成一个或多个最终的文件。然而,将已经经过打包的代码还原回原始源代码并不是一件直接的事情,因为 webpack 打包的过程通常会对代码进行压缩、混淆和优化,丢失了部分变量名和代码结…

Gralloc ION DMABUF in Camera Display

目录 Background knowledge Introduction ia pa va and memory addressing Memory Addressing Page Frame Management Memory area management DMA IOVA and IOMMU Introduce DMABUF What is DMABUF DMABUF 关键概念 DMABUF APIS –The Exporter DMABUF APIS –The…

Flutter - 波浪动画和lottie动画的使用

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 波浪动画三方库wave lottie动画 Lottie 是 Airbnb 开发的一款能够为原生应用添加动画效果的开源工具。具有丰富的动画效果和交互功能。 # 波浪动画 https://pub-web…

高并发下的服务容错

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络 原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会 出现网络延迟&#xf…

线性回归模型进行特征重要性分析

目的 线性回归是很常用的模型;在局部可解释性上也经常用到。 数据归一化 归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下,特征归一化可以提高模型的性能,但并不是所有情况下都需要进行归一…

PG学习笔记(PostgreSQL)

PG学习笔记(PostgreSQL) 1、PG特点 项目极限值最大单个数据库大小不限最大最大数据单表大小32 TB单条记录最大1.6TB单字段最大允许1GB单表允许最大记录数不限单表最大字段数250~1600(取决于字段类型)单表最大索引数不限 2、PG安…