为什么我不能从外面连接到卡夫卡?

sms*_*190 37 amazon-ec2 apache-kafka

我在ec2实例上运行kafka.因此,amazon ec2实例有两个ips,一个是内部ip,第二个是外部使用.

我从本地机器创建了生产者,但它重定向到内部ip并给我连接失败错误.任何人都可以帮我在ec2实例上配置kafka,这样我就可以从本地机器运行生产者了.我尝试了很多组合,但没有奏效.

Lun*_*ahl 37

Kafka常见问题解答中,您可以阅读:

当代理启动时,它会在ZK中注册其ip/port.您需要确保已注册的ip与metadata.broker.list生产者配置中列出的内容一致.默认情况下,注册的ip由InetAddress.getLocalHost.getHostAddress().通常,这应该返回主机的真实IP.但是,有时(例如,在EC2中),返回的ip是内部ip,不能​​从外部连接.解决方案是通过设置host.name属性来显式设置要在ZK中注册的主机IP server.properties.在另一种罕见的情况下,绑定主机/端口与用于客户端连接的主机/端口不同,您可以设置advertised.host.nameadvertised.port用于客户端连接.

  • 只是想注意在server.properties中提到的hostname属性被调用:`host.name = <external-ip>` (5认同)
  • 我很少见:`在另一种罕见的情况下,绑定主机/端口与客户端连接的主机/端口不同,您可以设置advertised.host.name和advertised.port以进行客户端连接.我该怎么做呢? (2认同)
  • `host.name`是[已弃用](https://kafka.apache.org/documentation.html#brokerconfigs) - 和`advertised.host.name`和`advertised.port`一样 (2认同)

sms*_*190 35

我解决了这个问题,通过设置advertised.host.nameserver.propertiesmetadata.broker.listproducer.properties公共IP地址,并host.name0.0.0.0.


小智 16

我刚刚在AWS中做到了这一点.首先让Kafka服务器使用host.name监听正确的接口/ IP.对于您的情况,这将是内部IP,而不是localhost,因为您的意图是外部Kafka客户端连接.任何本地客户端都需要使用相同的地址,而不是localhost.

然后将advertised.host.name设置为主机名,而不是IP地址.诀窍是让主机名始终解析为内部和外部机器的正确IP.我在里面使用/ etc/hosts和在外面使用DNS.在这里查看我关于Kafka和名称解析的完整答案.


Pet*_*ncz 14

如何从外部网络中的消费者访问EC2上的Kafka服务器(版本kafka_2.11-1.0.0)的最简单方法是更改​​属性文件

kafka_2.11-1.0.0/config/server.properties
Run Code Online (Sandbox Code Playgroud)

并修改以下行

listeners=PLAINTEXT://ec2-XXX-XXX-XXX-XXX.eu-central-1.compute.amazonaws.com:9092
Run Code Online (Sandbox Code Playgroud)

使用您的公共地址

在2.11-2.0.0上验证


小智 6

如果你想从局域网访问,请更改以下2个文件-

  1. config/server.properties

    advertised.listeners=PLAINTEXT://server.ip.in.lan:9092
    
    Run Code Online (Sandbox Code Playgroud)
  2. config/producer.properties

    bootstrap.servers=server.ip.in.lan:9092
    
    Run Code Online (Sandbox Code Playgroud)

就我而言,该server.ip.in.lan值是192.168.15.150