flowchart TB
M1["Message consumed"]:::main
M2["Processing attempt"]:::retry
Ok{"Succeeded?"}:::decide
Commit["Offset committed, consumer continues"]:::ok
Inc["Attempt count + 1"]:::retry
Max{"Attempts = 3?"}:::decide
DLQ["Routed to Dead-Letter Queue (DLQ)"]:::dlq
DLQok["Offset committed, consumer continues"]:::ok
M1 --> M2 --> Ok
Ok -->|yes| Commit
Ok -->|no| Inc --> Max
Max -->|"no"| M2
Max -->|yes| DLQ --> DLQok
N1["Next message in partition"]:::main
N2["Processing attempt"]:::main
N3["Offset committed"]:::ok
N1 --> N2 --> N3
classDef main fill:#8b9bb0,stroke:#5f6e82,color:#fff,font-size:13px
classDef retry fill:#e9a23b,stroke:#b8791f,color:#222,font-size:13px
classDef decide fill:#f0d67a,stroke:#b8961f,color:#222,font-size:13px
classDef ok fill:#4c956c,stroke:#2f6b48,color:#fff,font-size:13px
classDef dlq fill:#c25b5b,stroke:#8a3b3b,color:#fff,font-size:13px
linkStyle default stroke:#999,stroke-width:2px