05_Pulsar的主要组件介绍与命令使用、名称空间、Pulsar的topic相关操作、Pulsar Topic(主题)相关操作_高级操作、
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: cl2Reason: 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" ]
}
相关文章:

05_Pulsar的主要组件介绍与命令使用、名称空间、Pulsar的topic相关操作、Pulsar Topic(主题)相关操作_高级操作、
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-获取配…...
我的终端怎么莫名卡死了?shell下ctrl+s的含义
在终端下面一不小心按下了ctrl s,整个终端就锁住了,不知道原油的同学可能会以为终端卡死了,找不到原因只好关闭终端重新打开,然后下意识还不忘吐槽一句,垃圾ubuntu,动不动卡死。 事实上ctrl s在终端下是…...

【Vue】Vue的简单介绍与基本使用
一、什么是VueVue是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。1.构建用户界面传统方…...
网络知识篇
网络知识篇 局域网 当多台计算机或设备通过同一物理或逻辑连接(例如以太网或Wi-Fi网络)连接在一起,并且它们可以相互通信时,就构成了一个局域网(Local Area Network,LAN)。 子网划分 为了更…...

python 连接数据库
文章目录同步操作同步连Mysql同步连redis同步连mongodb异步操作异步连mysql异步连redis异步连mongodb同步操作 同步连Mysql python 连接mysql可以使用pymysql、mysqlclient等。 安装: # win pip install pymysql 连接mysql: # __author__ "laufing"…...

一文讲明白一致性hash算法
一致性Hash算法常用来解决数据分片时的数据扩容/缩容的性能问题。 一、业内数据分片用的Hash算法,将节点的hash值对节点数取余。 存取通过key / value的方式对节点取余。 二、数据分片使用hash算法的优缺点: 优点:简单,方便。 缺…...

Java分布式解决方案(一)
随着互联网的不断发展,互联网企业的业务在飞速变化,推动着系统架构也在不断地发生变化。 如今微服务技术越来越成熟,很多企业都采用微服务架构来支撑内部及对外的业务,尤其是在高 并发大流量的电商业务场景下,微服务…...
设备树系统学习(二)设备树的节点和属性
一、节点 1.节点命名格式 格式:<name>[@<unit-address>] name:是一个简单的 ASCII 字符串,长度最多为 31 个字符,节节点是根据它所代表的设备类型来命名的,比如 “gpu” 就表示这个节点是 gpu外设。 unit-address:一般表示设备的地址或寄存器首地址,可以为…...
【数据结构】二叉树的基本操作中的一些易错点
文章目录前言一、求二叉树节点个数二、求树的叶子结点个数三、求树的高度四、二叉树查找值为x的结点总结前言 笔者整理出了一些关于萌新在入门二叉树时容易犯的一些错误,你也来试试自己会不会掉到这些坑里把~ 一、求二叉树节点个数 错误示例: int Tre…...

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

不平衡数据集的建模的技巧和策略
不平衡数据集是指一个类中的示例数量与另一类中的示例数量显著不同的情况。 例如在一个二元分类问题中,一个类只占总样本的一小部分,这被称为不平衡数据集。类不平衡会在构建机器学习模型时导致很多问题。不平衡数据集的主要问题之一是模型可能会偏向多数…...
3. 算法效率
同一个问题的不同算法在性能上的比较,现在的方法主要是算法时间复杂度。算法效率是算法操作(operate)或处理(treat)数据的重复次数最小。 例题选自《编程珠玑》第8章,算法设计技术。 这个问题是一维模式识别(人工智能)中的一个问题。 输入有n个元素的向量,输出连续子向…...

仪表放大器放大倍数分析-运算放大器
仪表放大器是一种非常特殊的精密差分电压放大器,它的主要特点是采用差分输入、具有很高的输入阻抗和共模抑制比,能够有效放大在共模电压干扰下的信号。本文简单分析一下三运放仪表放大器的放大倍数。 一、放大倍数理论分析 三运放仪表放大器的电路结构…...

