Pulsar - 新一代消息中间件引擎

Pulsar消息中间件详解

原文链接:https://www.hezebin.com/article/66ac53f04379b36dec11a19b

概述

Pulsar是一个多租户、高性能的服务器到服务器消息传递解决方案。

Pulsar的主要特点如下:

  • 原生支持Pulsar实例中的多个集群,跨集群无缝复制消息。
  • 非常低的发布和端到端延迟。
  • 无缝扩展到超过一百万个主题。
  • 简单的 客户端API 支持 Java, Go, PythonC++.
  • 订阅类型exclusive, shared, and failover)的 topic。
  • 保证消息传递, 持久信息存储 提供 Apache BookKeeper. 一个无服务器的轻量级计算框架 Pulsar Functions 提供流原生数据处理能力。
  • 基于Pulsar Functions构建的无服务器连接器框架Pulsar IO可以更轻松地将数据移入和移出Apache Pulsar。
  • 分层存储在数据老化时将数据从热/温存储卸载到冷/长期存储(如S3和GCS)。

概念

Message 消息

Pulsar是建立在订阅模式(通常缩写为pub-sub)上的。在此模式中,生产者将消息发布到主题;消费者订阅这些主题,处理传入的消息,并在处理完成时将消息创建订阅后,Pulsar会保留所有消息,即使消费者断开连接也是如此。只有当使用者确认所有这些消息都已成功处理时,才会丢弃保留的消息。

publish-subscribe pattern in Pulsar

如果消息的消费失败,并且您希望再次消费该消息,则可以启用消息重新交付机制来请求代理重新发送该消息。

消息是Pulsar的基本“单位”。它们是生产者发布到主题的内容,然后消费者从主题中消费。下表列出了消息的组成部分。

组件 描述
Value / data payload 报文中携带的数据。所有脉冲星消息都包含原始字节,尽管消息数据也可以符合数据模式
Key 消息的键(字符串类型)。它是消息键或分区键的简称。消息可以选择使用键标记,这对于主题压缩等特性很有用。
Properties 用户定义属性的可选键/值映射。
Producer name 生成消息的生产者的名称。如果不指定生产者名称,则使用默认名称。
Topic name 消息要发布到的主题的名称。
Schema version 用于生成消息的架构的版本号。
Sequence ID 每个脉冲星消息都属于其主题的有序序列。消息的序列ID最初由其生产者分配,指示其在该序列中的顺序,也可以自定义。 序列ID可用于消息重复数据消除。如果brokerDeduplicationEnabled设置为true,则每个消息的序列ID在主题(未分区)或分区的生产者中是唯一的。
Message ID 消息的消息ID由博彩公司在消息被持久存储后立即分配。消息ID表示消息在分类账中的特定位置,并且在Pulsar集群中是唯一的。
Publish time 发布消息时的时间戳。时间戳由生产者自动应用。
Event time 由应用程序附加到消息的可选时间戳。例如,应用程序在处理消息时附加一个时间戳。如果事件时间未设置任何内容,则值为0

消息的默认最大大小为5 MB。您可以使用以下配置选项配置消息的最大大小。

  • broker.conf文件中。

    # The max size of a message (in bytes).
    maxMessageSize=5242880
    
  • broker.conf文件中。

    # The max size of the netty frame (in bytes). Any messages received larger than this value are rejected. The default value is 5 MB.
    nettyMaxFrameSizeBytes=5253120
    

Pulsar中的nettyMaxFrameSizeBytesmaxMessageSize是两个与消息大小相关的配置,但它们作用的层面和目的不同。

nettyMaxFrameSizeBytes是指Netty服务器在处理客户端请求时可以接受的最大帧大小。Pulsar使用Netty作为其网络通信框架,该配置用于限制可以通过网络传输的数据帧的大小。如果客户端尝试发送超过此大小的数据帧,将会被Netty服务器拒绝,并可能返回一个错误给客户端。这个设置是为了防止客户端发送过大的数据帧,以免造成服务器的内存溢出。

maxMessageSize则是指Pulsar内部可以处理的最大消息大小。这个配置限制的是客户端可以发布到Pulsar主题的单个消息的最大大小。如果消息超过了这个大小,将会被Pulsar服务器拒绝,并且客户端会收到一个错误消息。这个限制是为了确保Pulsar集群的稳定性和可维护性。

总的来说,nettyMaxFrameSizeBytes更多地是关注网络层面上的安全和效率,而maxMessageSize则关注的是消息队列层面的数据处理能力。在配置这些参数时,需要考虑到实际的应用场景,保证Pulsar系统能有效稳定地处理大量不同大小的消息。

Ack

在消费者成功消费消息之后,消费者向代理发送消息确认。然后,这条已使用的消息将被永久存储,只有在所有订阅都确认它之后才能删除。确认(ack)是Pulsar知道消息可以从系统中删除的方式。如果要存储已被消费者确认的消息,则需要配置消息保留策略

可以通过以下两种方式之一来确认消息:

  • 被个别承认

    使用单独的确认,消费者确认每个消息并向代理发送确认请求。

  • 累计确认

    累积确认方式。使用这种方式,当你确认消息4时,你实际上是告诉Pulsar所有小于或等于4的消息都已被处理,即1, 2, 3, 4都视为被消费。它假设消费者以顺序方式处理消息,并且一次对多条消息进行确认,这可以减少确认消息所需的网络通信次数,从而提高处理效率。

如果您想单独确认消息,可以使用以下API。

