假设我有一个多代理(运行在同一主机上)的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天删除一次数据,并确保如果需要,可以在较短的窗口中删除数据,这样我就不会耗尽内存?
关于时间保留,这是很容易的,只要设置它为您需要的。
对于大小保留,这不是微不足道的,原因有几个:
>
保留限度是最低保证。这意味着如果您将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?
问题内容: 以明确的方式有谁能解释之间的实际差别常数,和? 我也不太确定“保留注释”是什么意思。 问题答案: :在编译期间丢弃。这些注释在编译完成后没有任何意义,因此不会写入字节码。 范例: :在上课时放弃。在进行字节码级后处理时很有用。令人惊讶的是,这是默认设置。 : 不要丢弃。注释应可在运行时用于反射。例: