【问题标题】:How do I create a Kafka topic on the fly / on startup for the producer to send to?如何即时/启动时创建 Kafka 主题以供生产者发送?
【发布时间】:2021-02-10 04:49:06
【问题描述】:

我开始使用适用于 Kafka 的 Confluent .NET 库,并尝试实现我用于 Azure 服务总线的模式,以便在生产者应用程序启动时创建主题(如果不存在则创建)。这将如何在 Kafka API 中完成,是否可以完成?

这将允许主题成为源代码控制的一部分并在自动发布过程中进行配置,而不是手动设置每个主题/环境。另外,我希望我的开发人员不必去每个 Kafka 实例/环境并首先对其进行配置以匹配。

如果我不能这样做,我将不得不在发布过程中将其烘焙到 bash 脚本中,但更喜欢在启动代码中使用它。

【问题讨论】:

    标签: apache-kafka kafka-producer-api confluent-kafka-dotnet


    【解决方案1】:

    您可以启用集群范围的配置auto.create.topics.enable

    如果新的生产者尝试向尚不存在的主题发送数据,这将自动创建一个主题。

    但是,请注意以下几点:

    • 主题将使用复制、分区数和保留的默认设置创建。确保根据需要更改这些默认设置。无论如何,所有自动创建的主题都将具有相同的配置。
    • 生产者代码中主题名称配置中的拼写错误可能会导致不必要的主题创建。

    或者,您可以使用 AdminClient API。示例显示here

    static async Task CreateTopicAsync(string bootstrapServers, string topicName) { using (var adminClient = new AdminClientBuilder(new AdminClientConfig { BootstrapServers = bootstrapServers }).Build()) { try { await adminClient.CreateTopicsAsync(new TopicSpecification[] { new TopicSpecification { Name = topicName, ReplicationFactor = 1, NumPartitions = 1 } }); } catch (CreateTopicsException e) { Console.WriteLine($"An error occured creating topic {e.Results[0].Topic}: {e.Results[0].Error.Reason}"); } } }
    

    【讨论】:

    • 太棒了,迈克。现在看来,Confluent .NET API 页面对现有的管理客户端一无所知,这看起来是多么愚蠢,更不用说如此健壮了。
    • 有没有办法通过配置做到这一点?我正在寻找类似于 RabbitMQ 的“定义”文件的东西,可用于预加载主题、用户等。对于 IaC,如果可以避免的话,我宁愿不必编写 API 客户端代码。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    相关资源
    最近更新 更多