05_Pulsar的主要组件介绍与命令使用、名称空间、Pulsar的topic相关操作、Pulsar Topic(主题)相关操作_高级操作、

news2024/10/5 17:23:04

1.5.Apache Pulsar的主要组件介绍与命令使用
1.5.1.多租户模式
1.5.1.1. 什么是多租户
1.5.1.2.Pulsar多租户的相关特征_安全性(认证和授权)
1.5.1.3.Pulsar多租户的相关特性_隔离性
1.5.1.4.Pulsar多租户的相关操作
1-获取租户列表
2-创建租户
3-获取配置
4-更新配置
5-删除租户

====================
1.5.2.Pulsar的名称空间
1.5.2.1.什么是名称空间
1.5.2.2.Pulsar NameSpace(名称空间)相关操作_基本操作
1-在指定的租户下创建名称空间
2-获取所有的名称空间列表
3-删除名称空间


1.5.2.3.Pulsar Namespace(名称空间) 相关操作_高级操作
1-获取名称空间相关的配置策略
2-配置复制集群
2.1 设置backlog quota策略
2.2-获取给定命名空间复制集群的列表


3-配置backlog quota策略
3.1 - 获取backlog quota策略
3.2 - 获取backlog quota策略
3.3 - 移除backlog quota策略


4-配置持久化策略
4.1-设置持久化策略
4.2-获取持久化策略


5-配置消息存活时间(TTL)
5.1-设置消息存活时间
5.2 - 获取消息的存活时间
5.3 - 删除消息的存活时间


6 - 配置整个名称空间中Topic的消息发送速率。
6.1-设置Topic的消息发送的速率
6.2 获取topic的消息发送速率


7-配置整个名称空间中Topic的消息收速率
7.1-设置Topic的消息接收速率
7.2 获取topic的消息接收速率


8-配置整个名称空间中Topic的复制集群的速率
8.1-设置Topic的消息复制集群的速率
8.2 获取topic的消息复制集群的速率

====================
1.5.3.Pulsar的topic相关操作
1.5.3.1.什么是Topic
1.5.3.2. Pulsar Topic(主题)相关操作_基础操作
1-创建Topic
2 - 列出当前某个名称空间下的所有Topic
3-更新Topic操作
4-删除Topic操作

====================
1.5.3.3.Pulsar Topic(主题)相关操作_高级操作
1-授权
2-获取权限
3-取消权限

1.5.Apache Pulsar的主要组件介绍与命令使用

1.5.1.多租户模式

1.5.1.1. 什么是多租户

多租户是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。
简单讲:在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。

Apache Pulsar 最初诞生于雅虎,当时就是为了解决雅虎内部各个部门之间数据的协调,所以多租户特性显得至关重用,Pulsar 从诞生之日起就考虑到多租户这一特性,并在后续的实现过程中,将其不断的完善。多租户这一特性,使得各个部门之间可以共享同一份数据,不用单独部署独立的系统来操作数据,很好的保证了各部门间数据一致性的问题,同时简化维护成本

Pulsar 的多租户设计符合上述要求:

  • 使用身份验证、授权和 ACL(访问控制列表)确保其安全性
  • 为每个租户强制执行存储配额
  • 支持在运行时更改隔离机制,从而实现操作成本低和管理简单

Pulsar的多租户性质主要体现在topic的URL中, 其结构如下:

persistent://tenant/namespace/topic

从URL中可以看出tenant(租户)是topic最基本的单元(比命名空间和topic名称更为基本)
在这里插入图片描述

1.5.1.2.Pulsar多租户的相关特征_安全性(认证和授权)

一个多租户系统需要在租户内提供系统级别的安全性,细分来讲,主要可以归类为以下两点:

  • 租户只能访问它有权限访问的topics
  • 不允许访问它无法访问的topics

在 Pulsar 中,多租户的安全性是通过身份验证和授权机制实现的。当 client 连接到 pulsar broker 时,broker 会使用身份验证插件来验证此客户端的身份,然后为其分配一个 string 类型的 role token。role token 主要有如下作用:

  • 判断client是否有对topics进行生产和消费消息的权限
  • 管理租户属性的配置

Pulsar目前支持以下几种身份认证,同时支持自定义实现自己的身份认证程序

  • TLS客户端身份认证
  • 雅虎的身份证系统:Athenz
  • Kerberos
  • JSON Web Token认证
    在这里插入图片描述

1.5.1.3.Pulsar多租户的相关特性_隔离性

  • 软隔离:通过磁盘配额,流量控制和限制等手段
存储:
Apache Pulsar使用Bookkeeper来作为其存储层,bookie是Bookkeeper的实例,Bookkeeper本身就是具有I/O分离(读写分离)的特征,可以很多的做好IO隔离,提升读写的效率。

同时, 不同的租户可以为不同的NameSpace配置不同的存储配额, 当租户内消息的大小达到了存储配额的限制, Pulsar会 
采取相应的措施, 例如: 阻止消息生成, 抛异常 或丢弃数据等。

Broker:
每个Borker使用的内存资源都是有上限的, 当Broker达到配置的CPU或内存使用的阈值后, Pulsar会迅速的将流量转移到负载较小的Broker处理
在生产和消费方面, Pulsar都可以进行流量控制,租户可以配置发送和接收的速率,避免出现一个客户端占用当Broker 
的所有处理资源
  • 硬隔离:物理资源隔离
    Pulsar 允许将某些租户或名称空间与特定 Broker 进行隔离。这可确保这些租户或命名空间可以充分利用该特定 Broker 上的资源。

1.5.1.4.Pulsar多租户的相关操作

  • 1-获取租户列表
[root@node1 bin]# cd /export/server/pulsar-2.8.1/bin/
[root@node1 bin]# ./pulsar-admin tenants list
"public"
"pulsar"
[root@node1 bin]#
  • 2-创建租户
[root@node1 bin]# ./pulsar-admin tenants create my-tenant
[root@node1 bin]# ./pulsar-admin tenants list
"my-tenant"
"public"
"pulsar"
[root@node1 bin]#

在创建租户时,可以使用-r或者–admin-roles标志分配管理角色。可以用逗号分隔的列表指定多个角色。

[root@node1 bin]# ./pulsar-admin tenants create my-tenant2 --admin-roles role1,role2,role3
[root@node1 bin]# ./pulsar-admin tenants list
"my-tenant"
"my-tenant2"
"public"
"pulsar"
[root@node1 bin]# ./pulsar-admin tenants create my-tenant3 -r role1
[root@node1 bin]#
  • 3-获取配置
[root@node1 bin]# ./pulsar-admin tenants get my-tenant
{
  "adminRoles" : [ ],
  "allowedClusters" : [ "pulsar-cluster" ]
}
[root@node1 bin]# ./pulsar-admin tenants get my-tenant2
{
  "adminRoles" : [ "role1", "role2", "role3" ],
  "allowedClusters" : [ "pulsar-cluster" ]
}
[root@node1 bin]#
  • 4-更新配置
[root@node1 bin]# ./pulsar-admin tenants update my-tenant
[root@node1 bin]# ./pulsar-admin tenants get my-tenant
{
  "adminRoles" : [ ],
  "allowedClusters" : [ "pulsar-cluster" ]
}
[root@node1 bin]# ./pulsar-admin tenants update my-tenant -r role1
[root@node1 bin]# ./pulsar-admin tenants get my-tenant
{
  "adminRoles" : [ "role1" ],
  "allowedClusters" : [ "pulsar-cluster" ]
}
[root@node1 bin]#
  • 5-删除租户
    注意:在删除的时候,如果库下已经有名称空间,是无法删除的,需要先删除名称空间。
