GlobalKTable 中的数据会过期吗?

Does data in a GlobalKTable expire?

我正在使用 GlobalKTable 作为键值存储。商店中的数据很少变化,但确实会变化。

我每周收到一次文件,该文件的内容以键值对格式放入流中。然后由需要数据的应用程序将其存储为 GlobalKTable。

我担心的是,该文件没有指定自上一个文件以来密钥何时被删除。在这种情况下,我不希望旧的、不再有效的密钥永远挂在应用程序商店中。

一个例子:

第 1 周:

a=1
b=2
c=3
d=4

第 2 周:

a=1
b=2
d=4
e=5

我对该主题启用了压缩,并保留了几周的时间。

在所有应用程序的 GlobalKTable 存储中 c 会发生什么情况?一旦主题从流中删除数据,它最终会过期吗?或者它会一直呆在那里直到应用程序重新启动?

c 将停留在运行 Kafka Streams 客户端的计算节点上,直到

  1. 在经纪人 c 上由于保留期而被删除(请注意,保留期是一个下限,可能需要比保留期更长的时间,直到 c 被实际删除)
  2. Kafka Streams 客户端停止,
  3. 本地状态被消灭,
  4. 新的Kafka Streams客户端在同一个计算节点上重启。

第 4 步将从主题恢复本地状态,因为它不会找到任何本地并且不再读取 c。 Kafka Streams 中的键值存储没有任何保留期,并且对代理主题的清理不会触发 Kafka Streams 客户端上的任何操作。

如果您没有通过向主题发送逻辑删除记录 c=null 来从主题中明确删除 c,则 c 将不会在全局 table.