我怎么知道kafka主题已满?

时间:2018-12-12 09:38:02

标签: apache-kafka kafka-producer-api

假设我有一个配置有一个分区的kafka代理

log.retention.bytes=80000 
log.retention.hours=6

如果我尝试将带有生产者api的记录发送给经纪人,并且在保留期之前主题的日志已满,会发生什么?

我的消息会被丢弃吗? 还是kafka会从旧消息中释放一些空间并添加我的消息?

我如何知道某个主题是否已满,并且在使用日志之前将其删除?
主题变满时,是否可以监视或公开指标?

2 个答案:

答案 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中),在这些指标中,您可以找到有关细分的全​​局指标(总数,每个主题编号,大小,滚动细分的比率等)。