Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 从Kafka状态存储中删除记录是否也会从changelog主题中删除该记录?_Apache Kafka_Apache Kafka Streams_Aggregation_Tombstone - Fatal编程技术网

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

Apache kafka 从Kafka状态存储中删除记录是否也会从changelog主题中删除该记录?,apache-kafka,apache-kafka-streams,aggregation,tombstone,Apache Kafka,Apache Kafka Streams,Aggregation,Tombstone,我们有一个Kafka流聚合拓扑。我们需要控制变更日志主题的大小,以降低Kafka存储成本。因此,我们在拓扑中使用transformer(DSL API)来调度标点符号,该标点符号使用keyValueStore.delete()从stateStore中删除旧记录。 我能够验证删除后,在标点符号的进一步预定触发器上,删除的键不在状态存储中。但是它是否也会从变更日志主题中删除记录?更重要的是,它是否也减少了变更日志主题的大小,以便检查卡夫卡的存储成本???是的,对状态存储的更改应用于变更日志主题。否,

我们有一个Kafka流聚合拓扑。我们需要控制变更日志主题的大小,以降低Kafka存储成本。因此,我们在拓扑中使用transformer(DSL API)来调度标点符号,该标点符号使用keyValueStore.delete()从stateStore中删除旧记录。

我能够验证删除后,在标点符号的进一步预定触发器上,删除的键不在状态存储中。但是它是否也会从变更日志主题中删除记录?更重要的是,它是否也减少了变更日志主题的大小,以便检查卡夫卡的存储成本???

是的,对状态存储的更改应用于变更日志主题。

否,当您发出“删除”命令时,
变更日志
主题中没有实际的记录删除。请注意,“delete”命令实际上是一条记录,其
null
值(也称
tombstone
)写入主题(
changelog
或任何其他)-请参阅:

空值以一种特殊的方式解释:带有空值的记录 值表示记录键的“删除”或墓碑

因此,事实上,这种解释让人觉得它是一种删除;您可以将
changelog
主题(您必须知道确切的主题名称)作为KStream或使用Kafka Consumer API读取,并在那里找到
墓碑记录(直到被压缩或保留线程删除)。但是,如果您阅读一个
changelog
或任何包含KTable的压缩主题,那么
tombstone
记录将确定从相关存储中删除-您将不再在存储中找到相关密钥,尽管它实际上存在于相关压缩主题中


如果在主题上启用了压缩策略(默认情况下在
changelog
topics上启用),则其记录将被删除,直到特定密钥的最后一个记录。因此,在某些情况下,您将只拥有删除记录,因为压缩卡夫卡线程将删除以前具有相同密钥的记录。

谢谢。它会减少变更日志主题的存储大小,还是只是将记录标记为“软删除”,以便变更日志主题的存储仍然不受影响?所有变更日志主题都会被压缩,因此最终删除(作为墓碑)将消失。谢谢。所以墓碑也被写进了变更日志主题中。我将需要删除墓碑记录以及保存在卡夫卡存储大小。我找到了这个属性,设置为1天,而retention.ms配置设置为7天。我将cleanup.policy设置为[compact,delete]。在我当地的环境中。我没有看到记录被删除。我遗漏了什么吗?实际上,由于业务需要,我们将retention.ms配置为7天(一个事件可以更新到7天)。但在7天内,我们收到了大量的信息,导致了巨大的卡夫卡存储成本。这就是为什么我们开始通过发送墓碑消息立即删除处理过的记录。