Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 卡夫卡消费品规模不断扩大_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Apache kafka 卡夫卡消费品规模不断扩大

Apache kafka 卡夫卡消费品规模不断扩大,apache-kafka,kafka-consumer-api,spring-kafka,Apache Kafka,Kafka Consumer Api,Spring Kafka,我们使用Kafka作为一个严格有序的队列,因此使用了单主题/单分区/单消费者组组合。我应该能够在以后使用多个分区 我的消费者是spring bootapp listener,它从同一主题生成和消费。因此,消费者群体是固定的,总是有一个消费者 Kafka版本0.10.1.1 在这种情况下,topic-0的日志文件和一些\uu消费者\u偏移量\uxx会增加。事实上,\uuuuuu consumer\u offsets\uxx增长非常高,尽管它应该每60分钟定期清除一次(默认情况下)。使用者不总是读取

我们使用Kafka作为一个严格有序的队列,因此使用了
单主题/单分区/单消费者组
组合。我应该能够在以后使用多个分区

我的消费者是
spring boot
app listener,它从同一主题生成和消费。因此,消费者群体是固定的,总是有一个消费者

Kafka版本0.10.1.1

在这种情况下,
topic-0
的日志文件和一些
\uu消费者\u偏移量\uxx
会增加。事实上,
\uuuuuu consumer\u offsets\uxx
增长非常高,尽管它应该每60分钟定期清除一次(默认情况下)。使用者不总是读取,但它具有
auto.commit.enabled=true

默认情况下,
log.retention.minutes
(默认7天)>
offset.retention.minutes
(默认1天);但就我而言,由于我的消费者群体/消费者是固定的、单一的;一旦消息被使用,将其保存在
topic-0
中可能没有任何意义。我是否应该将
日志.保留时间.minutes
缩短到3天(比如说)

我是否可以降低
偏移量.保留时间.minutes
以控制
\uuuu consumer\u offset\uxx
的增长大小,而不触摸
自动提交设置

  • 更改offset.retention.minutes将无济于事。这是为了释放非活动组的偏移所使用的空间。假设您没有太多的非活动组ID,则不需要它

  • 更改偏移量的log.retention.bytes配置主题,并根据需要将其设置为较低的值。您可以使用Kafka-config.sh或您知道的其他方式更改此配置


  • 一旦您限制了主题大小,kafka压缩将在主题大小达到阈值时启动并为您清理。

    offset.retention.minutes
    log.retention.XXX
    属性仅当offset file时才会影响记录/消息/日志的物理删除

    通常,
    offsets.retention.minutes
    属性规定,如果消费者在指定的时间内消失,代理应该忘记你的消费者,即使不从磁盘删除日志文件,它也可以这样做

    如果您将此值设置为相对较低的数字,并在没有活动消费者的情况下检查
    \uu consumer\u offset
    主题,随着时间的推移,您会注意到如下情况:

        [group,topic,7]::OffsetAndMetadata(offset=7, leaderEpoch=Optional.empty, metadata=, commitTimestamp=1557475923142, expireTimestamp=None)
        [group,topic,8]::OffsetAndMetadata(offset=6, leaderEpoch=Optional.empty, metadata=, commitTimestamp=1557475923142, expireTimestamp=None)
        [group,topic,6]::OffsetAndMetadata(offset=7, leaderEpoch=Optional.empty, metadata=, commitTimestamp=1557475923142, expireTimestamp=None)
        [group,topic,19]::NULL
        [group,topic,5]::NULL
        [group,topic,22]::NULL
    
    这意味着事件存储系统(如Kafka)通常是如何工作的。它们记录新事件,而不是更改现有事件

    我不知道有哪个卡夫卡版本默认每60分钟删除/清理一次主题,我感觉您误解了文档中的某些内容

    似乎
    \uu消费者\u补偿
    的管理方式与常规主题非常不同。要删除
    \u消费者偏移量
    的唯一方法是强制滚动其文件。然而,这与常规日志文件的情况不同。虽然常规日志文件(用于数据主题)在每次删除时都会自动滚动,而与
    log.roll.
    属性无关,
    \uu消费者\u偏移量
    不要这样做。如果它们没有滚动并停留在初始
    …00000
    段,则它们根本不会被删除。因此,减少
    \u消费者偏移量的方法似乎是:

  • 设置相对较小的
    log.roll.
  • 操纵
    offset.retention.minutes
    ,如果你有能力断开消费者的连接
  • 否则调整
    log.retention.XXX
    属性

  • 无论何时Kafka收到消息,它都会增加偏移量,即使数据过期(即retention.ms),该偏移量也不会减少。数据和偏移量值不是同义词。