Start here. This is the direct spoken answer to practice first.
Overview
Explains early and late acknowledgement without promising exactly-once task execution.
A broker keeps a Celery message until the worker acknowledges it. By default, Celery normally acknowledges before execution so a task is less likely to run twice, but work can be lost if the worker dies after that acknowledgement. With acks_late, acknowledgement happens after the task returns, so an interrupted task can be delivered again. That improves recovery only when the task is safe to repeat.