This is similar to my previous post, only now the question is, how do you connect to a Kafka server using dotnet and SASL_SSL? This is how:
// based on https://github.com/confluentinc/confluent-kafka-dotnet/blob/v1.0.0/examples/Producer/Program.cs
using Confluent.Kafka;
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace Confluent.Kafka.Examples.ProducerExample
{
public class Program
{
public static async Task Main(string[] args)
{
string topicName = "test-topic";
var config = new ProducerConfig {
BootstrapServers = "kafka-server.example.com:19094",
SecurityProtocol = SecurityProtocol.SaslSsl,
SslCaLocation = "ca-cert",
SaslMechanism = SaslMechanism.Plain,
SaslUsername = "USERNAME",
SaslPassword = "PASSWORD",
Acks = Acks.Leader,
CompressionType = CompressionType.Lz4,
};
using (var producer = new ProducerBuilder<string, string>(config).Build())
{
for (int i = 0; i < 1000000; i++)
{
var message = $"Event {i}";
try
{
// Note: Awaiting the asynchronous produce request
// below prevents flow of execution from proceeding
// until the acknowledgement from the broker is
// received (at the expense of low throughput).
var deliveryReport = await producer.ProduceAsync(topicName, new Message<string, string> { Key = null, Value = message } );
// Console.WriteLine($"delivered to: {deliveryReport.TopicPartitionOffset}");
// Let's not await then
// producer.ProduceAsync(topicName, new Message<string, string> { Key = null, Value = message } );
// Console.WriteLine($"Event {i} sent.");
}
catch (ProduceException<string, string> e)
{
Console.WriteLine($"failed to deliver message: {e.Message} [{e.Error.Code}]");
}
}
// producer.Flush(TimeSpan.FromSeconds(120));
// Since we are producing synchronously, at this point there will be no messages
// in-flight and no delivery reports waiting to be acknowledged, so there is no
// need to call producer.Flush before disposing the producer.
}
}
}
}
Since I am a total .NET newbie, I usually docker run -it --rm microsoft/dotnet
and experiment from there.