我有一个主题,该主题在商店中被读为GlobalKTable且已实现。问题是,如果我更新了该主题的密钥,然后从商店中读取了一段时间(〜0.5秒),我就会得到旧值。
此问题的原因可能是什么?
globalktable将每个应用程序实例的数据存储在rocksDB中,因此,如果更新了另一个分区上的键,则需要花费一些时间从所有分区中提取数据并更新其本地rocksDB。如果不是,请说明globalktable存储如何在内部维护其状态?
如何解决以上问题? 在应该期望一致性与mysql数据库相匹配的这种情况下,我们不应该使用globalktable吗?
答案 0 :(得分:3)
globalktable将每个应用程序实例的数据存储在rocksDB中,因此,如果更新了另一个分区上的键,则需要花费一些时间从所有分区中提取数据并更新其本地rocksDB。如果不是,请说明globalktable存储如何在内部维护其状态?
绝对可以。直到Kafka Streams再次轮询主题并更新为本地RocksDB时,总会有一些延迟。
在期望一致性与mysql数据库相匹配的情况下,我们不应该使用globalktable吗?
这取决于您需要的保证–如果生产者将GlobalKTable主题写入并且写入成功,则不能保证Kafka Streams应用程序已使用此写入并已更新GlobalKTable。生产者和消费者在设计上是相互分离的。