pulsar基础(四)—namespace 和topic介绍

本文介绍了Pulsar消息系统的两大核心概念:Namespace和Topic。Namespace作为Pulsar的基本管理单元,支持权限配置、消息策略控制等功能。Topic用于实现更细粒度的消息分类与存储,支持持久化与非持久化两种类型。

namespace 和topic介绍

什么是命名空间(名称空间)

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

namespace分类

namespace有本地namespace和全局namespace两种

  • 本地namespace仅对定义它的集群可见

  • 全局namespace跨集群可见,可以使同一个数据中心的集群,也可以是跨地域中心的集群,这取决于namespace中是否设置了跨集群拷贝数据功能

  • 本地和全局namespace都可以通过一定设置进行跨团队和跨组织共享。一旦生产者获得了namespace的写入权限,那么它就可以向namespace中的所有topic主题写入数据。若主题不存在,则在第一次写入时动态创建。

什么是topic

  • Topic即主题,在一个namespace下, 可以定义多个Topic

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

  • Pulsar 提供持久化与非持久化两种topic。 持久化topic是消息

<think>嗯,用户想知道如何在Java中创建Pulsar生产者并指定Topic。好的,首先我需要回忆一下Pulsar的基本用法。根据引用里的例子,用户可能已经看过一些代码片段,但需要更明确的步骤。 首先,用户需要引入Pulsar的客户端依赖,这在引用3中的pom.xml有提到,所以应该先确认Maven依赖是否正确。然后,创建PulsarClient实例,这部分代码在引用1里有示例,比如使用builder模式设置serviceUrl。 接下来是创建生产者的部分。用户的问题核心是如何指定Topic,所以需要强调在newProducer()之后调用.topic()方法,并传入正确的Topic名称。引用1中的示例用了"persistent://my-tenant/my-namespace/my-topic",但用户可能需要根据实际情况替换成自己的tenantnamespace。 另外,可能需要提到Topic的命名规则,persistent非persistent的区别,不过用户的问题可能更关注代码结构。需要确保代码示例正确,比如Producer的泛型类型,是否需要使用byte[]还是其他类型,引用1里用了byte[],但实际中可能发送字符串或其他格式的数据,可能需要说明如何转换,比如.getBytes()或者使用Schema。 还需要注意关闭资源,比如producer、client,避免资源泄漏。引用1中的示例在最后有close()的调用,应该在代码示例中包含这部分。 此外,可能需要提到异常处理,比如PulsarClientException,但用户可能只需要基础示例,所以可以暂时省略,或者简单提醒。 然后,用户可能需要知道如何在Spring Boot中集成,引用4提到了SpringBoot集成,可以补充一个例子,使用@Resource注入生产者,如引用2中的pulsarProducer.send(),但需要展示如何配置生产者。 最后,确保回答结构清晰,分步骤说明,并生成相关问题,比如性能优化、配置参数等,帮助用户进一步了解。</think>在Java中创建Apache Pulsar生产者并指定Topic的完整实现步骤如下: ### 1. 添加依赖 在pom.xml中引入Pulsar客户端依赖: ```xml <dependency> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client</artifactId> <version>2.11.0</version> <!-- 可根据需求调整版本 --> </dependency> ``` ### 2. 创建生产者基础代码 ```java import org.apache.pulsar.client.api.*; public class PulsarProducerExample { public static void main(String[] args) throws PulsarClientException { // 1. 创建客户端 PulsarClient client = PulsarClient.builder() .serviceUrl("pulsar://localhost:6650") // 服务地址 .build(); // 2. 创建生产者(核心步骤) Producer<byte[]> producer = client.newProducer() .topic("persistent://public/default/my-topic") // 指定Topic .producerName("my-producer") // 生产者标识 .compressionType(CompressionType.LZ4) // 压缩方式 .create(); // 3. 发送消息 producer.send("Hello Pulsar!".getBytes()); // 4. 关闭资源 producer.close(); client.close(); } } ``` ### 3. Topic命名规范说明 Pulsar Topic采用分层命名结构:$$persistent|non-persistent://tenant/namespace/topic-name$$ - **持久化模式**:`persistent`(默认持久化存储)或`non-persistent`(仅内存) - **租户命名空间**:实现资源隔离,例如`public/default`是默认命名空间 - **主题名称**:自定义业务标识符 ### 4. Spring Boot集成示例(引用自[^4]) ```java @Configuration public class PulsarConfig { @Bean public Producer<byte[]> pulsarProducer(PulsarClient client) throws PulsarClientException { return client.newProducer() .topic("persistent://my-tenant/order-system/order-events") .blockIfQueueFull(true) // 队列满时阻塞生产者 .sendTimeout(10, TimeUnit.SECONDS) .create(); } } @Service public class OrderService { @Autowired private Producer<byte[]> producer; public void sendOrderEvent(String event) throws Exception { producer.sendAsync(event.getBytes()) .thenAccept(messageId -> { System.out.println("消息发送成功:" + messageId); }); } } ``` ### 参数说明表 | 参数 | 说明 | 建议值 | |---------------------|-----------------------------|------------------------| | serviceUrl | Pulsar集群地址 | pulsar://host:6650 | | producerName | 生产者标识 | 按业务命名 | | sendTimeout | 发送超时时间 | 10-30秒 | | compressionType | 压缩算法 | LZ4/ZSTD/NONE | | batchingMaxMessages | 批量发送消息数量 | 100-1000 | 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稷下学员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值