首页 > 解决方案 > Confluent Kafka如何在不订阅的情况下获取特定主题元数据

问题描述

我使用一些代码来确定读取偏移量和最大值之间的差异。内部诊断需要它,例如,如果差异低于“基线”值 - 所以,读取速度很好。

提供的代码示例效果很好,但我应该知道主题的分区数。并且,稍后获取主题中每个分区的最大偏移值。

如何在不订阅主题的情况下获取主题元数据?

类似:主题“TestTopic”有 4 个分区。

    public async Task MaxOffsetValues()
    {
        // just for tests
        // ToDo: use config from settings

        while (true)
        {
            var topicName = "testTopic";
            var config = new ConsumerConfig
            {
                BootstrapServers = "192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092",
                GroupId = Guid.NewGuid().ToString(),
                ClientId = Dns.GetHostName(),
                EnableAutoCommit = false,
            };

            using (var consumer = new ConsumerBuilder<Ignore, string>(config).Build())
            {
                var offsetBorders = consumer.QueryWatermarkOffsets(new TopicPartition(topicName, 0), TimeSpan.FromSeconds(10));
                _log.Debug($"[Diagnostic] Topic: ({topicName}), Partition: ({0}) Minimal offset: ({offsetBorders.Low}) Maximum offset: ({offsetBorders.High})");
            }

            await Task.Delay(TimeSpan.FromSeconds(60));
        }
    }

标签: apache-kafkametadataconfluent-platform

解决方案


如果您正在寻找程序化和非程序化方式来获取元数据,那么您可以通过 3 种方式获取有关某个主题的信息,而无需订阅它。

  1. 管理客户端(https://kafka.apache.org/23/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html
  2. 如果您有权访问 confluent-control-center,那么它确实会显示有关主题的元数据。
  3. 您还可以使用 Kafka-topics.sh CLI 工具

推荐阅读