Apache kafka 使用压缩删除卡夫卡主题中的特定记录

Apache kafka 使用压缩删除卡夫卡主题中的特定记录,apache-kafka,Apache Kafka,我试图从卡夫卡主题中删除特定的消息或记录。我知道卡夫卡不是为达到这个目的而建的。但是,是否可以使用主题压缩,并使用特定的卡夫卡密钥将记录替换为空记录?如何做到这一点 谢谢你是的,如果你有一个压缩的主题,你可以删除一条特定的消息 在这种情况下,消息密钥将成为标识符。如果要删除特定邮件,则需要向主题发送一条具有相同键和空值的邮件。这称为tombstone消息。卡夫卡将在可配置的时间内保留此墓碑(以便您的消费者能够处理删除)。在设定的时间之后,cleaner线程将删除tombstone消息,并且密钥将

我试图从卡夫卡主题中删除特定的消息或记录。我知道卡夫卡不是为达到这个目的而建的。但是,是否可以使用主题压缩,并使用特定的卡夫卡密钥将记录替换为空记录?如何做到这一点


谢谢你

是的,如果你有一个压缩的主题,你可以删除一条特定的消息

在这种情况下,消息密钥将成为标识符。如果要删除特定邮件,则需要向主题发送一条具有相同键和空值的邮件。这称为
tombstone
消息。卡夫卡将在可配置的时间内保留此墓碑(以便您的消费者能够处理删除)。在设定的时间之后,cleaner线程将删除tombstone消息,并且密钥将从Kafka中的分区中消失

一般来说,请注意,旧(待删除)消息不会立即消失。根据配置的不同,可能需要一段时间才能替换单个消息

我发现这个关于配置的总结非常有用()

1) 要激活压缩清理策略,应放置
cleanup.policy=compact

2) 只要使用者在少于主题config
delete.retention.ms
(默认值为24小时)的时间内到达日志头,使用者就会看到所有墓碑

3) 这些线程的数量可以通过
log.cleaner.threads
config进行配置

4) 清洁线程然后选择脏率最高的日志。
dirty ratio=头中的字节数/日志中的总字节数(尾+头)

5) 主题配置
min.compression.lag.ms
用于保证在压缩消息之前必须经过的最短时间

6) 要设置写入记录后开始压缩记录的延迟,请使用主题配置
log.cleaner.min.compression.lag.ms
。在此期间之后,记录才会被压缩。该设置为消费者提供了获取每条记录的时间

介绍如下:

日志压缩可确保Kafka在单个主题分区的数据日志中始终至少保留每个消息键的最后一个已知值

其担保如下:

日志压缩由日志清理器处理,它是一个后台线程池,用于重新复制日志段文件,删除其密钥出现在日志头中的记录。每个压实机螺纹的工作原理如下:

1) 它选择原木头与原木尾比率最高的原木

2) 它为日志头中的每个键创建上一个偏移量的简明摘要

3) 它从头到尾重新复制日志,删除日志中稍后出现的密钥。新的干净段会立即交换到日志中,因此所需的额外磁盘空间只是一个额外的日志段(而不是日志的完整副本)

4) 日志头的摘要本质上只是一个空间紧凑的哈希表。它每个条目正好使用24个字节。因此,使用8GB的cleaner缓冲区,一次cleaner迭代可以清理大约366GB的日志头(假设1k条消息)


您好@CMPE,下面是否回答了您的问题?