[英]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.