我们正在建立一个高度可用的环境,用于接收带有在线集成端点的金融交易记录到我们的系统。我们当前的架构是让Kafka生成器作为这些消息的接收端,并将它们推送到Kafka分区。 Kafka分区是每个客户的关键。
消息排序仅对每个客户很重要。不同的客户消息可能会出现故障,并且不会造成任何损害。但是,如果A和B是从同一客户发送的两条消息,并且如果A发生在B之前,那么我必须确定A在Kafka消费者之前处理过B.
在我们目前的方法中,我们计划让多个生产者接收这些消息。让我们说P1和P2。即使P1在P2接收B之前收到消息A,P2也可能在P1之前将B写入Kafka。
我能想到的唯一解决方案,每个客户有一个生产者似乎解决了这个问题。但这是对负载平衡和高可用性的打击。此外,还出现了将消息路由到每个客户的生产者的问题。
我的问题是,有什么策略可以确保如果客户在B之前发送A,A会在B之前写入Kafka分区?