Do you have auto-commit on for your consumers? If yes, which tends to be the case for most basic examples, then you'll have "at most once" semantics, and you may experience unwanted data loss* should your consumers fail.
If not, then you'll have to manually commit the offsets and your consumer will have "at least once" semantics, meaning that you'll have to deal with duplicate messages (you should be designing idempotent pipelines, anyway)
Whether you have at-least or at-most semantics is more related to when you commit relative to your other logic than whether you do it automatically or manually, but for common cases where you “do something” like an HTTP call or increment a number in Redis per message, autocommit will give you at-least (it will commit after the next poll call which happens after processing the items).
If not, then you'll have to manually commit the offsets and your consumer will have "at least once" semantics, meaning that you'll have to deal with duplicate messages (you should be designing idempotent pipelines, anyway)