[root@node1 bin]# ./pulsar-admin tenants list
"my-tenant"
"my-tenant2"
"my-tenant3"
"public"
"pulsar"
[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin tenants delete my-tenant3
[root@node1 bin]# ./pulsar-admin tenants list
"my-tenant"
"my-tenant2"
"public"
"pulsar"
[root@node1 bin]# ./pulsar-admin tenants delete my-tenant
[root@node1 bin]#

1.5.2.Pulsar的名称空间

1.5.2.1.什么是名称空间

namespace是Pulsar中最基本的管理单元,在namespace这一层面,可以设置权限,调整副本设置,管理跨集群的消息复制,控制消息策略和执行关键操作。一个主题topic可以继承其所对应的namespace的属性,因此我们只需对namespace的属性进行设置,就可以一次性设置该namespace中所有主题topic的属性。

namespace有两种,分别是本地的namespace和全局的namespace:

  • 本地namespace——仅对定义它的集群可见。
  • 全局namespace——跨集群可见,可以是同一个数据中心的集群,也可以是跨地域中心的集群,这依赖于是否在namespace中设置了跨集群拷贝数据的功能。

虽然本地namespace和全局namespace的作用域不同,但是只要对他们进行适当的设置,都可以跨团队和跨组织共享。一
旦生产者获得了namespace的写入权限,那么它就可以往namespace中的所有topic主题写入数据,如果某个主题不存在,则在生产者第一次写入数据时动态创建。

1.5.2.2.Pulsar NameSpace(名称空间)相关操作_基本操作

  • 1-在指定的租户下创建名称空间
[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin tenants create test-tenant
[root@node1 bin]# ./pulsar-admin tenants list
"my-tenant"
"my-tenant2"
"public"
"pulsar"
"test-tenant"
[root@node1 bin]# ./pulsar-admin namespaces create test-tenant/test-namespace
[root@node1 bin]#
  • 2-获取所有的名称空间列表
[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin namespaces list test-tenant
"test-tenant/test-namespace"
[root@node1 bin]# ./pulsar-admin namespaces create test-tenant/ns1
[root@node1 bin]# ./pulsar-admin namespaces list test-tenant
"test-tenant/ns1"
"test-tenant/test-namespace"
[root@node1 bin]#
  • 3-删除名称空间
[root@node1 bin]# ./pulsar-admin namespaces list test-tenant
"test-tenant/ns1"
"test-tenant/test-namespace"
[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin namespaces delete test-tenant/ns1
[root@node1 bin]# ./pulsar-admin namespaces list test-tenant
"test-tenant/test-namespace"
[root@node1 bin]#

1.5.2.3.Pulsar Namespace(名称空间) 相关操作_高级操作

  • 1-获取名称空间相关的配置策略
[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin namespaces policies test-tenant/test-namespace
{
  "auth_policies" : {
    "namespace_auth" : { },
    "destination_auth" : { },
    "subscription_auth_roles" : { }
  },
  "replication_clusters" : [ "pulsar-cluster" ],
  "bundles" : {
    "boundaries" : [ "0x00000000", "0x40000000", "0x80000000", "0xc0000000", "0xffffffff" ],
    "numBundles" : 4
  },
  "backlog_quota_map" : { },
  "clusterDispatchRate" : { },
  "topicDispatchRate" : { },
  "subscriptionDispatchRate" : { },
  "replicatorDispatchRate" : { },
  "clusterSubscribeRate" : { },
  "publishMaxMessageRate" : { },
  "latency_stats_sample_rate" : { },
  "deleted" : false,
  "encryption_required" : false,
  "subscription_auth_mode" : "None",
  "offload_threshold" : -1,
  "schema_auto_update_compatibility_strategy" : "Full",
  "schema_compatibility_strategy" : "UNDEFINED",
  "is_allow_auto_update_schema" : true,
  "schema_validation_enforced" : false,
  "subscription_types_enabled" : [ ],
  "properties" : { }
}
[root@node1 bin]#
  • 2-配置复制集群
[root@node1 bin]# ./pulsar-admin namespaces create test-tenant/ns1
[root@node1 bin]# ./pulsar-admin namespaces get-clusters test-tenant/ns1
"pulsar-cluster"

# 2.1 设置backlog quota策略
[root@node1 bin]# ./pulsar-admin namespaces set-clusters test-tenant/ns1 --clusters cl2
12:01:55.990 [AsyncHttpClient-7-1] WARN  org.apache.pulsar.client.admin.internal.BaseResource - [http://node1:8080/admin/v2/namespaces/test-tenant/ns1/replication] Failed to perform http post request: javax.ws.rs.ForbiddenException: HTTP 403 Forbidden
Invalid cluster id: cl2

Reason: Invalid cluster id: cl2
[root@node1 bin]#
# 2.2-获取给定命名空间复制集群的列表
[root@node1 bin]# ./pulsar-admin namespaces get-clusters test-tenant/test-namespace
"pulsar-cluster"
[root@node1 bin]#
  • 3-配置backlog quota策略
    待定配额帮助Broker在某个名称空间达到某个阈值限制时限制其带宽/存储。管理员可以设置限制,并在达到限制后采取相应的行动。

3.1 - 获取backlog quota策略

[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin namespaces set-backlog-quota --limit 10G --limitTime 36000 --policy producer_request_hold test-tenant/ns1

--policy 的值选择: 
producer_request_hold:broker暂停运行,并不再持久化生产请求负载。
producer_exception:broker抛出异常,并与客户端断开连接。
consumer_backlog_eviction:broker 丢弃积压消息。

3.2 - 获取backlog quota策略

[root@node1 bin]# ./pulsar-admin namespaces get-backlog-quotas test-tenant/ns1
"destination_storage    BacklogQuotaImpl(limitSize=10737418240, limitTime=36000, policy=producer_request_hold)"

3.3 - 移除backlog quota策略

[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin namespaces get-backlog-quotas test-tenant/ns1
"destination_storage    BacklogQuotaImpl(limitSize=10737418240, limitTime=36000, policy=producer_request_hold)"
[root@node1 bin]# ./pulsar-admin namespaces remove-backlog-quota test-tenant/ns1
[root@node1 bin]# ./pulsar-admin namespaces get-backlog-quotas test-tenant/ns1
[root@node1 bin]#
  • 4-配置持久化策略
    持久化策略可以给定命名空间下topic上的所有消息配置持久等级。

4.1-设置持久化策略

[root@node1 bin]# ./pulsar-admin namespaces set-persistence --bookkeeper-ack-quorum 2 --bookkeeper-ensemble 3 --bookkeeper-write-quorum 2 --ml-mark-delete-max-rate 0 test-tenant/ns1

参数说明:
bookkeeper-ack-quorum:每个entry 在等待的 acks(有保证的副本)数量,默认值:0 
bookkeeper-ensemble:单个topic 使用的 bookie 数量,默认值:0 
bookkeeper-write-quorum:每个entry 要写入的次数,默认值:0 
ml-mark-delete-max-rate:标记-删除操作的限制速率(0表示无限制),默认值:0.0

4.2-获取持久化策略

[root@node1 bin]# ./pulsar-admin namespaces get-persistence test-tenant/ns1
{
  "bookkeeperEnsemble" : 3,
  "bookkeeperWriteQuorum" : 2,
  "bookkeeperAckQuorum" : 2,
  "managedLedgerMaxMarkDeleteRate" : 0.0
}
[root@node1 bin]#
  • 5-配置消息存活时间(TTL)
    以秒为单位

5.1-设置消息存活时间

[root@node1 bin]# ./pulsar-admin namespaces set-message-ttl --messageTTL 100 test-tenant/ns1

5.2 - 获取消息的存活时间

[root@node1 bin]# ./pulsar-admin namespaces get-message-ttl test-tenant/ns1
100

5.3 - 删除消息的存活时间

[root@node1 bin]# ./pulsar-admin namespaces get-message-ttl test-tenant/ns1
100
[root@node1 bin]# ./pulsar-admin namespaces remove-message-ttl test-tenant/ns1
[root@node1 bin]# ./pulsar-admin namespaces get-message-ttl test-tenant/ns1
null
[root@node1 bin]#

6 - 配置整个名称空间中Topic的消息发送速率。
6.1-设置Topic的消息发送的速率

[root@node1 bin]# ./pulsar-admin namespaces set-dispatch-rate test-tenant/ns1 \
> --msg-dispatch-rate 1000 \
> --byte-dispatch-rate 1048576 \
> --dispatch-rate-period 1

参数说明:
--msg-dispatch-rate : 每dispatch-rate-period秒钟发送的消息数量 
--byte-dispatch-rate : 每dispatch-rate-period秒钟发送的总字节数 
--dispatch-rate-period : 设置发送的速率, 比如 1 表示 每秒钟

6.2 获取topic的消息发送速率

[root@node1 bin]# ./pulsar-admin namespaces get-dispatch-rate test-tenant/ns1
{
  "dispatchThrottlingRateInMsg" : 1000,
  "dispatchThrottlingRateInByte" : 1048576,
  "relativeToPublishRate" : false,
  "ratePeriodInSecond" : 1
}
[root@node1 bin]#

7-配置整个名称空间中Topic的消息收速率
7.1-设置Topic的消息接收速率

./pulsar-admin namespaces set-subscription-dispatch-rate test-tenant/ns1 \
--msg-dispatch-rate 1000 \
--byte-dispatch-rate 1048576 \
--dispatch-rate-period 1

参数说明:
–msg-dispatch-rate: 每dispatch-rate-period秒钟接收的消息数据。
–byte-dispatch-rate: 每dispatch-rate-period秒钟接收的总字节数
–dispatch-rate-period: 设置接收的速率,比如1表示 每秒钟

7.2 获取topic的消息接收速率

[root@node1 bin]# ./pulsar-admin namespaces get-subscription-dispatch-rate test-tenant/ns1
{
  "dispatchThrottlingRateInMsg" : 1000,
  "dispatchThrottlingRateInByte" : 1048576,
  "relativeToPublishRate" : false,
  "ratePeriodInSecond" : 1
}

8-配置整个名称空间中Topic的复制集群的速率
8.1-设置Topic的消息复制集群的速率

[root@node1 bin]# ./pulsar-admin namespaces set-replicator-dispatch-rate test-tenant/ns1 \
> --msg-dispatch-rate 1000 \
> --byte-dispatch-rate 1048576 \
> --dispatch-rate-period 1

参数说明:
–msg-dispatch-rate : 每dispatch-rate-period秒钟复制集群的消息数量
–byte-dispatch-rate : 每dispatch-rate-period秒钟复制集群的总字节数
–dispatch-rate-period : 设置复制集群的速率, 比如 1 表示 每秒钟

8.2 获取topic的消息复制集群的速率

[root@node1 bin]# ./pulsar-admin namespaces get-replicator-dispatch-rate test-tenant/ns1
{
  "dispatchThrottlingRateInMsg" : 1000,
  "dispatchThrottlingRateInByte" : 1048576,
  "relativeToPublishRate" : false,
  "ratePeriodInSecond" : 1
}

1.5.3.Pulsar的topic相关操作

1.5.3.1.什么是Topic

Topic,话题主题的含义, 在一个名称空间下, 可以定义多个Topic 通过Topic进行数据的分类划分, 将不同的类别的消息放置到不同Topic, 消费者也可以从不同Topic中获取到相关的消息, 是一种更细粒度的消息划分操作, 同时在Topic下可以划分为多个分片, 进行分布式的存储操作, 每个分片下还存在有副本操作, 保证数据不丢失, 当然这些分片副本更多是由bookkeeper来提供支持。

Pulsar 提供持久化与非持久化两种topic。 持久化topic是消息发布、消费的逻辑端点。 持久化topic地址的命名格式如下:

persistent://tenant/namespace/topic

非持久topic应用在仅消费实时发布消息与不需要持久化保证的应用程序。 通过这种方式,它通过删除持久消息的开销来减少消息
发布延迟。 非持久化topic地址的命名格式如下:

non-persistent://tenant/namespace/topic

1.5.3.2. Pulsar Topic(主题)相关操作_基础操作

1-创建Topic
方式一:创建一个没有分区的topic

[root@node1 bin]# pwd
/export/server/pulsar-2.8.1/bin
[root@node1 bin]# ./pulsar-admin topics create persistent://test-tenant/ns1/my-topic

方式二:创建一个有分区的topic

./pulsar-admin topics create-partitioned-topic persistent://test-tenant/ns1/my-topic --partitions 4

注意:不管是有分区还是没有分区,创建topic后,如果没有任何操作,60s后pulsar会认为此topic是不活动的,会自动进行删除,以避免生成垃圾数据。

相关配置:
Brokerdeleteinactivetopicsenabenabled : 默认值为true 表示是否启动自动删除
BrokerDeleteInactiveTopicsFrequencySeconds: 默认为60s 表示检测未活动的时间

2 - 列出当前某个名称空间下的所有Topic

[root@node1 bin]# ./pulsar-admin topics list test-tenant/ns1
"persistent://test-tenant/ns1/my-topic-partition-2"
"persistent://test-tenant/ns1/my-topic-partition-3"
"persistent://test-tenant/ns1/my-topic-partition-0"
"persistent://test-tenant/ns1/my-topic-partition-1"
[root@node1 bin]#

3-更新Topic操作
我们可针对有分区的topic去更新其分区的数量。

[root@node1 bin]# ./pulsar-admin topics update-partitioned-topic persistent://test-tenant/ns1/my-topic --partitions 8
[root@node1 bin]# ./pulsar-admin topics list test-tenant/ns1
"persistent://test-tenant/ns1/my-topic-partition-2"
"persistent://test-tenant/ns1/my-topic-partition-3"
"persistent://test-tenant/ns1/my-topic-partition-4"
"persistent://test-tenant/ns1/my-topic-partition-5"
"persistent://test-tenant/ns1/my-topic-partition-6"
"persistent://test-tenant/ns1/my-topic-partition-7"
"persistent://test-tenant/ns1/my-topic-partition-0"
"persistent://test-tenant/ns1/my-topic-partition-1"
[root@node1 bin]#

4-删除Topic操作
删除没有分区的topic
准备:
./pulsar-admin namespaces create my-tenant/my-namespace (创建命名空间)
./pulsar-admin topics create persistent://my-tenant/my-namespace/my-topic (创建一个无分区的topic)
./pulsar-admin topics create-partitioned-topic persistent://my-tenant/my-namespace/my-topic2 --partitions 4 (创建一个有分区的topic)

删除没有分区的topic: 
./pulsar-admin topics delete persistent://my-tenant/my-namespace/my-topic
删除有分区的topic 
./pulsar-admin topics delete-partitioned-topic persistent://my-tenant/my-namespace/my-topic2 

1.5.3.3.Pulsar Topic(主题)相关操作_高级操作

1-授权

./pulsar-admin topics grant-permission --actions produce,consume --role application1 persistent://test-tenant/ns1/tp1

2-获取权限

pulsar-admin topics grant-permission --actions produce,consume --role application1 persistent://test- tenant/ns1/tp1 

3-取消权限

pulsar-admin topics revoke-permission --role application1 persistent://test-tenant/ns1/tp1 
{
  "application1": [ 
  "consume", 
  "produce" 
  ]
}

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

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

相关文章

RocketMQ单机安装与启动

RocketMQ单机安装与启动系统要求下载地址安装步骤RocketMq启动NameServer查看是否启动成功启动BrokerProxy查看是否启动成功修改tool.sh测试消息产生消息的消费关闭服务器系统要求 下载地址 官网下载地址 二进制包是已经编译完成后可以直接运行的,源码包是需要编译…

Vant2 源码分析之 vant-sticky

前言 原打算借鉴 vant-sticky 源码,实现业务需求的某个功能,第一眼看以为看懂了,拿来用的时候,才发现一知半解。看第二遍时,对不起,是我肤浅了。这里侧重分析实现原理,其他部分不拓展开来&…

轮转数组(每日一题)

目录 一、题目描述 二、题目分析 2.1 方法一 2.1.1 思路 2.1.2 代码 2.2 方法二 2.2.1 思路 2.2.2 代码 2.3 方法三 2.3.1 思路 2.3.2 代码 一、题目描述 oj链接:https://leetcode.cn/problems/rotate-array 给定一个整数数组 nums,将数组中的…

GDScript 导出变量 (Godot4.0)

概述 导出变量的功能在3.x版本中也是有的,但是4.0版本对其进行了语法上的改进。 导出变量在日常的游戏制作中提供节点的自定义参数化调节功能时非常有用,除此之外还用于自定义资源。 本文是(Bilibili巽星石)在4.0官方文档《GDScr…

手把手创建flask项目

Flask 框架流程 什么是Flask: Flask诞生于2010年, 使用python语言基于Werkzeug工具箱编写的轻量级Web开发框架 Flask本身相当于一个内核, 其他几乎所有的功能都要用到扩展(邮件:Flask-Mail, 用户认证:Flask-Login, 数据库:Flask-SQLAlchemy). Flask的核心在于Werkz…

在线图书借阅网站( Python +Vue 实现)

功能介绍 平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括:首页、图书详情页、用户中心模块。后台功能包括:总览、借阅管理、图书管理、分类…

unity知识点小结02

虚拟轴 虚拟轴就是一个数值在-11内的轴,这个数轴上重要的数值就是-1,0和1。当使用按键模拟一个完整的虚拟轴时需要用到两个按键,即将按键1设置为负轴按键,按键2设置为正轴按键。在没有按下任何按键的时候,虚拟轴的数值为0&#xf…

【UEFI基础】UEFI事件介绍

简述 在【UEFI基础】System Table和Architecture Protocols介绍Boot Service时提到有一部分与事件相关的接口,它们创建、触发、等待和关闭事件,来完成某些功能,本文将进一步介绍事件。 需要注意,因为Boot Service需要在DXE阶段才…

用数组名作函数参数的详解,以及形参实参采用数组名,形参实参采用指针变量的几种情况解析

关于地址,指针,指针变量可以参考我的这篇文章: 地址,指针,指针变量是什么?他们的区别?符号(*)在不同位置的解释?_juechen333的博客-CSDN博客https://blog.csd…

Kali的安装与配置

虚拟机安装kali Kali下载 官网下载地址 注:下载VMware版本 百度网盘 提取码:Chen 创建虚拟机 将下载的压缩包放到合适的位置解压 双击运行虚拟机 登录 默认的账号密码都为kali 基本配置 修改root账户密码 打开命令行输入 sudo su root 输入kali 输…

【机器学习】验证集loss震荡(loss的其他问题)

训练过程中发现,train loss一直下降,train acc一直上升;但是val loss、val acc却一直震荡。loss一会上一会下,但是总体趋势是向下的。 “loss震荡但验证集准确率总体下降” 如何解决? 测试集准确率这样震荡是正常的吗…

python2.7/3.8版本安装教程

Wiondos-Python环境安装 Python2.7 下载地址 官网 速度比较慢 百度网盘 提取码:Chen 安装Python2.7 直接next 选择安装目录 注意这一步将最后一项勾选 安装完成 cmd中输入python 检查pip是否安装 cmd中输入pip --version Python3.8 下载地址 官网 速度比较慢 百度网…

蓝桥杯C/C++程序设计 往届真题汇总(进阶篇)

文章目录1. 最短路2. 数字三角形3. 递增序列4. 杨辉三角形5. 跳跃6. 路径7. 迷宫8. 装饰珠9. 明码10. 字串分值11. 作物杂交12. 承压计算13. 全球变暖14. 直线15. 平面切分1. 最短路 题目描述: 如下图所示,G是一个无向图,其中蓝色边的长度是…

线程池执行父子任务,导致线程死锁

前言, 一次线程池的不当使用,导致了现场出现了线程死锁,接口一直不返回。而且由于这是一个公共的线程池,其他使用了次线程池的业务也一直阻塞,系统出现了OOM,不过是幸好是线程同事测试出来的,没…

RPC通信原理解析

一、什么是RPC框架? RPC,全称为Remote Procedure Call,即远程过程调用,是一种计算机通信协议。 比如现在有两台机器:A机器和B机器,并且分别部署了应用A和应用B。假设此时位于A机器上的A应用想要调用位于B机…

第十一届蓝桥杯大赛青少组国赛Python真题2

第十一届蓝桥杯大赛青少组Python 真题 第二题 提示信息: 杨辉三角形,是二项式系数在三角形中的一种几何排列。中国南宋数学家杨辉在 1261 年所著的《详 解九章算法》一书有明确记载。欧洲数学家帕斯卡在 1654 年发现这一规律,所以又叫做帕斯卡…

Rabbit快速入门

入门案例 需求&#xff1a;使用简单模式完成消息传递 步骤&#xff1a; 创建工程&#xff08;生成者、消费者&#xff09; 分别添加依赖 编写生产者发送消息 编写消费者接收消息 3.1.2. 添加依赖 往heima-rabbitmq的pom.xml文件中添加如下依赖&#xff1a; <dependenc…

RabbitMQ的安装和配置

注意: 请使用资料里提供的CentOS-7-x86_64-DVD-1810.iso 安装虚拟机. 1. 安装依赖环境 在线安装依赖环境&#xff1a; yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c kernel-devel m4 ncurses-devel tk tc xz2. 安装Erlang 上…

【完整版】国内网络编译,Ambari 2.7.6 全部模块源码编译笔记

本次编译 ambari 2.7.6 没有使用科学上网的工具,使用的普通网络,可以编译成功,过程比 ambari 2.7.5 编译时要顺畅。 以下是笔记完整版。如果想单独查看本篇编译笔记,可参考:《Ambari 2.7.6 全部模块源码编译笔记》 该版本相对 2.7.5 版本以来,共有 26 个 contributors …

使用labelImg标注自己的VOC数据集

文章目录1.下载labelImg2.准备文件夹3.打开软件4.软件使用1.下载labelImg 步骤&#xff1a;WindowsR打开运行界面→输入cmd打开命令行窗口→输入pip install labelImg命令&#xff08;前提是python版本在3.0以上并安装anaconda&#xff0c;如果没有安装anaconda&#xff0c;输…