Consumer offsets are committed to the __consumer_offsets internal Kafka topic. enable.auto.commit=true commits offsets periodically (auto.commit.interval.ms=5000 default) — risk of duplicates (committed before processing) or loss (processed before committed). Manual commit gives full control: commitSync() blocks until confirmed, commitAsync() is non-blocking. The restart position depends on auto.offset.reset: earliest (re-read all), latest (skip to new messages).
Key configuration
enable.auto.commit=false — manual control (recommended)
auto.offset.reset=earliest — re-read all on first join
max.poll.interval.ms=300000 — max processing time before kicked out