如何在发布kafka消息时实现原子性

How to attain atomicity while publishing kafka messages

我有一个场景,我将遍历将从数据库中获取的一组记录,获取后我将遍历这些记录并将每条记录推送到 kafka 主题。现在让我们假设我已经检索到 10 条记录,并且在迭代中我已经推送了前 5 条记录并且在第 6 条记录上有一些异常我想恢复推送到主题中的消息。这类似于数据库事务性。我们可以在 kafka 中实现原子性吗?

谢谢。

revert back the messages that are pushed into the topic

一旦数据在主题中,就无法修改;您需要删除整个主题并从头开始

是的,您可以使用交易;记录将保留在日志中,kafka 在日志中放置一个标记以指示事务是提交还是回滚。

消费者必须使用 isolation.level=read_committed 以避免回滚记录。

https://docs.spring.io/spring-kafka/docs/2.8.4-SNAPSHOT/reference/html/#transactions

https://kafka.apache.org/documentation/#consumerconfigs_isolation.level