如何使用kafka-net在c#中创建新主题

时间:2017-09-13 16:15:54

标签: c# .net apache-kafka

我有 HomeController ,如下所示,

#region Properties

const string topic = "AnotherTestTopic";
const string host = "http://localhost:9092";

#endregion


[HttpPost]
public ActionResult Save(FormCollection form)
{
    var kafkaOptions = new KafkaOptions(new Uri(host));

    var brokerRouter = new BrokerRouter(kafkaOptions);

    var producer = new Producer(brokerRouter);

    producer.SendMessageAsync(topic, new[] { new Message("Test message") }).Wait();

    return RedirectToAction("Index", "Home");
}

我正在使用kafka-net dll和我的 SendMessageAsync 方法,如下所示

   public async Task<List<ProduceResponse>> SendMessageAsync(string topic, IEnumerable<Message> messages, Int16 acks = 1,
            TimeSpan? timeout = null, MessageCodec codec = MessageCodec.CodecNone)
        {
            if (_stopToken.IsCancellationRequested)
                throw new ObjectDisposedException("Cannot send new documents as producer is disposing.");
            if (timeout == null) timeout = TimeSpan.FromMilliseconds(DefaultAckTimeoutMS);

            var batch = messages.Select(message => new TopicMessage
            {
                Acks = acks,
                Codec = codec,
                Timeout = timeout.Value,
                Topic = topic,
                Message = message
            }).ToList();

            _asyncCollection.AddRange(batch);

            await Task.WhenAll(batch.Select(x => x.Tcs.Task));

            return batch.Select(topicMessage => topicMessage.Tcs.Task.Result)
                                .Distinct()
                                .ToList();
        }

问题:

我刚开始学习kafka。我真的不知道如何从c#代码创建主题。如何从c#添加主题?

任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以在代理配置中设置auto.create.topics.enable=true,让Kafka在以前没有创建主题时为您创建主题。

您可能还希望在代理配置中将num.partitionsdefault.replication.factor设置为适当的值。