Если вы используете Kafka Stream, он поддерживает шаблон потока «ровно один раз», вы можете сослаться на
Шаблон потока «ровно один раз» - это просто возможность выполнить операцию чтения-записи-записи ровно один раз. Означает, что вы потребляете одно сообщение за раз, получаете процесс и публикуетесь в другой теме и фиксируете. Таким образом, commit будет обрабатываться Stream автоматически по одному сообщению за раз.
Если вы не используете конкретный вариант использования, для которого лучше использовать Kafka с предоставленным коммитом, в противном случае вам нужно вручную обработать множество сценариев сбоя, например, что произошло, если возникла проблема с подключением к БД .. и при обработкемиллион или записывает требуемый очень частый доступ к БД. Кафка уже хранит фиксированное смещение, что лучше с точки зрения производительности, не требует никакого внешнего подключения к БД.
_consumer_offsets хранит информацию о фиксированных смещениях для каждой темы, разделана группу потребителей. Который использует коммит для обновления деталей смещения по этой теме
Если у вас есть конкретный случай использования, где требуется атомарная транзакция, или вы хотите сохранить детали смещения рядом с вашим результатом, вы можете управлять внешним хранилищем смещений, как упоминалось здесь
enable.auto.commit: В случае использования внешнего управления смещением вы не используете сценарий фиксации, поэтому не имеет значения, если enable.auto.commitвключить или отключить. Вы будете продолжать получать сообщения, используя метод поиска (раздел TopicPartition, длинное смещение) и сохраняя смещение извне. В случае перезапуска начните извлекать последнее сохраненное смещение. Единственное влияние, если какая-то встроенная панель мониторинга, такая как Confluent Control-Center, Grafana и т. Д., Используемая для поддержки темы Kafka, не будет отражаться в случае, если не выполнить фиксацию вручную и enable.auto.commit false.
auto.offset.reset Да, это влияет только при первом запуске, но так как вы используете для извлечения сообщения из определенного раздела и смещения не влияет.
======================= Обновлено =======================
enable.auto.commit - если true (по умолчанию), периодически фиксировать смещение последнего сообщения, переданного приложению. Фиксированное смещение будет использовано при перезапуске процесса для определения того, где оно остановилось.
auto.commit.interval.ms - частота в миллисекундах, в течение которой смещения потребителя фиксируются (записываются) в смещение хранилища.
Примечание: , если enable.auto.commit false не будет использовать auto.commit.interval.ms
В случае enable.auto.commit true метод фиксациибудет получать вызов при каждом опросе, и, если auto.commit.interval.ms получит смещение, будет зафиксировано
- интервал опроса> интервал фиксации: смещение фиксации во время интервала опроса
- интервал опроса<интервал фиксации: метод фиксации будет вызывать каждый опрос, но смещение будет зафиксировано при последовательном опросе () после истечения интервала фиксации. </li>