从kafka状态存储中删除记录是否也会从changelog主题中删除记录?

htrmnn0y  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(507)

我们有一个kafka流聚合拓扑。我们需要控制changelog主题的大小,以降低kafka存储成本。因此,我们在拓扑中使用transformer(dslapi)来调度标点符号,该标点符号使用keyvaluestore.delete()从statestore中删除旧记录。
我能够验证在删除之后,在标点符号的进一步预定触发器上,删除的键不在状态存储中。但是它是否也会从changelog主题中删除记录?更重要的是,它是否也减少了changelog主题的大小,从而控制了kafka的存储成本??

deyfvvtc

deyfvvtc1#

是的,对状态存储的更改将应用于changelog主题。

dxxyhpgq

dxxyhpgq2#

不,没有实际的记录删除到 changelog 发出“删除”命令时的主题。请注意,“delete”命令实际上是带有 null 价值(又名 tombstone )写进一个主题( changelog 或任何其他)-参见此处:
空值以一种特殊的方式进行解释:带有空值的记录表示记录键的“delete”或tombstone
因此,事实上,解释是一个,使它感觉像删除;一个人可以读一本书 changelog 主题(您必须知道确切的主题名称)作为kstream或使用kafka消费者api,并将找到 tombstone 记录在那里(直到被压实或保留线去除)。但如果你读了一本 changelog 或者任何一个压缩的主题 tombstone 记录将决定从相关存储中删除-尽管相关主题中确实存在相关密钥,但您将不再在存储中找到相关密钥。
如果在主题上启用了压缩策略(默认情况下在 changelog 主题),直到特定键的最后一个记录被删除。因此,在某个时刻,您将只拥有delete记录,因为具有相同键的先前记录将被kafka线程删除。

相关问题