apache-kafka - kafka + 如何计算 log.retention.byte 的值
问题描述
log.retention.byte参数的主要作用之一是避免 kafka 磁盘满大小,或者换句话说,清除数据日志以避免 kafka 磁盘满。
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 个 broker) 关于 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个topic分区
解决方案
你在正确的轨道上。只需记住几件事:
log.retention.bytes
定义 Kafka 将确保有多少数据可用。所以这是一个下限。磁盘上的最大大小可能很难准确计算,因为它取决于许多设置,例如段和索引大小、段滚动时间、清理间隔(大多数log.*
设置)。有关更多详细信息,请参阅Kafka 保留策略。计划 70% 的总磁盘使用量是一个好主意,但实际上我仍然建议监控您的磁盘使用情况以避免意外。
根据您的计算,如果要添加分区,您可能需要进行更改。另请注意,必须计算副本,因此如果您创建 1 个复制因子为 3 的新分区,则需要 3 个代理有可用空间。
推荐阅读
- linux - find -perm 查找不存在的文件(或其他文件)
- ajax - 我跟着一个视频教程。我正在尝试使用 ajax 和 jquery 在我的 django 项目的主页上呈现微调器
- c# - 蛇盒属性的类属性
- docker - 使用策略“”拉取图像失败:图像拉取失败:后退拉取图像“
" - google-apps-script - 使用 Google Ads 脚本在电子表格列中搜索值
- facebook - 将 Instagram 帐户连接到稍后或 Creator Studio 问题 {"error_type": "OAuthException", "code": 400, "error_message": "Session invalid"}
- linux - -w 在 perl 脚本进程执行中指定什么
- c++ - 编译器不同意接受这个 view::keys 代码
- java - 日期大于或小于使用 java8 功能的 java 中的当前日期
- javascript - 帮助 wordpress 导航菜单