Обработка репозитория и транзакций Kafka

У меня есть сценарий использования, когда мне нужно использовать тему kafka, выполнить какую-то работу, создать другую тему kafka, используя семантику только один раз, и сохранить ее в базе данных mongo. После просмотра документов я считаю, что транзакция kafka и транзакция mongo могут быть синхронизированы, но они по-прежнему две разные транзакции. В приведенном ниже сценарии, если фиксация монго не удалась, есть способ откатить запись kafka, которая была зафиксирована в теме и воспроизведена от потребителя.

producer.send()
producer.sendOffsetsToTransaction()
mongoDao.commit()

1 ответ

Решение

Если слушатель выдает исключение, транзакция kafka будет откатана и доставлена.

Если фиксация монго завершится успешно, а фиксация кафки не удастся, вам нужно будет обработать дубликат доставки.

Если вы подключите KafkaTransactionManager (или KafkaChainedTransactionManager содержащий один) в контейнере слушателя, вам не нужно отправлять смещения транзакции, контейнер сделает это за вас перед фиксацией.

Другие вопросы по тегам