卡夫卡 - 得到滞后

时间:2018-04-09 07:00:30

标签: node.js apache-kafka

我正在使用“node-rdkafka”npm模块来编写用Nodejs编写的分布式服务架构。我们有一个计量用例,我们只允许每n秒消耗和处理一定数量的消息。例如,“主要”主题有100个消息由生产者推送,“worker”每30秒消耗一次主要主题。用例的故事还有很多。

我遇到的问题是我需要通过progamatically获得给定主题(所有分区)的滞后。

我有办法做到这一点吗?

我知道我可以使用“bin / kafka-consumer-groups.sh”来访问我需要的一些数据,但还有另外一种方法吗?

提前谢谢

2 个答案:

答案 0 :(得分:2)

您可以通过以下几种方法直接从node-rdkafka客户端检索该信息:

  • 客户指标:

    客户端可以按定义的时间间隔发出包含当前和已提交的偏移以及结束偏移的指标,以便您可以轻松计算滞后。

    首先,您需要在客户端配置中设置'statistics.interval.ms': 5000来启用指标事件。然后在event.stats事件上设置一个监听器:

    consumer.on('event.stats', function(stats) {
        console.log(stats);
    });
    

    完整的统计信息记录在https://github.com/edenhill/librdkafka/wiki/Statistics上,但您可能最感兴趣的是分区统计信息:https://github.com/edenhill/librdkafka/wiki/Statistics#partitions

  • 查询群集的偏移量:

    您可以使用queryWatermarkOffsets()检索分区的第一个和最后一个偏移量。

    consumer.queryWatermarkOffsets(topicName, partition, timeout, function(err, offsets) {
        var high = offsets.highOffset;
        var low = offsets.lowOffset;
    });
    

    然后使用消费者的当前位置(position())或已提交(committed())偏移量来计算延迟。

答案 1 :(得分:1)

Kafka曝光"记录 - 滞后 - 最大" mbean是jmx分区滞后的最大记录,所以你可以得到查询这个mbean的滞后

详细参阅下面的文档,了解暴露的jmx mbean。 https://docs.confluent.io/current/kafka/monitoring.html#consumer-group-metrics