我有两个Kafka生产者创建消息时,创建和删除客户。每一个都以不同的主题生成消息。有一些相应的kafka消费者负责创建和删除客户。问题是当消息delete customer c1消耗在create c1之前时。客户c1将被创建,并且永远不会被删除。如何保证delete消息c1只在create消息c1被使用之后才被使用?或其他方法,以确保创建和删除动作同步时,我们使用Kafka?
jgwigjjp1#
kafka中的数据排序只保证在主题分区内。如果您确保客户c1的所有数据(创建和删除)都进入一个分区(例如,通过选择一种客户标识符作为kafka消息的键),那么您将确保数据的创建将被存储并因此在删除之前被使用。然而,我在这里看到的问题是,你们有两个不同的生产者。因此,在创作之前,Kafka的主题总是有可能被删除(由于“创作”制作人的任何问题)。理想情况下,您只有一个生产者,负责创建和删除(如果可能的话)。我还建议将两个消费者合并到同一个消费者组。
1条答案
按热度按时间jgwigjjp1#
kafka中的数据排序只保证在主题分区内。如果您确保客户c1的所有数据(创建和删除)都进入一个分区(例如,通过选择一种客户标识符作为kafka消息的键),那么您将确保数据的创建将被存储并因此在删除之前被使用。
然而,我在这里看到的问题是,你们有两个不同的生产者。因此,在创作之前,Kafka的主题总是有可能被删除(由于“创作”制作人的任何问题)。
理想情况下,您只有一个生产者,负责创建和删除(如果可能的话)。我还建议将两个消费者合并到同一个消费者组。