Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependencies 卡夫卡主题之间的依赖关系_Dependencies_Apache Kafka_Kafka Consumer Api_Apache Zookeeper - Fatal编程技术网

Dependencies 卡夫卡主题之间的依赖关系

Dependencies 卡夫卡主题之间的依赖关系,dependencies,apache-kafka,kafka-consumer-api,apache-zookeeper,Dependencies,Apache Kafka,Kafka Consumer Api,Apache Zookeeper,我创建了一个订阅两个主题的消费者,TopicA和TopicB。 当消费者收到来自TopicA的消息时,我的业务逻辑是将ObjectA存储到MySQL中。 当消费者收到来自TopicB的消息时,我的业务逻辑是更新ObjectA 但现在的问题是: TopicA和TopicB相互独立。 消费者可能先从TopicB接收消息,然后再从TopicA接收消息。 当尝试更新ObjectA时,我发现它在mysql中不存在,然后将抛出NullPointerException 是否有办法配置TopicA和TopicB

我创建了一个订阅两个主题的消费者,TopicA和TopicB。 当消费者收到来自TopicA的消息时,我的业务逻辑是将ObjectA存储到MySQL中。 当消费者收到来自TopicB的消息时,我的业务逻辑是更新ObjectA

但现在的问题是: TopicA和TopicB相互独立。 消费者可能先从TopicB接收消息,然后再从TopicA接收消息。 当尝试更新ObjectA时,我发现它在mysql中不存在,然后将抛出NullPointerException

是否有办法配置TopicA和TopicB,以确保先从TopicA接收消息,然后再从TopicB接收消息


换句话说,我如何在主题之间建立依赖关系?

所有卡夫卡都使用消息并基于偏移量生成消息。卡夫卡主题唯一能提供的是保证您能够按照消息写入卡夫卡的顺序使用它们。您可以控制从一个主题中消费的速度,但您可以访问的唯一信息是每个主题中的偏移量

也就是说,您需要TopicA和TopicB之间的依赖关系的用例似乎不能仅使用Kafka实现


如果保证在TopicB之前将消息写入TopicA。您可能会想出一个解决方案,将两条消息写入同一主题,第一次看到特定消息时,将其存储在MySQL中,第二次进行更新。

如何将数据发送到TopicA和TopicB?是否保证在TopicB之前将数据发送到TopicA,并且您只想以正确的顺序读取数据?或者可以在TopicA之前将数据发送到TopicB,而您只想在数据进入TopicB之前确保数据已进入TopicA?为什么需要两个不同的主题?只需使用一个主题来提升对象。如果主题的分区为1,则使用一个主题可以解决我的问题。但是对于更多的分区,它仍然无法正常工作。非常感谢。事实上,我已经按照您所说的做了一些事情来组合主题。但我不认为这是一个更好的解决方案。也许我应该改变我的设计。当我使用同一个名为“MyTopic”的主题时,另一个问题是每个主题有两个分区,这可能会导致消费者A收到带有“MyTopic”的消息以首先更新它,然后另一个消费者收到带有相同主题的消息以创建对象。似乎只有一个分区中的主题才能将接收顺序保持为发布顺序。例如,我先发布“test message1”,然后将“test message2”发布到主题“test”。如果主题有两个分区,则可能消费者A首先接收“test message2”,然后消费者B接收“test message1”。