Apache kafka 在Kafka中处理具有依赖关系的数据时的最佳实践?
我们正在开发一个从不同来源获取数据的应用程序,一旦数据可用,我们就会对其进行处理,将其放在一起,然后将其转移到不同的主题 在我们的案例中,我们有3个主题,每个主题都将带来与不同主题的数据相关的数据,在这种情况下,生成的每个实体可能会在同一时间(或短时间)收到,也可能不会收到,这就是问题所在,因为在我们继续讨论这个主题之前,需要将这三个实体合并为一个实体 我们的想法是创建一个单独的主题,该主题将包含所有尚未处理的数据,然后有一个单独的线程,该线程将以固定的时间间隔检查该主题,并检查该主题的依赖项是否可用,如果可用,则从该单独主题中删除该实体,如果不可用,我们将这个实体保留在那里,直到它得到解决Apache kafka 在Kafka中处理具有依赖关系的数据时的最佳实践?,apache-kafka,kafka-consumer-api,apache-kafka-streams,Apache Kafka,Kafka Consumer Api,Apache Kafka Streams,我们正在开发一个从不同来源获取数据的应用程序,一旦数据可用,我们就会对其进行处理,将其放在一起,然后将其转移到不同的主题 在我们的案例中,我们有3个主题,每个主题都将带来与不同主题的数据相关的数据,在这种情况下,生成的每个实体可能会在同一时间(或短时间)收到,也可能不会收到,这就是问题所在,因为在我们继续讨论这个主题之前,需要将这三个实体合并为一个实体 我们的想法是创建一个单独的主题,该主题将包含所有尚未处理的数据,然后有一个单独的线程,该线程将以固定的时间间隔检查该主题,并检查该主题的依赖项是
在所有这些解释的最后,我的问题是,这样做是否合理,或者卡夫卡提供了其他良好的实践或策略来解决此类情况?卡夫卡邮件可以在一段时间后根据保留策略清除,因此您需要将邮件存储在某个位置: 我可以看到以下选项,但每个问题都有可能解决:
好吧,通过主题压缩,您可以间接删除消息……我建议您使用Procesor API和状态存储。对于每个实体,您将其存储在状态存储中,并为每个新输入记录更新它,直到该实体完成为止——对于这种情况,您将从存储中删除它并
context.forward()
it。有关处理器API的更多详细信息,请查看Kafka Streams文档。