Kafka Compacted Topic,重新发布已删除的密钥

时间:2018-08-30 18:00:46

标签: apache-kafka

试图绕过kafkas压缩主题的语义,一个具体的问题是当我重新发布先前已删除的密钥时会发生什么:

  1. “ a”->“值”
  2. “ a”->空
  3. “ a”->“新值”

在(2)之后不久,即在删除删除逻辑删除之前,(3)可能会发生。

我希望保留(3)。

2 个答案:

答案 0 :(得分:0)

compaction意味着kafka最终将只保留特定密钥的最后一个值。 这不是硬性要求,因为压缩不是实时的,而是不时启动的批处理模式(您可以配置延迟)。 在压缩模式下,Kafka将永远不会删除键的所有值。

为键设置值null就像其他值一样。 Kafka会在删除先前的键/值之后的某个时间,但是只要没有推送新值,就会保留此null值。

如果您一个接一个地设置两个值,那么两个值都将保留在kafka中,直到下一次清除为止。

这没问题,因为值将存储在相同的分区中(如果正确使用它们),以便在阅读主题时,将按与存储值相同的顺序读取值。

答案 1 :(得分:0)

您是正确的,(3)将保留为最后一条消息。

日志压缩可确保为任何给定键生成的最后一条消息都将保留在主题的日志中。日志压缩也不会更改记录的顺序。

产生一条值为t.TestMethod(MyAction)且键为(即,墓碑记录)的记录,将导致该记录在日志中保存的时间长达{{1 }}指定为(这是一个主题配置,默认为1天)。早于逻辑删除的其他消息可能会由于压缩而被删除,但逻辑删除将保留该配置的时间。但由于压缩不会改变记录的顺序,因此最后一条消息仍应为(3)