apache-kafka - kafka + 如何计算 log.retention.byte 的值

标签 apache-kafka

的主要作用之一log.retention.byte 参数是避免 kafka 磁盘已满,或者换句话说,清除数据日志以避免 kafka 磁盘已满

根据以下链接:
https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.5/bk_kafka-component-guide/content/kafka-broker-settings.html

log.retention.bytes – 是每个主题分区在日志中保留的数据量。默认情况下,日志大小不受限制。

我们还可以看到注意——这是每个分区的限制,因此将这个值乘以分区数来计算为主题保留的总数据。

为了更好地理解它让我们举个小例子(动手总是好得多)

在kafka机器/var/kafka/kafka-logs下,我们有以下主题分区,而主题名称是-lop.avo.prt.prlop

/var/kafka/kafka-logs 下的主题分区示例

lop.avo.prt.prlop-1
lop.avo.prt.prlop-2
lop.avo.prt.prlop-3
lop.avo.prt.prlop-4
lop.avo.prt.prlop-5
lop.avo.prt.prlop-6
lop.avo.prt.prlop-7
lop.avo.prt.prlop-8
lop.avo.prt.prlop-9
lop.avo.prt.prlop-10

在每个分区下,我们有以下日志(示例)
4.0K    00000000000000023657.index
268K    00000000000000023657.log
4.0K    00000000000000023657.timeindex
4.0K    00000000000000023854.index
24K     00000000000000023854.log
4.0K    00000000000000023854.timeindex

在集群中,我们有 3 台 kafka 机器(3 个代理)
关于 kafka 存储 - 每个 kafka 包含大小为 100G 的磁盘

假设我们想在磁盘占总磁盘的 70% 时清除主题中的日志,

所以现在让我们试着计算 的值log.retention.bytes 根据以上信息

因为我们有 10 个主题分区,并且我们希望将磁盘的总大小限制为 70G

那么我的假设是进行如下计算

每个分区将限制为 7G 和 7G 转换为字节,因此它是  7516192768 字节

7G X 10 = 70G(总磁盘的 70%)

看来 log.retention.bytes 应设置为 7516192768 ,以将每个分区限制为 7516192768 字节

我的假设是否合乎逻辑?

如果不是,那么 - 的正确计算是什么? log.retention.bytes
? ,基于那个kafka磁盘是100G,我们在/var/kafka/kafka-logs下只有10个主题分区

最佳答案

你走在正确的轨道上。请记住以下几点:

  • log.retention.bytes定义了 Kafka 将确保有多少数据可用。所以这是一个 下限 .磁盘上的最大大小可能很难精确计算,因为它取决于许多设置,如段和索引大小、段滚动时间、清洁间隔(大多数 log.* 设置)。见 Kafka retention policies了解更多详情。
    计划总磁盘使用量的 70% 是一个好主意,但在实践中,我仍然建议监控您的磁盘使用量以避免意外。
  • 根据您的计算,如果您想添加分区,您可能需要进行更改。另请注意,必须计算副本数,因此如果您创建 1 个复制因子为 3 的新分区,则 3 个代理将需要有可用空间。
  • 关于apache-kafka - kafka + 如何计算 log.retention.byte 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53039752/

    相关文章:

    messaging - Apache 卡夫卡 : consumer state

    apache-kafka - 在Processor Api中,当 `DefaultStreamPartitioner`函数中未指定分区器时,是否会应用 `addSink`?

    apache-kafka - kafka artifactIds kafka_2.10 和 kafka-clients 有什么区别?

    apache-kafka - 用Kafka实现Sagas

    java - 队列消息传递/消费者组的工作流程?

    java - Scala - 如何将回调传递给方法

    apache-kafka - 在Kafka中如何根据生产时间获得确切的偏移量

    apache-kafka - Apache 点燃与 Apache 卡夫卡

    java - 卡夫卡API : java. io.IOException : Can't resolve address: xxx. x.x.xx:9091

    java - 定义 SpoutConfig 参数