假设我有一个配置有一个分区的kafka代理
log.retention.bytes=80000
log.retention.hours=6
如果我尝试将带有生产者api的记录发送给经纪人,并且在保留期之前主题的日志已满,会发生什么?
我的消息会被丢弃吗? 还是kafka会从旧消息中释放一些空间并添加我的消息?
我如何知道某个主题是否已满,并且在使用日志之前将其删除?
主题变满时,是否可以监视或公开指标?
答案 0 :(得分:1)
主题配置的如果我尝试将带有生产者api的记录发送到 经纪人和主题的日志在保留期限前已满? 我的留言会被丢弃吗?否则kafka会从中释放一些空间 旧邮件并添加我的邮件?
cleanup.policy
属性(默认为delete
)表示:“删除策略将在达到旧文件段的保留时间或大小限制后将其丢弃。”
因此,如果您使用生产者api发送记录且主题已满,则会丢弃旧段。
我如何知道主题是否已满并且正在删除日志 被消耗之前? 主题变满时,是否可以监视或公开指标?
您可以使用以下脚本获取分区大小:
/bin/kafka-log-dirs.sh --describe --bootstrap-server : --topic-list
您将需要开发一个脚本,该脚本将在脚本之上运行,以获取主题的当前大小并将其定期发送到Datadog。 在Datadog中,您可以创建窗口小部件,一旦大小达到特定阈值,该窗口小部件就会触发适当的操作(例如发送电子邮件警报)。
答案 1 :(得分:1)
这不是完全正确,至少在默认情况下,主题永远不会满。
我默认说是因为@Mukesh一样,cleanup.policy
会在达到旧文件段的保留时间或大小限制时将其丢弃,但是默认情况下,没有大小限制,只有时间限制和处理该内容的属性是retention.bytes
(默认设置为-1
)。
它只会让消息有时间限制,请注意retention.bytes
值是由分区设置的,因此要指定某个主题的限制,您必须乘以该主题上的分区数。
编辑: 卡夫卡导出了大量的指标(在JMX中),在这些指标中,您可以找到有关细分的全局指标(总数,每个主题编号,大小,滚动细分的比率等)。