Обработка репозитория и транзакций Kafka
У меня есть сценарий использования, когда мне нужно использовать тему kafka, выполнить какую-то работу, создать другую тему kafka, используя семантику только один раз, и сохранить ее в базе данных mongo. После просмотра документов я считаю, что транзакция kafka и транзакция mongo могут быть синхронизированы, но они по-прежнему две разные транзакции. В приведенном ниже сценарии, если фиксация монго не удалась, есть способ откатить запись kafka, которая была зафиксирована в теме и воспроизведена от потребителя.
producer.send()
producer.sendOffsetsToTransaction()
mongoDao.commit()
1 ответ
Если слушатель выдает исключение, транзакция kafka будет откатана и доставлена.
Если фиксация монго завершится успешно, а фиксация кафки не удастся, вам нужно будет обработать дубликат доставки.
Если вы подключите KafkaTransactionManager
(или KafkaChainedTransactionManager
содержащий один) в контейнере слушателя, вам не нужно отправлять смещения транзакции, контейнер сделает это за вас перед фиксацией.