laravel8多模块、多应用和多应用路由
1、安装多应用模块 composer require nwidart/laravel-modules2、执行命令,config文件夹下生成一个modules.php配置文件 php artisan vendor:publish --provider"Nwidart\Modules\LaravelModulesServiceProvider"3、修改config文件夹下的modules.php&am…...
【Java学习笔记】6.Java 变量类型
Java 变量类型 在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下: type identifier [ value][, identifier [ value] ...] ;格式说明:type为Java数据类型。identifier是变量名。可以使用逗号隔开来声明多个同类型变量。 …...
Promise对象状态属性 工作流程 Promise对象的几个属性
Promise 对象状态属性介绍 实例对象中的一个属性 PromiseState pending 1、pending 变为 resolved / fullfilled 成功 2、pending 变为 rejected 失败 说明:只有这2种,且一个promise对象只能改变一次 无论变为成功还是失败,都会有一个结果…...
webgpu思考obj携带属性
今天在搞dbbh.js的时候,想到一个问题,啥问题呢,先看看情况 画2个材质不相同的box的时候 首先开始createCommandEncoder,然后beginRenderPass,分歧就在这里了 第一个box,他有自己的pipeline,第二个也有,那么…...

设计模式(只谈理解,没有代码)
1.什么是设计模式设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。2.为什么要学习设计模式看懂源代码:如果你不懂设计模式去看Jd…...

06、Eclipse 中使用 SVN
Eclipse 中使用 SVN1 在 Eclipse 中安装 SVN 客户端插件1.1 在线安装1.2 离线安装2 SVN 在 Eclipse 分享3 检出提交更新3.1 检出3.2 提交3.3 更新4 Eclipse 中 SVN 图标及其含义4.1 ?图标4.2 图标4.3 金色圆柱图标4.4 * 图标5 恢复历史版本5.1 恢复步骤5.2 权限控制…...

Zookeeper3.5.7版本——客户端命令行操作(命令行语法)
目录一、命令行语法二、help命令行语法示例一、命令行语法 命令行语法列表 命令基本语法功能描述help显示所有操作命令ls path使用 ls 命令来查看当前 znode 的子节点 [可监听]-w 监听子节点变化-s 附加次级信息create普通创建-s 含有序列-e 临时(重启或者超时消失…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...

react更新页面数据,操作页面,双向数据绑定
// 路由不是组件的直接跳转use client,useEffect,useRouter,需3个结合, use client表示客户端 use client; import { Button,Card, Space,Tag,Table,message,Input } from antd; import { useEffect,useState } from react; impor…...

LINUX编译vlc
下载 VideoLAN / VLC GitLab 选择最新的发布版本 准备 sudo apt install -y xcb bison sudo apt install -y autopoint sudo apt install -y autoconf automake libtool编译ffmpeg LINUX FFMPEG编译汇总(最简化)_底部的附件列表中】: ffmpeg - lzip…...

World-writable config file /etc/mysql/mysql.conf.d/my.cnf is ignored
https://stackoverflow.com/questions/53741107/mysql-in-docker-on-ubuntu-warning-world-writable-config-file-is-ignored 修改权限 -> 重启mysql # 检查字符集配置 SHOW VARIABLES WHERE Variable_name IN (character_set_server, character_set_database ); --------…...
【Go语言基础【6】】字符串格式化说明
文章目录 零、格式化常用场景一、Go 字符串格式化核心概念二、常用格式化占位符1. 整数类型2. 浮点数类型3. 字符串与布尔类型4. 指针与通用类型 三、宽度与精度控制1. 宽度控制2. 精度控制(浮点数/字符串) 零、格式化常用场景 数值转字符串:…...
C++信息学竞赛中常用函数的一般用法
在C 信息学竞赛中,有许多常用函数能大幅提升编程效率。下面为你介绍一些常见函数及其一般用法: 一、比较函数 1、max()//求出a,b的较大值 int a10,b5,c;cmax(a,b);//得出的结果就是c等于10. 2、min()//求出a,b的较小值 int a1…...