Apache Pulsar,它是一个发布-订阅消息平台,由持久存储支持,具有以下出色功能:
- 地理复制
- 多租户
- 零数据丢失
- 零平衡时间
- 统一排队和流模型
- 高度可扩展
- 高通量
在本文中,我们将评估/测试多租户功能。
- Tubi电视上的新免费电影
- 我获得了50个NBA 2K联赛冠军。 已起草我。
- 天空,达兹(DAZN),特级:按意甲价格排名
- 法律电影下载网站-它们存在吗?
- 向SportsCastr社区大喊:LANE DASCHKO和MR RED ZONE REPLAY
什么是房客?
租户可以是组织中的客户/团队。 可以将承租人分类为将数据和处理与其他客户/团队(承租人)隔离开的生产者/消费者类别。 团队可以管理不同区域(例如Dev / QA / PROD)中的不同应用程序。
在零售商店中,库存,购买,开票,订单,补给等可以是租户。 在金融领域,银行/信用卡/贷款可以是承租人。 例如,在信用卡内,将有付款,信用历史记录等应用程序,这些应用程序又在内部针对子系统或区域进行内部分类,以进行部署,例如Dev,QA或Perf。 在此示例中,付款和信用记录形成命名空间,以为每个子系统/环境创建主题。
多租户的优势是什么?
主要优势是多租户,它使企业或零售商可以为整个组织拥有一个全局群集,并在不同部门之间实现数据隔离。 就成本而言,这意味着什么? 集群数量的绝对减少与花费的金钱/时间成正比。 下一个大问题是群集需要多大的容量/复制/弹性? 答案很简单-Pulsar是建立在Bookkeeper提供的持久存储支持的无状态架构基础之上的,该存储可以通过其内置的地理复制功能来水平和垂直扩展支持n网格复制。
我们如何实现该功能?
假设我们在组织“库存”和“开票”中有两个部门,我们可以按以下方式指定租户:
- 库存
- 开票

