Apache kafka 卡夫卡压缩主题,重新发布已删除的密钥

Apache kafka 卡夫卡压缩主题,重新发布已删除的密钥,apache-kafka,Apache Kafka,试着围绕卡夫卡压缩主题的语义来思考,一个具体的问题是,当我重新发布一个先前已被删除的密钥时会发生什么: “a”->“值” “a”->空 “a”->“新值” 其中(3)可能发生在(2)之后,即删除墓碑之前 我所希望的是(3)将被保留 压缩意味着卡夫卡最终只保留特定密钥的最后一个值。 这并不是一个硬性要求,因为压缩不是实时的,而是在不时启动的批处理模式下(您可以配置延迟)。 在压缩模式下,Kafka永远不会删除密钥的所有值 将值null设置为键的行为与其他值类似。卡夫卡将在某个时候删除以前的键/值,

试着围绕卡夫卡压缩主题的语义来思考,一个具体的问题是,当我重新发布一个先前已被删除的密钥时会发生什么:

  • “a”->“值”
  • “a”->空
  • “a”->“新值”
  • 其中(3)可能发生在(2)之后,即删除墓碑之前


    我所希望的是(3)将被保留

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

    将值
    null
    设置为键的行为与其他值类似。卡夫卡将在某个时候删除以前的键/值,但只要不推送新值,卡夫卡将保留此
    null

    如果一个接一个地设置两个值,则这两个值都将保留在卡夫卡中,直到下一次清除

    这不是一个问题,因为值将存储在同一分区中(如果您正确使用它们的话),因此当您阅读主题时,这些值将按照与存储相同的顺序进行读取。

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

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


    生成一个值为
    null
    的记录和一个键(即:一个墓碑记录),将导致该记录在日志中保留,只要
    delete.retention.ms
    被指定为(这是一个主题配置,默认为1天)。其他早于墓碑的消息可能会因为压缩而被删除,但墓碑将被保留,直到配置显示为止。但是由于压缩不会改变记录的顺序,最后一条消息仍然应该是(3)

    OK,所以您要说的是,最终只有“一个”->“新值”将出现在日志中。它将出现在日志中是的。一旦设置了值,直到设置了新的值。