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

Kafka保留政策

邢弘业
2023-03-14

假设我有一个多代理(运行在同一主机上)的Kafka设置,其中有3个代理和50个主题,每个主题配置为有7个分区和3个复制因子。

我有50GB的内存要用于kafka,并确保kafka日志永远不会超过这个内存数量,因此我想配置我的保留策略以防止这种情况。

我已设置删除清理策略:

log.cleaner.enable=true
log.cleanup.policy=delete
log.retention.hours
log.retention.bytes
log.segment.bytes
log.retention.check.interval.ms
log.roll.hours

我应该如何配置上述参数,以便每7天删除一次数据,并确保如果需要,可以在较短的窗口中删除数据,这样我就不会耗尽内存?

共有1个答案

强安和
2023-03-14

关于时间保留,这是很容易的,只要设置它为您需要的。

对于大小保留,这不是微不足道的,原因有几个:

>

  • 保留限度是最低保证。这意味着如果您将log.retention.bytes设置为1GB,那么磁盘上的可用数据将至少为1GB。这并不包括分区所能占用的磁盘上的最大大小,只包括下限。

    忽略索引,一个可以用来估计分区的最大磁盘大小的启发式是:

    SIZE = segment.bytes + retention.bytes
    

    在正常环境中,很少会出现所有分区同时超出其限制的情况,因此通常可以忽略第二点。

    如果要对索引进行计数,那么还需要为每个段添加两次segment.index.bytes(有两个索引:offset和timestamp)。

  •  类似资料:
    • 问题内容: 从Java文档中: CLASS:注释由编译器记录在类文件中,但VM在运行时无需保留。 运行时:注释由编译器记录在类文件中,并在运行时由VM保留,因此可以通过反射方式读取它们。 消息来源:注释将被编译器丢弃。 我了解RUNTIME(以便在反射中使用批注)和CLASS(对于编译器)的用法,但我不知道何时使用它可能有用 @Retention(RetentionPolicy.SOURCE) 你

    • 我想让某个Kafka主题只保留一天的数据。但如果我们继续向主题(活动)发送数据,它似乎根本没有删除任何数据。我尝试了主题端参数(Retention.ms)和服务器端: 但如果我们继续向它发送数据,它似乎对活的主题不起作用。只有当我们停止向主题发送数据时,它才会遵循保留策略。 那么,一个活动主题的正确配置是什么,只保留数据一段时间?

    • 我们正在使用kafka streams的windows join连接2个流,我们想知道: 为什么KS要在内部主题上增加24小时?例如,我们有一个1小时的窗口,但内部主题保留25小时。我们可以将其配置为不添加这些24小时吗 [更新] 例如,我们创建JoinWindow如下: 虽然我可以看到内部主题(JOINTHIS和OUTEROTHER)是用 这是刚刚在我的机器上的一个空代理(使用confluent

    • 我有一个Kafka的题目有1个分区。如果它有100条消息,偏移量将从0.99开始。 根据Kafka保留策略,在指定的时间之后,所有的消息都将被清除。 并且我正在发送100个新的消息到主题,一旦所有已经被清除(在保留期之后)。现在,消息的新偏移量从哪里开始呢?是从100还是从0?? 我想知道新的偏移是100-199还是0-99?

    • 问题内容: 以明确的方式有谁能解释之间的实际差别常数,和? 我也不太确定“保留注释”是什么意思。 问题答案: :在编译期间丢弃。这些注释在编译完成后没有任何意义,因此不会写入字节码。 范例: :在上课时放弃。在进行字节码级后处理时很有用。令人惊讶的是,这是默认设置。 : 不要丢弃。注释应可在运行时用于反射。例: