Spring 在一个微服务的多个实例中进行一致的数据处理

Spring 在一个微服务的多个实例中进行一致的数据处理,spring,mongodb,spring-boot,apache-kafka,Spring,Mongodb,Spring Boot,Apache Kafka,简化问题: 有许多卡夫卡主题,每个主题有许多分区。这些是发布数据,其中两部分在这里很重要,一个id和一个数字(n)。当实例分派消息时,它首先检查数据库中可能存在的记录。如果不是,它将创建一个新的数据库,否则会有一些操作取决于数字和实际的数据库状态(删除记录、添加记录以及这些操作之间的其他逻辑等),因此它不是幂等的。问题是,当同时有许多具有相同id的发布时,不同的服务可能会启动具有相同id的并行进程,这会导致问题。 所以它应该按顺序运行,因为进程必须是原子的 我知道有几种方法可以解决这个问题[事务

简化问题:

有许多卡夫卡主题,每个主题有许多分区。这些是发布数据,其中两部分在这里很重要,一个id和一个数字(n)。当实例分派消息时,它首先检查数据库中可能存在的记录。如果不是,它将创建一个新的数据库,否则会有一些操作取决于数字和实际的数据库状态(删除记录、添加记录以及这些操作之间的其他逻辑等),因此它不是幂等的。问题是,当同时有许多具有相同id的发布时,不同的服务可能会启动具有相同id的并行进程,这会导致问题。 所以它应该按顺序运行,因为进程必须是原子的

我知道有几种方法可以解决这个问题[事务(这里必须重试),一起发布到kafka主题(使用id作为密钥,这样就不再存在并发问题),分布式锁(导致缩放问题)等等]

我只是好奇,当操作依赖于发布和数据库状态时,处理这种情况的最佳解决方案是什么。也许这是建筑设计的失败,但环境是理所当然的