博客
关于我
Pulsar 游标回滚,移动偏移量测试
阅读量:795 次
发布时间:2023-03-04

本文共 1923 字,大约阅读时间需要 6 分钟。

Pulsar消息系统中的消息回滚功能支持

在消息系统中,消息的可靠性和可用性至关重要。Pulsar作为一个先进的消息系统,提供了多种方式来处理消息回滚问题。以下是关于Pulsar消息系统中消息回滚功能的详细说明。

1. 功能支持

Pulsar作为消息系统,支持游标回滚功能。然而,由于软件不断迭代和更新,某些功能在实际使用中可能需要谨慎操作。以下是楼主在实际使用中遇到的问题及解决方法。

2. 需求

项目对消息的安全性和可验证性有较高要求,需要将消息回滚到之前几分钟、十几分钟,甚至最早未删除的位置。经过测试发现,Pulsar提供了四种方式来处理回滚事项。

第一种方式:设置 subscriptionInitialPosition

在创建消费者时,可以指定 subscriptionInitialPosition 参数。支持的参数包括 SubscriptionInitialPosition.Earliest 和 SubscriptionInitialPosition.Latest,分别表示从最早或最新消息开始消费。

第二种方式:consumer.seek(messageId)

Pulsar 支持通过 consumer.seek(messageId) 方法重置游标。需要注意的是,仅适用于非分区主题(non-partitioned topics),而分区主题(partitioned topics)不支持该功能。

第三种方式:admin.topics().peekMessages

此方法用于获取特定数量的消息,适用于需要快速检索特定消息的场景。通过 admin.topics().peekMessages(topicName, subscriptionName, numMessages) 可以获取指定数量的消息。

第四种方式:admin.topics().resetCursor

此方法用于重置消息的游标。需要注意的是,仅适用于非分区主题,分区主题不支持该功能。resetCursor 方法支持三种参数:eventTime、publishTime 和 messageId。eventTime 和 publishTime 具有较大的误差范围,建议使用 messageId 进行精确控制。

3. subscriptionInitialPosition 的使用

在创建消费者时,可以通过设置 subscriptionInitialPosition 参数来指定消费的起始位置。例如,设置为 SubscriptionInitialPosition.Earliest 将从最早消息开始消费,而 SubscriptionInitialPosition.Latest 则从最新消息开始。

4. 分区主题和非分区主题的区别

需要注意的是,Pulsar 中的主题可以是分区主题(partitioned topics)或非分区主题(non-partitioned topics)。分区主题在某些情况下不支持 seek 和 resetCursor 功能,因此在实际使用中需要根据需求选择合适的主题类型。

5. admin.topics().resetCursor 的限制

分区主题不支持 resetCursor 功能,使用该方法时会返回错误信息“Reset-cursor at position is not allowed for partitioned-topic”。因此,在使用 resetCursor 时,需确保主题类型为非分区主题。

6. peekMessages 的应用场景

peekMessages 方法适用于需要快速检索特定消息的场景。通过指定 numMessages 可以获取指定数量的消息,适用于需要回滚消息的场景。

7. 消费者和生产者的兼容性

在使用非分区主题时,消费者和生产者需要保持一致,否则可能导致消费量不对。因此,在实际使用中需要确保两者的兼容性。

8. 参数解释

resetCursor 方法支持以下参数:

  • eventTime:自定义时间戳,用于定时回滚消息。
  • publishTime:消息的发布时间。
  • messageId:消息的唯一标识符,可以通过 fromByteArray 和 toByteArray 方法进行序列化和反序列化。

9. 最佳实践

在实际使用中,可以根据需求选择合适的回滚方式。例如,如果需要精确控制消息回滚,建议使用 messageId 参数;如果需要快速检索特定消息,可以使用 peekMessages 方法。

通过以上方法,可以在 Pulsar 消息系统中实现消息的回滚功能,确保消息的可靠性和可用性。

转载地址:http://wzafk.baihongyu.com/

你可能感兴趣的文章
POJ 2362 Square DFS
查看>>
poj 2386 Lake Counting(BFS解法)
查看>>
poj 2387 最短路模板题
查看>>
POJ 2391 多源多汇拆点最大流 +flody+二分答案
查看>>
POJ 2403
查看>>
poj 2406 还是KMP的简单应用
查看>>
POJ 2431 Expedition 优先队列
查看>>
Qt笔记——获取位置信息的相关函数
查看>>
POJ 2484 A Funny Game(神题!)
查看>>
POJ 2486 树形dp
查看>>
POJ 2488:A Knight's Journey
查看>>
SpringBoot为什么易学难精?
查看>>
poj 2545 Hamming Problem
查看>>
poj 2723
查看>>
poj 2763 Housewife Wind
查看>>
Qt笔记——模型/视图MVD 文件目录浏览器软件
查看>>
POJ 2892 Tunnel Warfare(树状数组+二分)
查看>>
poj 2965 The Pilots Brothers' refrigerator-1
查看>>
poj 3026( Borg Maze BFS + Prim)
查看>>
POJ 3041 - 最大二分匹配
查看>>