【问题标题】:Problems with the retention period for offset topic of kafkakafka的offset topic的保留期问题
【发布时间】:2017-07-21 15:39:23
【问题描述】:

我们正面临 Kafka 的问题。我们有一个只有一个分区和一个消费者组中只有一个消费者的主题。消费者已停止一个月。与此同时,生产者正在向该主题发送消息。

当我们再次启动消费者时,它无法消费消息。我假设之前提交的偏移量已经丢失,因此消费者在唤醒时不知道找到起点。

当我们停止并再次启动消费者时,消费者可以接收新消息,但之前发送的所有消息都没有被消费。

偏移是否已损坏? kafka 内部主题偏移量的保留期是否意味着最后提交的偏移量已被删除?

【问题讨论】:

  • 嗨@matthias-j-sax,假设我们在偏移管理方面遇到问题,维护偏移的最佳实践是什么,在kafka集群之外维护偏移是否是个好主意,例如RDMS,所以在丢失偏移量的情况下,我们可以从存储在DB中的偏移量重新启动消费者?
  • 最简单的事情是更改代理设置增加偏移保留时间。如果将其设置为 INT_MAX ,您将获得多年...应该这样做。如果您确实需要更长的保留时间,您也可以将偏移量存储在任何您想要的位置,例如数据库。但当然,在您自己的代码库中需要维护更多代码。
  • 我有点困惑,因为即使我将 offset.retention.minutes 设置为 10 分钟,我也希望某些特定组的偏移量将被删除,因为目前没有活动的消费者组,但是当我监控时记录没有偏移量过期[2017-03-02 06:57:24,907] INFO [Group Metadata Manager on Broker 1]: Removed 0 expired offsets in 1 milliseconds. (kafka.coordinator.GroupMetadataManager)@MatthiasJ.Sax
  • 不确定...您等了多长时间?保留时间是有保证的下限,并且没有严格的强制要求立即删除偏移量 - 您还可以配置一个清理间隔。

标签: apache-kafka kafka-consumer-api


【解决方案1】:

可以在 kafka 代理中配置保留值:

offsets.retention.minutes

默认为 24​​ 小时。看: Kafka consumer group offset retention

编辑:从 Kafka 2.0 开始,默认值为 7 天。

【讨论】:

【解决方案2】:

我们也面临同样的问题,我对此进行了一些研究。我已更改以下步骤,它已解决。

我们有 14 天的保留期,因此我们将 kafka 偏移量主题保留期更改为 14 天

我们已经将 cleanup.policy 从 compact 更改为 delete

./kafka-configs.sh  --alter --zookeeper localhost:2181 --entity-type topics
              --entity-name __consumer_offsets --add-config cleanup.policy=delete

更新了主题的配置:“__consumer_offsets”。

【讨论】:

  • __consumer_offsets 是一个特殊主题,您不应更改该主题的清理策略
  • 将清除策略设置为删除 __consumer_offsets 是个坏主意。它通常使用紧凑策略,仅保留 group:topic:partition 组合的最后一次提交。
【解决方案3】:

kafka 中消息(偏移量)的默认保留期是一周,即)7 天

在保留期过后,所有现有的偏移量将从代理中删除,以避免空间溢出。

因此之前提交的偏移量将被更改为最新偏移量,因为之前的偏移量已被 kafka / zookeeper 删除。

如果你想让你的消息长时间保持,请在 kafka 中创建主题时指定 --retention-period 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多