Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 使用合流Kafka dotnet连接到外部Kafka服务器失败_Apache Kafka_Confluent Kafka Dotnet - Fatal编程技术网

Apache kafka 使用合流Kafka dotnet连接到外部Kafka服务器失败

Apache kafka 使用合流Kafka dotnet连接到外部Kafka服务器失败,apache-kafka,confluent-kafka-dotnet,Apache Kafka,Confluent Kafka Dotnet,我需要使用.Net从外部服务器读取Kafka邮件。作为第一步,我在本地机器上安装了Kafka,然后编写了.Net代码。它起到了预期的作用。然后,我移动到云,但代码不起作用。这是我的设置 我在Azure上的Windows VM(VM1:10.0.0.4)上部署了一个Kafka服务器。它正在运行。我创建了一个测试主题,并用cmd生成了一些消息。为了测试一切正常,我用cmd打开了一个消费者并收到了生成的消息 然后我用VisualStudio部署了另一个Windows虚拟机(VM2,10.0.0.5)。

我需要使用.Net从外部服务器读取Kafka邮件。作为第一步,我在本地机器上安装了Kafka,然后编写了.Net代码。它起到了预期的作用。然后,我移动到云,但代码不起作用。这是我的设置

我在Azure上的Windows VM(VM1:10.0.0.4)上部署了一个Kafka服务器。它正在运行。我创建了一个测试主题,并用cmd生成了一些消息。为了测试一切正常,我用cmd打开了一个消费者并收到了生成的消息

然后我用VisualStudio部署了另一个Windows虚拟机(VM2,10.0.0.5)。这两个虚拟机都部署在同一个虚拟网络上,因此我不必担心打开端口或任何其他网络配置

然后,我复制了我的VisualStudio项目代码,然后将引导服务器的IP地址更改为指向Kafka服务器。当时它不起作用,我读到我必须更改Kafka的服务器配置,所以我打开了server.properties并将侦听器属性修改为
listeners=PLAINTEXT://10.0.0.4:9092
。它仍然不起作用

我在网上搜索并尝试了很多技巧,但都不起作用。我认为首先要向外部服务器(vm1)提供凭证,可能还有其他一些配置。不幸的是,这位官员非常简短,几乎没有例子。我的案例也没有例子。我在consumerconfig类中使用了“Sasl”属性,但也没有成功

错误消息是:

%3 | 1622220986.498 | FAIL | rdkafka#consumer-1 |[thrd:10.0.0.4:9092/引导]:10.0.0.4:9092/引导:连接到ipv4 | 10.0.0.4:9092失败:未知错误(在连接状态下21038ms后) 错误:10.0.0.4:9092/引导:连接到ipv4#10.0.0.4:9092失败:未知错误(在连接状态为21038ms后) 错误:1/1代理已关闭

以下是我的.Net核心代码:

static void Main(string[] args)
    {
        string topic = "AzureTopic";
        var config = new ConsumerConfig
        {
            BootstrapServers = "10.0.0.4:9092",
            GroupId = "test",
            //SecurityProtocol = SecurityProtocol.SaslPlaintext,
            //SaslMechanism = SaslMechanism.Plain,
            //SaslUsername = "[User]",
            //SaslPassword = "[Password]",
            AutoOffsetReset = AutoOffsetReset.Latest,
            //EnableAutoCommit = false
        };

        int x = 0;
        
        using (var consumer = new ConsumerBuilder<Ignore, string>(config)
             .SetErrorHandler((_, e) => Console.WriteLine($"Error: {e.Reason}"))
            .Build())
        {
            consumer.Subscribe(topic);
            var cancelToken = new CancellationTokenSource();

            while (true)
            {
                // some tasks
            }
            consumer.Close();
static void Main(字符串[]args)
{
字符串topic=“AzureTopic”;
var config=new ConsumerConfig
{
bootstrapserver=“10.0.0.4:9092”,
GroupId=“测试”,
//SecurityProtocol=SecurityProtocol.SaslPlaintext,
//SaslMechanism=SaslMechanism.简单,
//SaslUsername=“[User]”,
//SaslPassword=“[Password]”,
AutoOffsetReset=AutoOffsetReset.Latest,
//EnableAutoCommit=false
};
int x=0;
使用(var consumer=new ConsumerBuilder(配置)
.SetErrorHandler((\uE)=>Console.WriteLine($“错误:{e.Reason}”))
.Build())
{
消费者。订阅(主题);
var cancelToken=new CancellationTokenSource();
while(true)
{
//一些任务
}
consumer.Close();

如果将侦听器设置为硬编码的IP,它将只启动服务器绑定并接受到该IP的流量

而且您的侦听器未定义为SASL,因此我不确定您为什么尝试在客户端中使用它。虽然在向云资源发送数据时强烈鼓励使用凭据,但不需要修复网络连接问题。但是,您绝对不应该通过明文发送凭据

从这些设置开始

listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://10.0.0.4:9092
仅此一项就可以在VM共享网络中工作。您可以使用Kafka附带的控制台工具对其进行测试

如果您的本地客户端仍然无法实现这一点,那是因为
10.0.0.0/8
地址空间被视为专用网络,您必须公布VM的公共IP,并允许通过Azure防火墙在端口9092上进行TCP通信。公开内部Azure网络和外部转发网络的多个侦听器也是有意义的网络流量

讨论AWS和Docker,但基础知识仍然适用


总的来说,我认为使用Kafka支持安装Azure EventHub会更容易些

谢谢你的回答!我已经尝试了广告的侦听器,并且再次尝试,它确实有效。我也尝试了公共和开放端口9092,但它也不起作用。没有防火墙设置。我必须设置一个并允许该端口吗?EventHubs是一个很好的替代方案,但它希望达到预期目的。我们希望稍后在容器上部署代码,并保持独立于云提供商!因此它确实起作用了吗?如果没有,您是否阅读了链接的博客并查看了kafkacat的调试步骤?此外,您的基础设施设置代码已经是特定于云的;容器在l您开始在部署中利用依赖于云验证服务的验证步骤。实际上,我没有在链接文章中使用多个侦听器执行该步骤,我打算下一步尝试,但我怀疑问题在于防火墙设置-只是想首先确定。我没有使用Kafkacat,但检查了它与PowerShell的连接(命令>文本网络连接[host]-p 9092).PowerShell告诉我Ping成功,但端口9092上的TCP连接失败。因此我认为问题在于网络配置。无论如何,我明天将运行Kafkacat调试器,并让您知道:)。端口检查是一个很好的第一步,但不是全部。您在那里检查的是
侦听器
具有打开端口,引导请求将得到响应。如果返回的
已播发,则没有powershell工具可以响应。侦听器
地址可以连接到,这就是
kafkacat-L
数据显示的内容(然后您可以使用刚才提到的命令连接集群中的各个代理)也许,我们将转向融合云。因此,希望我不必重复所有这些痛苦的配置。但是,我读了这篇文章,它非常有用,我确实理解我必须配置什么才能从中获取数据