有没有办法检查是否所有代理都已在Kafka中启动并运行?

时间:2019-01-04 13:08:36

标签: .net apache-kafka confluent-kafka

我正在为我的C#发布者和使用者应用程序使用Confluent.kafka。在发布或使用任何消息之前,我想检查所有代理(端点)是否已启动并正在运行。

我已经找到了一些有关它的文章,但是大多数文章不是结论性的,或者它们是针对Java的,我专门在寻找.net。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您知道集群中应该有多少个代理人,则可以使用AdminClient列出卡夫卡控制器知道的所有代理人

using (var adminClient = new AdminClient(new AdminClientConfig { BootstrapServers = brokerList }))
{
    var meta = adminClient.GetMetadata(TimeSpan.FromSeconds(20));
    Console.WriteLine($"{meta.OriginatingBrokerId} {meta.OriginatingBrokerName}");
    meta.Brokers.ForEach(broker =>
        Console.WriteLine($"Broker: {broker.BrokerId} {broker.Host}:{broker.Port}"));

来源-https://github.com/confluentinc/confluent-kafka-dotnet/blob/master/examples/AdminClient/Program.cs

但是,您实际上只需要检查存在主题副本的代理的子集(即描述主题并检查副本数),并且根本没有可用的Controller(如果存在AdminClient返回的数据)...生产者和使用者已经提供了有关无法建立连接的异常详细信息。