如何解决为什么卡夫卡仍然收到“过期”消息?
我有一个非常基本的主题,保留期为1分钟。我用以下方法创建它:
kafka-topics --zookeeper $zhost --topic $name --create --partitions $partitions --replication-factor 1 --config retention.ms=60000
所以我的主题如下:
Topic: topic_quick PartitionCount: 1 ReplicationFactor: 1 Configs: retention.ms=60000
Topic: topic_quick Partition: 0 Leader: 0 Replicas: 0 Isr: 0 Offline:
然后,我的生产者发送一条消息,一分钟后,我尝试使用此消息。
预期行为:
- 由于保留期限的原因,一分钟后,我的消费者不应再收到我在一分钟前发送的消息。
当前行为:
- 消费者在保留期(1分钟)后使用该消息
这怎么可能?保留期似乎没有任何作用。
解决方法
我想到一个可能的答案。在Kafka中,代理数据存储在主题中,主题由分区组成,分区最终由段组成。我认为您应该设置的经纪人属性之一是log.segment.bytes
。摘自Confluent的《 Kafka:权威指南》
,前面提到的日志保留设置对日志段起作用,而不是对单个消息起作用。在向Kafka经纪人生成消息时,它们会附加到 分区的当前日志段。一旦日志段达到大小 由log.segment.bytes参数指定,默认值为1 GB,即日志段 关闭,然后打开一个新的。日志段关闭后,可以 考虑到期。较小的日志段大小意味着必须关闭文件 并且分配频率更高,从而降低了磁盘写入的整体效率。 如果主题的产量较低,则调整日志段的大小可能很重要 率。例如,如果一个主题每天仅接收100 MB的消息,并且 log.segment.bytes设置为默认值,它将需要10天才能填充一个段。如 如果关闭log.retention.ms,则直到日志段关闭后消息才能过期。 设置为604800000(1周),实际上最多会保留17天的邮件 直到关闭的日志段到期。这是因为一旦关闭日志段 使用当前的10天消息,该日志段必须保留7天 根据时间策略过期之前(由于无法删除细分受众群,直到 该段中的最后一条消息可以过期)
-
'retention.ms'的目的是清理主题的数据,以使过多的数据不会成为系统的问题。
-
它没有严格执行'retention.ms'所定义的保留时间
-
除上述内容外,迈克(Mike)共享的link对'retention.ms'的实际工作方式有很好的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。