开发者社区 > 云原生 > 消息队列 > 正文

请教的事务不断回查的Apache RocketMQ问题,最近调试发现是broker回查”Find ?

问题1:请教的事务不断回查的Apache RocketMQ问题,最近调试发现是broker回查”Find prepared transaction message failed“。endTransaction返回这个,导致每条消息都出现回查,有些回查几次成功,有些回查15次就丢失了。

”Find prepared transaction message failed“看了下是getHalfMessageByOffset获取半同步消息时获取不到出现的,一般会是什么原因导致这种情况呢?Broker 配置文件,几乎事务消息刚发出去,endTransaction 马上发起 code=37 的 RemotingCommand 都出现这个问题,这么短时间应该不至于过期 问题2:看了下store.log,发现大量“selectMappedBuffer request pos invalid, request pos: 592429146, size: 4, fileFromOffset: 25769803776”WARN日志,也到导致上层报”Find prepared transaction message failed“的原因。

配置 transientStorePoolEnable 为 true,不知道是否有影响。是刚发送的事务消息

展开
收起
真的很搞笑 2023-07-03 15:57:25 128 0
6 条回答
写回答
取消 提交回答
  • 问题1: 导致"Find prepared transaction message failed"错误的可能原因有多种。一种可能是消息被删除或过期,导致无法找到对应的半消息。另一种可能是网络或存储故障,导致无法正确读取半消息。

    问题2: "selectMappedBuffer request pos invalid"警告日志可能是由于存储文件被破坏或损坏导致的。这可能会导致RocketMQ无法正确读取存储文件中的消息,从而导致"Find prepared transaction message failed"错误。

    关于transientStorePoolEnable配置的影响,它控制是否启用瞬态存储池。启用瞬态存储池可以提高消息的写入性能,但也会增加存储的复杂性。如果你怀疑这个配置可能导致了问题,可以尝试将其设置为false,然后观察问题是否仍然存在。

    另外,如果你的问题只在刚发送的事务消息上出现,可能还需要检查事务消息的发送代码是否正确。确保事务消息成功发送到Broker之后再调用endTransaction方法。

    最后,建议你检查RocketMQ的版本是否为最新版本,并查看官方文档和社区论坛中是否有类似的问题和解决方法。如果问题仍然存在,可以考虑提交一个Bug报告给RocketMQ的开发团队。

    2023-07-22 16:43:28
    赞同 展开评论 打赏
  • 存储文件损坏:报错中的"selectMappedBuffer request pos invalid"警告可能指示存储文件损坏或异常。这可能是由于硬件故障、操作系统问题或其他原因导致的文件系统错误。建议检查存储文件所在的磁盘和文件系统,确保其正常运行,并考虑修复或替换损坏的存储文件。

    消息存储异常:如果存储文件出现问题,可能导致消息存储异常,无法正常读取事务消息。这可能导致无法正确处理事务消息,从而引发回查操作。可以尝试对存储文件进行校验、恢复或重新加载等操作,以解决消息存储异常的问题。

    存储文件大小限制:RocketMQ的存储文件大小有一定的限制。如果存储文件的大小超出了限制,可能导致读取异常或无法获取特定消息。建议确认存储文件的大小是否超出了限制,并根据需要进行相应的调整和管理。

    2023-07-08 10:09:35
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    建议检查以下问题:

    是否存在未确认的消息就发起了endTransaction操作? 是否存在消息在发送时没有被正确地写入到数据存储中的情况? 是否存在消息在从数据存储中读取时,由于一些异常情况导致消息被丢失或者不完整的情况? 问题2:这个错误可能是由于以下原因导致的:

    如果transientStorePoolEnable参数设置为true,则会增加内存的使用量,可能会导致消息队列的消费速度变慢,从而导致回查。 如果消息在发送时没有被正确地写入到数据存储中,导致消息回查。 如果消息在从数据存储中读取时,由于一些异常情况导致消息被丢失或者不完整,导致消息回查。 建议检查以下问题:

    是否存在消息在发送时没有被正确地写入到数据存储中的情况? 是否存在消息在从数据存储中读取时,由于一些异常情况导致消息被丢失或者不完整的情况? 是否存在内存使用量过高的情况?

    2023-07-06 14:51:51
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    "Find prepared transaction message failed" 错误通常是由于 RocketMQ 无法找到某个事务的准备状态消息,导致无法提交或回滚该事务。对于这种情况,建议您检查以下几个方面: Broker 配置文件中的参数,比如 transactionTimeout、checkTransactionMessageAtleastInterval、checkTransactionMessageTimerInterval 等,确保其设置合理。

    RocketMQ 的版本是否过旧,如果是,可以尝试升级到最新版本,以获得更好的稳定性和性能。

    确认事务消息是否正确发送,以及在发送事务消息时是否正确设置了 prepare 消息的状态。

    检查磁盘空间是否足够,以及是否存在磁盘故障等问题。

    可以通过查看 RocketMQ 的日志文件,定位到具体的错误信息,以便更好地进行排查和处理。

    "selectMappedBuffer request pos invalid" 错误通常是由于 RocketMQ 的消息存储文件(commitlog)出现异常导致的。对于这种情况,建议您检查以下几个方面: 确认磁盘空间是否足够,以及是否存在磁盘故障等问题。

    尝试重新启动 RocketMQ Broker,以清理可能存在的存储文件异常。

    确认 Broker 的配置参数是否正确设置,比如 transientStorePoolEnable,确保其设置合理。

    可以通过查看 RocketMQ 的日志文件,定位到具体的错误信息,以便更好地进行排查和处理。

    2023-07-04 07:54:37
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    问题1:看错误提示应该是在回查事务消息时未能找到预处理的事务消息。原因是:事务消息在提交之前已经过了超时时间,Broker 将无法找到相应的事务消息。

    问题2: 选择的映射缓冲区请求位置无效。主要原因就是存储文件丢失、删除或损坏。

    2023-07-03 16:37:17
    赞同 展开评论 打赏
  • 回答1:难道half消息过期了嘛? 回答2:请求到了过期的消息了, 是pull的消息还是push呀,此回答整理自钉群“群1-Apache RocketMQ 中国开发者钉钉群”

    2023-07-03 16:14:56
    赞同 展开评论 打赏
滑动查看更多

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    Apache Flink技术进阶 立即下载
    Apache Spark: Cloud and On-Prem 立即下载
    Hybrid Cloud and Apache Spark 立即下载

    相关镜像