gpt4 book ai didi

apache-kafka - 卡夫卡 : Messages disappearing from topics, 最大时间=0

转载 作者:行者123 更新时间:2023-12-02 19:33:10 24 4
gpt4 key购买 nike

我们发现 Apache Kafka 2.3、2.4.0、2.4.1 和 2.5.0 版本的主题中的消息消失了。我们在对集群进行滚动部署时注意到了这一点,但不幸的是,这种情况并不是每次都会发生,因此非常不一致。

有时我们会丢失主题内的所有消息,有时我们会丢失分区内的所有消息。当发生这种情况时,以下日志是一个常量:

[2020-04-27 10:36:40,386] INFO [Log partition=test-lost-messages-5, dir=/var/kafkadata/data01/data] Deleting segments List(LogSegment(baseOffset=6, size=728, lastModifiedTime=1587978859000, largestTime=0)) (kafka.log.Log)

之前还有一份日志称该段的保留时间超出了 24 小时。在此示例中,该消息是在部署前约 12 分钟生成的。

请注意,所有被错误删除的消息都有 largestTime=0,而被正确删除的消息则有一个有效的时间戳。从我们从文档和代码中读到的内容看来,largestTime 用于计算给定段是否达到时间违规。

由于我们可以在 Kafka 的多个版本中观察到这一点,因此我们认为这可能与 Kafka 外部的任何内容有关。例如动物园管理员。

有人知道为什么会发生这种情况吗?我们使用的是 Zookeeper 3.6.0。

最佳答案

我们发现原因与Kafka本身无关,而是与我们存储日志的卷有关。尽管如此,以下解释可能对教育目的有用:

具体来说,这是一个权限问题,当触发日志清理器时,Kafka 无法读取 .timeindex 文件。 这导致 largestTime0 并导致某些邮件在保留时间之前被删除。

每个主题分区都分为几个段,最后一个段被存储到包含实际消息的不同 .log 文件中。对于每个 .log 文件,都有一个 .timeindex 文件,其中包含偏移量和 lastModifiedTime 之间的映射。

当Kafka需要检查一个段是否可删除时,它会搜索最近的偏移量lastModifiedTime并将其存储为largestTime。然后,检查是否达到保留限制:currentTime -largestTime > replacementTime

如果是,它将删除该段和相应的消息。

由于 Kafka 无法读取文件,largestTime0,并且检查 currentTime > replacementTime 对于我们的 1- 始终为 true天保留。

关于apache-kafka - 卡夫卡 : Messages disappearing from topics, 最大时间=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61480180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com