consumer.acknowledge(msg);

如果您想累积确认消息,可以使用以下API。

consumer.acknowledgeCumulative(msg);

共享订阅类型中不能使用累积确认,因为共享订阅类型涉及多个可以访问同一订阅的使用者。在共享订阅类型中,消息单独确认。

Nack

与之相反的 Nack 否定确认机制允许您向代理发送通知,指示使用者未处理消息。当使用者无法使用消息并需要重新使用该消息时,使用者会向代理发送否定确认 (nack),从而触发代理将此消息重新传递给使用者。

根据消费订阅类型,单独或累积地对消息进行否定确认:

  • 在独占和故障转移订阅类型中,使用者仅以否定方式确认他们收到的最后一条消息。
  • 在“共享”和“Key_Shared”订阅类型中,使用者可以单独否定地确认消息。

Ack timeout

默认情况下,Ack timeout 处于禁用状态,这意味着除非使用者崩溃,否则不会重新发送传递给使用者的消息。

确认超时机制允许您设置客户端跟踪未确认消息的时间范围。在此确认超时 ( ackTimeout ) 期限之后,客户端向代理发送 redeliver unacknowledged messages 请求,因此代理将未确认的消息重新发送给使用者。

  • 如果启用了批处理,则一个批处理中的所有消息都将重新传递给使用者。
  • 与Ack timeout相比,Nack是首选。首先,设置超时值很困难。其次,当消息处理时间超过确认超时时,代理会重新发送消息,但这些消息可能不需要重新使用。

Retry Topic

该功能允许您存储使用失败的消息,并在以后重试使用它们。使用此方法,您可以自定义重新传递消息的时间间隔。原始主题的使用者也会自动订阅重试信主题

<think>好的,我现在需要处理用户关于Pulsar-Manager是否具备发送消息功能的询问。首先,我得回顾一下用户的问题,确保自己正确理解他们的需求。用户之前可能已经接触过Pulsar的基础知识,现在转向管理工具的具体功能。接下来,我需要查阅相关文档和引用内容。用户提供的引用中,引用[1]提到了PulsarManager的可视化管理功能,但并没有明确说明消息发送功能。引用[2]和[3]更多涉及监控和配置,可能不直接相关。因此,可能需要依靠我对Pulsar Manager的了解或进一步查找官方资料。根据ApachePulsar的官方文档,PulsarManager主要用于集群管理、主题查看、监控等,而消息的生产和消费通常通过命令行工具(如pulsar-client)、SDK或REST API来实现。PulsarManager的界面主要提供管理功能,比如创建租户、命名空间、主题,调整配置,查看统计信息等,而不是直接发送消息。用户的问题可能源于希望通过图形界面发送测试消息,或者误以为管理工具包含此功能。需要明确告知PulsarManager的主要用途,并建议替代方法,比如使用pulsar-perf工具或编写简单的生产者代码。同时,可以提及WebSocket或RESTAPI作为其他选项,确保用户有多种途径实现消息发送。在回答时,要结构清晰,分点说明不支持的原因,然后提供替代方案,并给出具体示例,如命令行操作或代码片段,帮助用户实际操作。同时,生成的相关问题要引导用户进一步了解Pulsar的其他工具或管理器的其他功能,增强他们的知识深度。 最后,检查回答是否符合系统级指令,如正确使用LaTeX格式(虽然这个问题可能不需要数学公式),中文回答,引用标注正确,以及生成相关问题。确保没有技术错误,引用来源准确,并且语言简洁易懂,用户能够顺利按照指南操作。</think>### Pulsar-Manager 发送消息功能说明 根据官方文档和功能设计,**Pulsar-Manager 本身不提供直接发送消息的功能**,其核心定位是集群管理、监控和可视化操作[^1]。以下是详细说明及替代方案: --- #### 一、不支持发送消息的原因 1. **功能边界限制** Pulsar-Manager 主要用于管理租户(Tenant)、命名空间(Namespace)、主题(Topic)的配置,查看实时监控指标(如消息堆积量、吞吐量),以及权限控制[^1][^2]。 2. **消息生产需专用工具** 消息发送通常通过以下方式实现: - 命令行工具 `pulsar-client` - SDK(Java/Python/Go 等) - REST Producer API --- #### 二、替代方案:发送消息的常用方法 ##### 1. 使用 `pulsar-client` 命令行工具 ```bash # 启动生产者并发送消息 bin/pulsar-client produce <topic-name> \ --messages "Hello Pulsar" \ --num-produce 1 ``` ##### 2. Python SDK 示例 ```python from pulsar import Client client = Client('pulsar://localhost:6650') producer = client.create_producer('persistent://public/default/my-topic') producer.send(b'Hello Pulsar via SDK') client.close() ``` ##### 3. 通过 REST API 发送 ```bash curl -X POST http://<broker-host>:8080/admin/v2/persistent/<tenant>/<namespace>/<topic>/messages \ -H "Content-Type: application/json" \ -d '{"payload": "SGVsbG8gUHVsc2Fy", "properties": {"key1":"value1"}}' ``` --- #### 三、Pulsar-Manager 相关功能 虽然不能直接发送消息,但可通过以下操作辅助消息管理: 1. **查看主题消息堆积量** 在主题详情页监控 `pulsar_broker_in_bytes_total` 指标[^2] $$ \text{堆积量} = \text{生产速率} - \text{消费速率} $$ 2. **配置 Topic 策略** 设置保留策略、压缩策略等,确保消息按预期存储[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值