【发布时间】:2023-02-01 22:24:30
【问题描述】:
我无法从 .net 连接到 Kafka 服务器。我们有 truststore.jks 文件,我们使用以下命令创建 .pem 文件
keytool -exportcert -alias $alias -keystore $keyStore -rfc -file $outputFolder/certificate.pem -storepass $password
echo "Generating key.pem"
keytool -v -importkeystore -srckeystore $keyStore -srcalias $alias -destkeystore $outputFolder/cert_and_key.p12 -deststoretype PKCS12 -storepass $password -srcstorepass $password
openssl pkcs12 -in $outputFolder/cert_and_key.p12 -nodes -nocerts -out $outputFolder/key.pem -passin pass:$password
echo "Generating CARoot.pem"
keytool -exportcert -alias $alias -keystore $keyStore -rfc -file $outputFolder/CARoot.pem -storepass $password
我的 .net 生产者配置如下所示
ProducerConfig config = new ProducerConfig
{
BootstrapServers = bootstrapServers,
SecurityProtocol = SecurityProtocol.Ssl,
SslCaLocation = @"C:\Users\ProduceKafkaMessages\CARoot\CARoot.pem"
};
using (var producer = new ProducerBuilder<Null, string>(config).Build())
{
try
{
var deliveryStatus = producer.ProduceAsync(topicName, new Message<Null, string> { Value = KafkaMessage }).Result;
//producer.Flush(TimeSpan.FromSeconds(10));
}
catch (Exception ex)
{
}
}
但每次它都会抛出异常为“本地:消息超时”。 这里服务器上的配置是“没有启用任何 ACL 的启用 SSL 的 Kafka”。
我在 Python 中尝试过同样的事情,我能够成功发送 kafka 主题。下面是python代码
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=kafkaBrokers,
security_protocol='SSL',
ssl_cafile='CARoot.pem',
ssl_password="XXXXX")
producer.send(topic, bytes('hello','utf-8'))
producer.flush()
为什么它在 .net 中不起作用。有什么帮助吗?
【问题讨论】:
标签: c# .net apache-kafka confluent-platform confluent-kafka-dotnet