这两个租户必须通过其Pulsar与部门内部或部门之间的不同系统进行交互。 Pulsar支持TLS / Athenz进行身份验证和授权。 多租户功能是使用身份验证/授权实现的。 在本文中,我们将使用TLS。 第一步是创建信任证书。 按照https://pulsar.apache.org/docs/latest/admin/Authz/上的Pulsar文档中的说明进行操作。
像上面描述的那样为Broker(Pulsar)生成服务器证书和私钥,除非您需要使用SAN生成:
将以下文件另存为csr_server.txt
[要求]
default_bits = 2048
提示=否
default_md = sha256
req_extensions = req_ext
专有名称= dn
[dn]
C =美国
ST =状态
L =城市
O = COMPANYNAME
OU = DEPT
emailAddress=karthik@domain.com
CN = * .retailer.com
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1 = * .abc.cloud.retailer.com
DNS.2 = * .retailer.com
DNS.3 =本地主机
使用以下内容生成服务器证书:
openssl要求
-newkey rsa:2048 \
-sha256 \
-节点\
出局broker-cert.csr \
-keyout privkey.pem \
强大的PEM \
-config <(cat csr_server.txt)
遵循Pulsar文档中概述的其余步骤。
同样,您需要生成三个客户端证书:
- 一种用于Admin CLI工具,例如pulsar-admin
- 一个用于CN =库存的库存(对于SAN,使用上面的示例)
- 一种用于CN = billing的计费(对于SAN,请使用上面的示例)
现在您有了以下内容:
- 代理一台服务器证书
- CLI工具,清单和计费的一个客户端证书。
请按照Pulsar文档中的说明配置以下文件:
- broker.conf(服务器证书和信任库证书)
- client.conf (pulsar-admin使用此配置-使用相应的客户端证书)
- Discovery.conf(服务器证书和信任库证书)
一旦Zookeeper,Bookie和Broker(集群名称=零售商)都在启用身份验证和授权的情况下运行,请使用pulsar-admin创建租户:
./pulsar-admin租户创建库存租户\
-管理员角色库存—允许集群的零售商
计费–
./pulsar-admin租户创建计费租户\
-管理员角色计费—允许的集群零售商
让我们考虑他们部门之间的沟通。 下一步是为每个租户创建名称空间。
对于库存-ns1
./pulsar-admin命名空间创建清单租户/ ns1
./pulsar-admin命名空间set-clustersventure-tenant / ns1 —集群零售商
对于计费-ns1
./pulsar-admin命名空间创建billing-tenant / ns1
./pulsar-admin命名空间set-clusters billing-tenant / ns1 —集群零售商
下一步是授予访问命名空间的权限:可以使用通配符,但不支持通用通配符。 角色应与相应客户证书的CN相匹配。
./pulsar-admin名称空间授予权限库存租户/ ns1 \
-动作产生,消耗\
-角色“库存*”
./pulsar-admin命名空间Grant-permission计费承租人/ ns1 \
-动作产生,消耗\
-角色“计费*”
下一步是创建主题,我们将如下创建:
- 对于库存-topic1
- 计费-topic1
在Cloud或Kubernetes中
Pulsar具有称为代理的内置功能,在云或Kubernetes上部署Pulsar时需要对其进行配置。 代理本身可以提供我们在代理中上面讨论的身份验证和授权功能。 代理可以再次使用TLS或非TLS与代理进行通信。
要在Proxy中启用TLS,请将服务器证书配置为“ tlsCertificateFilePath”和“ tlsKeyFilePath”。 设置
tlsEnabledWithBroker = true
tlsEnabledInProxy = true
并设置客户端证书以使用以下命令与代理进行握手:
brokerClientAuthenticationPlugin = org.apache.pulsar.client.impl.auth.AuthenticationTls
brokerClientAuthenticationParameters = tlsCertFile:,tlsKeyFile:
brokerClientTrustCertsFilePath =
要启用授权令牌,请启用以下属性:
forwardAuthorizationCredentials = true
要在代理处终止SSL,请设置tlsEnabledWithBroker = false,并且不需要配置客户端证书。 您仍然可以将授权令牌传递给Broker以验证权限。
现在,我们已经准备好通过分别写生产者和消费者的库存和账单来测试多租户功能。 下面的生产者和消费者片段示例。
Producer.java
字符串localClusterUrl =“ pulsar + ssl:// localhost:6651”;
字符串名称空间=“ inventory-tenant / ns1”;
字符串主题= String.format(“ persistent://%s / topic1”,名称空间);
Map authParams = new HashMap ();
authParams.put(“ tlsCertFile”,“ client-inventory-cert.pem”);
authParams.put(“ tlsKeyFile”,“ client-inventory-key.pem”);
身份验证tlsAuth = AuthenticationFactory
.create(AuthenticationTls.class.getName(),authParams);
PulsarClient客户端= PulsarClient.builder()。serviceUrl(localClusterUrl)
.enableTls(true)
.tlsTrustCertsFilePath(“ / demoCA / cacert.pem”)
.authentication(tlsAuth)
。建立();
生产者生产者= client.newProducer()
.topic(主题)
.sendTimeout(10,TimeUnit.SECONDS)
。创建();
对于(int i = 0; i <10; i ++){
字符串msg = String.format(“库存消息-W-%d”,i);
producer.send(msg.getBytes());
System.out.println(“发送消息-->“ + msg);
}
producer.close();
client.close();
消费者.java
字符串localClusterUrl =“ pulsar + ssl:// localhost:6651”;
字符串名称空间=“ inventory-tenant / ns1”;
字符串主题= String.format(“ persistent://%s / topic1”,名称空间);
Map authParams = new HashMap ();
authParams.put(“ tlsCertFile”,“ client-inventory-cert.pem”);
authParams.put(“ tlsKeyFile”,“ client-inventory-key.pem”);
身份验证tlsAuth = AuthenticationFactory
.create(AuthenticationTls.class.getName(),authParams);
PulsarClient客户端= PulsarClient.builder()。serviceUrl(localClusterUrl)
.enableTls(true)
.tlsTrustCertsFilePath(“ / demoCA / cacert.pem”)
.authentication(tlsAuth).build();
消费者消费者= client.newConsumer()
.topic(主题)
.subscriptionName(“ my-sub”)
.subscriptionType(SubscriptionType.Exclusive)
。订阅();
而(true){
消息msg = Consumer.receive();
System.out.println(“收到的消息:“ + StringUtils.newStringUtf8(msg.getData())));
Consumer.acknowledge(msg);
}
如果在清单/计费之间切换客户端证书,则测试应用程序进行生产/消费将抛出AuthorizationException,以指示即使名称空间和主题匹配,生产者/消费者也无权在 / ns1 / topic1上生产/消费消息。 。
结论
Apache Pulsar是一个强大的发布-订阅模型,它基于分层体系结构构建,具有地理复制,多租户,零重新平衡时间,统一队列,流和持久性等功能。
测试一下并填写您的反馈。
快乐的脉冲!