【问题标题】:How can I know that a kafka topic is full?我怎么知道一个kafka主题已经满了?
【发布时间】:2018-12-13 01:36:41
【问题描述】:

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

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

如果我尝试使用生产者 api 向代理发送记录并且主题的日志在保留期之前已满,会发生什么情况?

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

我如何知道主题是否已满,日志是否在使用前被删除?
有没有办法在主题已满时监控或公开指标?

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    如果我尝试使用生产者 api 将记录发送到 经纪人和主题的日志在保留期之前已满? 我的消息会被丢弃吗?或者 kafka 会从 旧消息并添加我的?

    主题配置中的cleanup.policy 属性默认为delete,表示“删除策略将在达到保留时间或大小限制时丢弃旧段。”

    因此,如果您使用生产者 api 发送记录并且主题已满,它将丢弃旧段。

    我如何知道主题是否已满且日志是否正在被删除 在被消费之前? 有没有办法在主题已满时监控或公开指标?

    您可以使用以下脚本获取分区大小:

    /bin/kafka-log-dirs.sh --describe --bootstrap-server : --topic-list
    

    您将需要开发一个脚本,该脚本将在脚本之上运行以获取当前主题大小并定期将其发送给 Datadog。 在 Datadog 中,您可以创建在大小达到特定阈值时触发适当操作(例如发送电子邮件警报)的小部件。

    【讨论】:

    • 感谢您的回答!但我的问题的第二部分是关于通过生产者 api 或直接从 kafka 指标以某种方式监控、获取和警报,以了解主题已满并且某些消息被丢弃。
    • @iah10 :我编辑了我的帖子。通常情况下,您会默认导出有关 Kafka 中很多内容的 JMX 指标,包括链接到段的指标。
    • 对于 JMX 指标,您可以在此处找到更多信息:stackoverflow.com/questions/41752581/…
    【解决方案2】:

    这并不完全正确,一个主题永远不会满,至少在默认情况下是这样。

    我说默认是因为就像@Mukesh 说的cleanup.policy 会在达到保留时间或大小限制时丢弃旧段,但默认情况下没有大小限制,只有时间限制和处理它的属性是 @ 987654322@(默认设置为-1)。

    它只会对消息设置时间限制,请注意retention.bytes 值是由分区设置的,因此要指定主题的限制,您必须乘以该主题的分区数。

    编辑: kafka 导出了大量指标(在 JMX 中),在这些指标中,您可以找到有关段的全局指标(总数、每个主题的数量、大小、滚动段的速率等......)。

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 1970-01-01
      • 2011-08-30
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      相关资源
      最近更新 更多