【发布时间】:2019-11-07 11:10:06
【问题描述】:
所以我有一个微服务架构的情况,我需要保证具有公共标识符的传入消息将按来自 kafka 的顺序进行处理:
message2, message1 kafka
------------------------------
|message1 |message2
| |
Instace1 Instance2
在下面的示例中,我有两个服务实例正在处理来自 kafka 的消息,但我想确保 message2 仅在 message1 之后处理。
显然,这种情况很容易解决,只需将一个实例配置为仅从特定分区消费,该分区将使用通用标识符存储消息:
message2, message1 kafka
--------------------------------
| message2
| message1
Instance1 Instance2
现在订单有保障,message2 永远不会在message1 之前处理。
但是,我想知道这个问题是否可以通过其他方式解决,直接在代码中而不是依赖于基础架构?这看起来可能是微服务架构中的标准问题,但我不确定解决它的首选方法是什么?
【问题讨论】:
-
可能是一个选项:在发送消息时使用“密钥”。这将确保具有相同密钥的消息最终会出现在同一个分区中。 :stackoverflow.com/questions/29511521/…
标签: java spring-boot apache-kafka microservices