是不是Kafka日志压缩也是一种重复数据消除机制



Kafka日志压缩是否也是一种重复数据消除机制

我已经完成了这个后Kafka压缩去重复

声明Kafka日志压缩不是去重机制。但我仍然很少怀疑。

q3(我无法理解日志压缩如何不能防止重复读取。

Suppose Producer sends 2 records
Key : Employee1 { Salary :1000 } 
Key : Employee1 { Salary :2000 } 
Consumer hasn't read the data yet.
Log Compaction happens
we have one only record
Key : Employee1 { Salary :2000 } 
Consumer reads data now

因此,消费者只读取Key : Employee1 { Salary :2000 }。因此,可以防止重复读取。我哪里错了?什么是日志压缩只有在"提交段"时才会发生?

在您所描述的情况下,即消费者尚未读取数据,并且压缩发生-是的,在这种情况下,可以防止重复读取。

但是。。。

  • 如果没有进行压缩,您仍然会看到重复项
  • 配置delete.retention.ms (default value of 24 hours)允许消费者看到已删除的记录,这可能导致重复记录到达消费者。这些邮件将带有删除标记
  • 您的第二个问题-压缩仅发生在已提交的分段上,而不发生在活动分段上。任何Kafka分区中的消息都是在磁盘上分段排列的。一旦该段的大小达到1 GB或该段已使用7天(以较小者为准(,该段将被关闭或提交。这些1 GB o 7天的设置显然是可配置的。然后,打开一个新的分段,并将新消息写入这个新分段。现在,如果重复项正在写入该活动段,并且消费者正在持续读取(通常是这种情况(,则重复项将被读取

因此,如果您仔细考虑,您将NOT能够仅依靠压缩功能来实现重复数据消除。此外,它是NOT可以使用API触发的东西(至少目前还没有(,因此您也无法在消费者应用程序中控制它。

希望这能有所帮助!

最新更新