You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NATS JetStream故障重启后如何从未完成任务的START_JOB开始消费

现有环境

拥有一个生产者,发布的流消息格式如下:

- START_JOB 1
- do_task 1_1
- do_task 1_2
[...]
- do_task 1_X
- END_JOB 1

- START_JOB 2
- do_task 2_1
- do_task 2_2
- END_JOB 2

- START_JOB 3
- do_task 3_1
- do_task 3_2
[...]
- do_task 3_X
- END_JOB 3

消息序列遵循以下规则:

  • START_JOB <job_nr>
  • 任意数量的do_task <job_nr>_<task_nr>
  • END_JOB <job_nr>
需求

消费者崩溃或重启后,必须从未确认对应END_JOB的最后一条START_JOB开始,按正确顺序接收后续消息。例如,若消费者在处理do_task 12_34时崩溃,重启后应从START_JOB 12开始,按时间顺序接收所有后续消息。

无效尝试

尝试以下多种配置组合后,重启后仍偶尔出现消息顺序错误:

  • 推送/拉取消费者模式
  • 使用AckPolicy All,仅在收到END_JOB时发送ack
  • 调整AckWait参数,在启动消费者前延迟AckWait+2秒
问题猜测

推测问题与确认设置有关,可能是当前“START_JOB”->“END_JOB”序列的消息尚未过期导致。调整设置后情况有所改善,但仍受生产者速度、任务间隔等因素影响,也可能存在其他未知问题。


内容的提问来源于stack exchange,提问作者rmweiss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 18:06:32