微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从Kafka状态存储中删除记录是否也会从changelog主题中删除记录?

我们有一个Kafka流聚合拓扑。我们需要检查changeLog主题的大小,以减少Kafka的存储成本。因此,我们在拓扑中使用转换器(DSL API)来安排标点符号,以便使用keyvalueStore.delete()从stateStore中删除旧记录。
我能够验证,在删除之后,在标点符号的进一步计划的触发器上,状态存储中不存在已删除的键。但是它也会从changeLog主题删除记录吗?更重要的是,它是否也减少了changeLog主题的大小,以便控制Kafka的存储成本?

解决方法

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

,

否,发出“删除”命令时,changelog主题中没有实际的记录删除。请注意,“删除”命令实际上是一条记录,该记录具有写入主题(null或其他任何主题)中的tombstone值(aka changelog)-请参见here

空值以特殊方式解释:具有空值的记录 值代表记录键的“删除”或逻辑删除

因此,实际上是一种解释,使它感觉像是一种删除;可以通过KStream或使用Kafka Consumer API读取changelog主题(您必须知道确切的主题名称),然后在其中找到tombstone记录(直到压缩或固定螺纹)。但是,如果您读取的是changelog或带有KTable的任何压缩主题,但比tombstone记录要多的话,它将确定从关联的存储中删除了-尽管您实际上无法在存储中找到相关的键,它实际上存在于相关的压缩主题中。

如果在某个主题上启用了压缩策略(默认情况下在changelog主题上启用了压缩策略),则会删除其记录,直到最后一个特定键的记录为止。因此,在某些时候,您只有删除记录,因为压缩Kafka线程会删除具有相同键的先前记录。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。