apache-kafka - Kafka Log compaction也是去重机制吗
问题描述
Kafka Log compaction也是去重机制吗
我已经通过这篇文章Kafka 压缩进行重复数据删除
其中指出 Kafka Log 压缩不是重复数据删除机制。但我仍然很少怀疑。
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 或 7 天的设置显然是可配置的。然后,打开一个新段并将新消息写入这个新段。现在,如果将重复项写入此活动段,并且如果消费者持续阅读(通常是这种情况),则将读取重复项。
因此,如果您考虑一下,您将无法仅依靠压缩功能来实现重复数据删除。此外,它不是可以使用 API 触发的东西(至少目前还不能),因此您也无法在您的消费者应用程序中控制它。
希望这可以帮助!
推荐阅读
- mysql - 使用 Transform 重命名 SymmetricDS 中的表
- python - 插入/附加到列表列表时出现问题
- c# - 这种签名 URL 的实现是否合理安全?
- reactjs - 警告使用 react redux firebase,组件 FirebaseConnectWrapped(Auth) 仍在使用 componentWillReceiveProps
- agora.io - switchDevice() error Failed to GetUserMedia "–" NotReadableError "– 0 –" 无法开始捕获视频轨道
- java - 如何使用 ActionListener 更改 JPanel 的颜色
- asp.net - 如何为 Asp.Net Core 3.1 中的所有路由 URL 添加动态前缀?
- java - 反转偶数位置词的逻辑
- laravel - laravel/elequent - 模型和关系
- azure - 如果复制列表中的服务器被禁用和删除,对本地服务器故障转移后正在运行的 VM 是否有任何影响?