繁体   English   中英

如何清理 Kafka KStream 内部变更日志和重新分区主题

[英]How to clean up Kafka KStream internal changelog and repartition topics

卡夫卡 1.1 版

我们使用 Kafka KStream 根据事件本身中的选定键来聚合事件。 下面大致是做什么的


KStream[String, Event]
.selectKey[String]({ (_, event) =>
        aggregationKey(event)
      }
.groupByKey()
.aggregate(
        () => {
          Event("", "")
        },
        (k: Any, event: Event, aggregate: Event) => aggregator(k, event, aggregate, inputTopicName),
        Materialized
          .as[String, Event, KeyValueStore[Bytes, Array[Byte]]]("store-name")
          .withValueSerde(protoSerde)
      )
.toStream
.to(outTopicName)

在“聚合器”function 中,我根据特定条件返回 null 以产生墓碑事件。

Kafka 创建了两个主题,repartition 和 changelog。 重新分区主题中的保留设置为 -1。 无论墓碑事件如何,这些主题都会不断增长。 我找不到清理它们的方法。

我们的要求很简单:

只要满足某个键的条件,该键的聚合更改日志就没有用处。 我们想完全永久地清除该密钥的所有事件

请就如何清理基于密钥的 kstream 内部主题提出建议? 非常感激。

上游重新分区主题不应无限增长:正如您所注意到的,保留时间设置为-1 (以避免数据丢失)。 但是,在处理记录后,KafkaStreams 会明确清除该主题。

此外,如果您从Aggregator返回null ,则KTable存储中的相应条目将被删除,并且墓碑将发送到更改日志主题并发送到下游。 当然,tombstone也是先附加到topic上,只有当broker端topic compaction运行时,旧记录才会被“垃圾收集”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM