Confluent.Kafka连接Azure Event Hubs出现未知连接错误问题
问题场景
- 已部署Azure Event Hubs实例,实例下创建名为
test的事件中心 - 使用官方原生客户端
Azure.Messaging.EventHubs时,可正常连接实例并发布消息 - 使用v1.1.0版本
Confluent.Kafka客户端连接时抛出错误:Unknown error (after 21286ms in state CONNECT) - 客户端输出错误日志:
%3|1655301022.374|ERROR|rdkafka#producer-1|[thrd:sasl_plaintext://my-event-hub-namespace.servicebus.windows.net:9093/bootstra]:1/1 brokers are down
原问题使用的客户端配置代码
var config = new ProducerConfig { BootstrapServers = "my-eventhub-namespace.servicebus.windows.net:9093", SecurityProtocol = SecurityProtocol.SaslSsl, SaslMechanism = SaslMechanism.Plain, SaslUsername = "$ConnectionString", SaslPassword = "Endpoint=sb://my-eventhub-namespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=MySharedAccessKey==", }; using (var producer = new ProducerBuilder<long, string>(config).SetKeySerializer(Serializers.Int64).SetValueSerializer(Serializers.Utf8).Build()) {
问题根因
- 上述客户端配置本身完全符合Azure Event Hubs Kafka兼容层的参数要求,不存在配置逻辑错误
- 连接失败的核心原因是网络限制:
- 官方原生
Azure.Messaging.EventHubs客户端默认通过WebSockets协议(走443端口)建立连接,可正常穿过当前环境的防火墙/网络安全规则 - Confluent.Kafka客户端默认使用原生Kafka协议,通过9093端口与Event Hubs建立TCP连接,当前环境拦截了该端口的出站请求,导致连接阶段超时,最终上报所有broker不可用的错误
- 官方原生
修复方案
- 联系网络管理员调整安全规则,放通客户端运行环境到目标Event Hubs命名空间9093端口的出站TCP访问,放通后原有代码可直接正常运行
- 若无法开放9093端口,可修改Confluent.Kafka客户端配置,启用WebSockets传输模式,走443端口通信,复用官方客户端的连通路径即可绕过网络限制
内容的提问来源于stack exchange,提问作者Binary Worrier
相关产品推荐
相关产品推荐

