Yuto Kawamura created KAFKA-4116: ------------------------------------ Summary: Specifying 0.0.0.0 in "listeners" doesn't work Key: KAFKA-4116 URL: https://issues.apache.org/jira/browse/KAFKA-4116 Project: Kafka Issue Type: Bug Components: core Affects Versions: 0.10.0.1, 0.9.0.1 Reporter: Yuto Kawamura Assignee: Yuto Kawamura Fix For: 0.10.0.2
The document of {{listeners}} says: "Specify hostname as 0.0.0.0 to bind to all interfaces." However when I give config such as below, a started kafka broker can't join the cluster due to invalid address advertised on zk. {code} listeners=PLAINTEXT://0.0.0.0:9092 # advertised.listeners= {code} This is because of: - {{advertised.listeners}} which is used as an address to publish on zk defaults to {{listeners}} - KafkaHealthcheck#register isn't considering the host "0.0.0.0" as a special case : https://github.com/apache/kafka/blob/8f3462552fa4d6a6d70a837c2ef7439bba512657/core/src/main/scala/kafka/server/KafkaHealthcheck.scala#L60-L61 h3. Proof Test environment: - kafka-broker version 0.10.1.0-SNAPSHOT(build from trunk) - Brokers HOST-A, HOST-B, HOST-C - Controller: HOST-A - topic-A has 3 replicas, 3 partitions Update HOST-B's server.properties with updating listeners to below and restart the broker. {code} listeners=PLAINTEXT://0.0.0.0:9092 {code} Then HOST-B registeres it's broker info to ZK path {{/brokers/ids/2}}, but "0.0.0.0" is used as it's host: {code} [zk: ZKHOST1:2181,ZKHOST2:2181,ZKHOST3:2181/kafka-test(CONNECTED) 8] get /brokers/ids/2 {"jmx_port":12345,"timestamp":"1472796372181","endpoints":["PLAINTEXT://0.0.0.0:9092"],"host":"0.0.0.0","version":3,"port":9092} {code} Controller tries to send an request to the above address but of course it will never reach to the HOST-B. controller.log: {code} [2016-09-02 15:06:12,206] INFO [Controller-1-to-broker-2-send-thread], Controller 1 connected to 0.0.0.0:9092 (id: 2 rack: null) for sending state change requests (kafka.controller.RequestSendThread) {code} I'm guessing maybe controller sending a request to itself(kafka broker working on the same instance), as calling connect("0.0.0.0") results to connect to localhost, which sounds scary but havn't digged into. So the ISR won't recovered even through a broker starts up. {code} ./kafka-topics.sh ... --describe --topic topic-A Topic:topic-A PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=86400000,min.insync.replicas=2 Topic: topic-A Partition: 0 Leader: 3 Replicas: 3,2,1 Isr: 1,3 Topic: topic-A Partition: 1 Leader: 1 Replicas: 1,3,2 Isr: 1,3 Topic: topic-A Partition: 2 Leader: 1 Replicas: 2,1,3 Isr: 1,3 {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)