当前位置: 首页 > 知识库问答 >
问题:

Kafka压缩能否覆盖具有相同分区键的消息?

蒯嘉赐
2023-03-14

我用下面的代码给Kafka写信:

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

我们使用0.8.1.1版本的Kafka。

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

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

共有2个答案

欧博简
2023-03-14

听起来很有可能。

夏建木
2023-03-14

我在https://cwiki.apache.org/confluence/display/KAFKA/Log压实度

突出点:

  1. 在0.8版本之前,Kafka只支持一种保留机制:删除日志的旧段
  2. 日志压缩提供了一种替代方法,即它维护每个唯一键的最新条目,而不是仅维护最近的日志条目
  3. 每个主题都有一个选项可以选择“删除”或“压缩”
  4. 压缩确保每个键在日志尾部是唯一的。它的工作方式是从头到尾重新复制日志,删除日志中稍后出现的键
  5. 任何停留在日志头部(~1GB)内的消费者都会看到所有消息

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

只有当下游客户机很长时间无法清空Kafka队列时(从而达到每个主题的大小/时间限制),才会出现丢失记录问题。

我认为这应该是一种预期的行为,因为我们不能永远保存记录。他们必须在某个时候被删除。

 类似资料:
  • 我有两个Kafka制作人向具有多个分区的同一主题发送消息。 正如预期的那样,来自同一生产者PR1的具有相同密钥K1的消息总是转到同一分区PA1。 问题是来自另一个生产者PR2的具有相同密钥K1的消息转到另一个分区PA2,而我希望它们也转到PA1。 Kafka不是在制片人之间保留分区分配吗? 是否与两个生产者使用不同的Kafka客户端库有关? 如果我设置两个制作人使用相同的id,会有帮助吗?

  • 我在Kafka Topic内部有500万条消息。 我必须加入具有相同分区密钥的消息作为单个消息的一部分,并发送给消费者主题[例如:对于密钥1234-Messge1,消费者应该收到单个消息而不是100万消息] Kafka端是否有可用的Kafka API,使用它我可以读取组中具有相同Partition键的所有消息,而不是像传统的spring boot Kafka Listener那样一次读取单个消息。

  • 我有一个Java Spring Kafka应用程序,它将Book类型的对象发送到Kafka主题。然后我试着用Kafka流来映射每一条信息,把这本书的作者作为它的关键字。然后,我尝试将它们添加到一个KTable中,该表保存了密钥和拥有该密钥的消息的数量。然后,该表被发送到一个输出kafka主题。 书籍型号: 流结构: 运行应用后,输出显示每个唯一键,但随机表情,而不是计数。 在搞砸之后,我发现了一件

  • 问题内容: 我的模型与现场 函数根据图像文件名命名。 但是,当用户更新头像时,新的头像名称与旧的头像名称一致,并且Django在文件名中添加后缀。 有办法覆盖文件而不是创建新文件吗? 问题答案: 是的,这对我也很重要。这就是我所做的。 模型: 还定义在中: 在另一个文件中,: 显然,这些是这里的示例值,但是总体而言,这对我来说效果很好,并且根据需要进行修改应该非常简单。

  • 问题内容: 我有以下代码来获取地图: 如何打印带有重复键的消息“重复键”? 问题答案: 如何打印带有重复键的消息“重复键”? 使用当前代码,您将收到消息“重复键”,其中包含至少2个实例的列表,这些实例具有与对象相同的值,例如。 如何获得对应的密钥? 到目前为止,还无法获得相应的键,当前从合并功能中获得的实际上是与相同键映射的2个值,这些值需要合并以仅保留对应键的一个值。 您的问题是 Java 9

  • 我想知道,在什么情况下,具有相同分区键的消息会进入不同的分区。 我使用下面给出的命令运行了属于同一组的两个消费者在控制台中监听一个主题: 我使用“纳米/Kafka-php”库将消息放入带有键 的主题。当我发送多个这样的消息时,我发现很少有消息转到第二个消费者,而大多数消息都发送给消费者1。 由于我对所有消息使用相同的密钥,因此我希望所有消息都由同一个使用者使用。每个使用者都绑定到每个分区。 我使用