Apache kafka 如何从Kafka全局状态存储中删除记录?

Apache kafka 如何从Kafka全局状态存储中删除记录?,apache-kafka,kafka-consumer-api,apache-kafka-streams,kafka-producer-api,Apache Kafka,Kafka Consumer Api,Apache Kafka Streams,Kafka Producer Api,恢复过程中的全局状态存储将从源目录转储数据,将其视为全局存储的更改日志主题。< /P> 对于删除记录,我执行以下操作 kvStore.put("key-1",null) T1 附加了一个进程,该进程从T1读取数据,并从记录构造一个键,然后向下转发到主题T2 主题T2是全局状态存储的源主题。 例如: T1我得到数据:{id:'123',名称:Mohit,类型:insert} 为记录构造一个键并向下转发到主题,键和值为T2->key:123和value:{id:'123',name:Mohit}

恢复过程中的全局状态存储将从源目录转储数据,将其视为全局存储的更改日志主题。< /P> 对于删除记录,我执行以下操作

kvStore.put("key-1",null)
<卡夫卡如何知道记录被删除,在恢复过程中,它将从源主题转储记录,考虑源主题有KEY-1

的记录。 在我的拓扑中,我有

输入主题->T1 附加了一个进程,该进程从T1读取数据,并从记录构造一个键,然后向下转发到主题T2 主题T2是全局状态存储的源主题。 例如:

T1我得到数据:{id:'123',名称:Mohit,类型:insert} 为记录构造一个键并向下转发到主题,键和值为T2->key:123和value:{id:'123',name:Mohit} 之后,相同的键记录作为数据中的delete类型出现。 T1获取的数据:{id:'123',名称:Mohit,类型:insert}

所以我是这样向前记录的

this.context.forward(key, null)
key: 123 value:null
在状态存储中也会更新


我只想知道,在恢复过程中,此记录将被删除,这意味着如果我使用键123进入存储,则返回null。

状态存储更改日志是压缩主题。要从压缩的主题中删除消息,需要执行putkey、null操作。具有空值的消息称为墓碑,它最终将被主题清理器删除

请注意,消息最终只会在状态存储中删除,而不会在输入主题中删除


最后,键为123的记录应该完全从状态存储中删除。

我说的是全局状态存储在恢复过程中使用源主题作为他的更改日志。由于数据位于源主题中,键为:123,它将在全局存储中加载数据是,它将在全局状态下加载数据,但由于该值为null,它最终将从存储中删除。我认为您别无选择,只能在压缩主题中添加null值。否则在恢复时不会考虑该值。我无法100%确定我是否理解该问题。但是,全局存储是只读的,您不能直接放置/删除数据。全局处理器只能按原样从主题中获取日期以更新存储。