我可以使用单个 pulsar 客户端向 Apache Pulsar 的多个名称空间和主题发布/使用这些名称空间和主题吗?

Anu*_*wal 5 apache-pulsar

我正在尝试使用 Apache Pulsar 编写一个多租户(多个命名空间)系统。我似乎无法实现的是使用单个客户端/连接发布到多个命名空间和这些命名空间中的主题。消费者方面也是如此。本质上,我希望使用单个应用程序实例能够发布到多个命名空间和主题,并且消费者应用程序能够在消费时执行此操作。我只是想了解这是否可能。

我不想为 M 个命名空间和每个命名空间的 N 个主题维护 M*N 个连接。我看到 pulsar 中有正则表达式支持,但是如果我想单独使用每个主题,这在消费者方面意味着什么(我是否从与正则表达式匹配的所有主题中获得混合消息?)

小智 7

您可以使用客户端中的多个生产者在单个客户端中发布到多个主题。然而,制作者和主题之间存在一对一的关系。从Pulsar 二进制协议的文档来看,Pulsar 首先在生产者和单个主题(在特定租户/命名空间中)之间建立关系:

message CommandProducer {
  "topic" : "persistent://my-property/my-cluster/my-namespace/my-topic",
  "producer_id" : 1,
  "request_id" : 1
}
Run Code Online (Sandbox Code Playgroud)

当它发送消息时,它会引用生产者 ID:

message CommandSend {
  "producer_id" : 1,
  "sequence_id" : 0,
  "num_messages" : 1
}
Run Code Online (Sandbox Code Playgroud)

由于生产者和主题之间存在这种关系,因此要发送到多个主题,您需要多个生产者。

下图说明了设置生产者并发送消息: 在此输入图像描述

下面是一些 Java 代码,演示了客户端中的多个生成器发送到多个主题的情况:

       // Create client object
        PulsarClient client = PulsarClient.builder()
                .serviceUrl("pulsar+ssl://useast2.aws.kafkaesque.io:6651")
                .authentication(
                    AuthenticationFactory.token("eyJhbGciOiJS...")
                )
                .build();

        // Create producer on a topic
        Producer<byte[]> producer1 = client.newProducer()
                .topic("persistent://tenant/local-useast2-aws/test-topic4")
                .create();

        // Create another producer on a different namespace/topic
        Producer<byte[]> producer2 = client.newProducer()
                .topic("persistent://tenant/namespace2/test-topic5")
                .create();

        // Send messages on the producers
        producer1.newMessage().value("ping from producer1".getBytes()).send();
        producer2.send("ping".getBytes());

        // Send close the producers
        producer1.close();
        producer2.close();
Run Code Online (Sandbox Code Playgroud)

在消费者方面,与生产者一样,您可以在客户端中使用多个消费者来从多个主题进行消费。或者,您可以使用正则表达式将单个使用者与多个主题相关联。但是,是的,您将从与该消费者的正则表达式匹配的所有主题中获取消息。顺便说一句,您可以在此处阅读 Jack Vanlightly 撰写的关于使用正则表达式订阅多个主题的精彩分析。