Я просматривал эту статью, которая объясняет, как гарантировать, что сообщение обрабатывается ровно один раз, выполнив следующие действия:
- Чтение (тема, раздел, смещение) из базы данных при запуске / перезапуске
- Прочитать сообщение из определенного (тема, раздел, смещение)
- Atomically do following things (say for example in same database transaction):
- Processing message
- Зафиксировать смещение в базе данных как (тема, раздел, смещение)
- Вручную зафиксируйте смещение в Kafka, вызвав
consumer.commitAsync()
илиconsumer.commitSync()
Я сомневаюсь, каков эффект установки разных значений для разных потребительских свойств:
enable.auto.commit
Как мне установить это свойство?true
илиfalse
? В статье говорится, что мы должны установить его наfalse
. Но что может случиться, если я установлюtrue
? При этом я сохраняю смещение во внешнюю базу данных. Таким образом, после сбоя, когда потребитель подключается к сети, он начинает использовать смещение, сохраненное в базе данных. Итак, я чувствую, что значение этого свойства не влияет на запуск / перезапуск.
Также я не думаю, что будет какое-либо влияние различных значений этого свойства в рамках одного запуска потребителя, поскольку смещение используется для чтения следующего сообщения и того, будет ли мы фиксируем его вручную или автоматически не имеет никакого эффекта (смещение все равно будет таким же).auto.offset.reset
Есть два основных значения этого свойстваlatest
иearliest
. Если установлено значениеlatest
, он заставит потребителя читать сообщения, помещенные впоследствии, то есть после запуска потребителя. Если установлено значениеearliest
, потребитель будет читать из первого непрочитанного сообщения. Поскольку оба эти фактора влияют на то, откуда потребитель должен начать чтение сообщения при запуске, я считаю, что это свойство также не повлияет на атомарного потребителя, указанного в статье. Это связано с тем, что в этой реализации вновь запущенный потребитель начинает читать сообщения со смещения, указанного в базе данных.
Верно ли я с обеими вышеупомянутыми мыслями?