Kafaka .NET连接
Kafka目前主流在用的.NET客户端有两个:一个是kafka-net,另外一个是Confluent.Kafka,这里给出使用示例:
kafka-net示例:
public void Push()
{
var options = new KafkaOptions(new Uri("http://127.0.0.1:9092"));
var router = new BrokerRouter(options);
var producer = new Producer(router);
List<Message> msgArr = new List<Message>();
msgArr.Add(new Message("你好"));
producer.SendMessageAsync("Test", msgArr.ToArray()).Wait(3000);
}
public void Pull(string topic)
{
var options = new KafkaOptions(new Uri("http://127.0.0.1:9092"));
var router = new BrokerRouter(options);
var consumer = new Consumer(new ConsumerOptions("Test", router));
var msgs = consumer.Consume();
foreach (var msg in msgs)
{
Console.WriteLine(msg.Value);
}
}
Confluent.Kafka示例:
public static void Producter()
{
var config = new Dictionary<string, object>
{
{"bootstrap.servers","127.0.0.1:9092"}
};
using (var producer = new Producer<Null, string>(config, null, new StringSerializer(Encoding.UTF8)))
{
var dr = producer.ProduceAsync("Test", null, "hello").Result;
Console.WriteLine(dr.TopicPartitionOffset);
}
}
public static void Consume()
{
var config = new Dictionary<string, object>
{
{ "bootstrap.servers", "127.0.0.1:9092" }
};
using (var consumer = new Consumer<Null, string>(config, null, new StringDeserializer(Encoding.UTF8)))
{
consumer.OnMessage += (_, msg)
=> Console.WriteLine(msg.Value);
consumer.OnError += (_, error)
=> Console.WriteLine(error);
consumer.OnConsumeError += (_, msg)
=> Console.WriteLine(msg);
consumer.Subscribe("Test");
while (true)
{
consumer.Poll(TimeSpan.FromMilliseconds(100));
}
}
}