Why I cannot connect to Kafka from outside?
In the Kafka FAQ (updated for new properties) you can read:
When a broker starts up, it registers its ip/port in ZK. You need to make sure the registered ip is consistent with what's listed in
bootstrap.servers
in the producer config. By default, the registered ip is given byInetAddress.getLocalHost.getHostAddress()
. Typically, this should return the real ip of the host. However, sometimes (e.g., in EC2), the returned ip is an internal one and can't be connected to from outside. The solution is to explicitly set the host ip and port to be registered in ZK by setting theadvertised.listeners
property inserver.properties
.
I solved this problem, by setting advertised.host.name
in server.properties
and metadata.broker.list
in producer.properties
to public IP address and host.name
to 0.0.0.0
.
The easiest way how to reach your Kafka server (version kafka_2.11-1.0.0) on EC2 from consumer in external network is to change the properties file
kafka_2.11-1.0.0/config/server.properties
And modify the following line
listeners=PLAINTEXT://ec2-XXX-XXX-XXX-XXX.eu-central-1.compute.amazonaws.com:9092
Using your public address
Verified on 2.11-2.0.0