Kafka压缩可以用相同的分区密钥覆盖消息吗?

 skuman2012 发布于 2022-12-14 11:31

我使用以下代码写入Kafka:

String partitionKey = "" + System.currentTimeMillis();
KeyedMessage data = new KeyedMessage(topic, partitionKey, payload);

我们使用的是Kafka的0.8.1.1版本.

有可能当多个线程正在写入时,其中一些(具有不同的有效负载)使用相同的分区键写入,因此Kafka会覆盖这些消息(由于相同的partitionKey)?

让我们朝这个方向思考的文档是:http: //kafka.apache.org/documentation.html#compaction

1 个回答
  • 我在https://cwiki.apache.org/confluence/display/KAFKA/Log+Compaction找到了更多资料

    突出点:

      在0.8版本之前,Kafka仅支持一种保留机制:删除旧的日志段

      日志压缩提供了一种替代方法,使其维护每个唯一键的最新条目,而不是仅维护最近的日志条目.

      每个主题选项可选择"删除"或"紧凑".

      压缩可确保每个密钥在日志尾部都是唯一的.它的工作原理是从头到尾重新复制日志,删除日志中稍后出现的键.

      任何留在日志头部(~1GB)的消费者都会看到所有消息.

    因此,无论我们是否进行日志压缩,Kafka都会删除较旧的记录,但日志记录中的记录是安全的.

    仅当下游客户端无法长时间清空Kafka队列时(例如,每个主题大小/时间限制被命中),才会出现丢失记录问题.

    这应该是我认为的预期行为,因为我们无法永远保存记录.它们必须在某个时间或其他时间被删除.

    2022-12-14 11:33 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有