2015-12-14 18 views
8

Ho appena iniziato con Apache Kafka/Zookeeper e ho riscontrato problemi durante la configurazione di un cluster su AWS. Attualmente ho tre server:Apache Kafka: impossibile aggiornare i metadati/java.nio.channels.ClosedChannelException

Uno Zookeeper in esecuzione e due in esecuzione Kafka.

Posso avviare i server Kafka senza problemi e posso creare argomenti su entrambi. Tuttavia, il problema viene quando provo ad iniziare un produttore su una macchina e un consumatore, dall'altro:

sul produttore Kafka:

kafka-console-producer.sh --broker-list <kafka server 1 aws public dns>:9092,<kafka server 2 aws public dns>:9092 --topic samsa 

sul consumatore Kafka:

kafka-console-consumer.sh --zookeeper <zookeeper server ip>:2181 --topic samsa 

Digito un messaggio sul produttore ("ciao") e non succede nulla per un po '. Poi ricevo questo messaggio:

ERROR Error when sending message to topic samsa with key: null, value: 2 bytes 
with error: Failed to update metadata after 60000 ms. 
(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) 

Dal punto di vista del consumatore ottengo questo messaggio, che si ripete periodicamente:

WARN Fetching topic metadata with correlation id # for topics [Set(samsa)] from broker [BrokerEndPoint(<broker.id>,<producer's advertised.host.name>,9092)] failed (kafka.client.ClientUtils$) 
java.nio.channels.ClosedChannelException 
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:110) 
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:75) 
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:74) 
    at kafka.producer.SyncProducer.send(SyncProducer.scala:119) 
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:59) 
    at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:94) 
    at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:66) 
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63) 

Dopo un po ', il produttore sarà quindi avviare rapidamente lanciando questo messaggio di errore con # crescente in modo incrementale:

WARN Error while fetching metadata with correlation id # : {samsa=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient) 

Non so da dove andare. Fammi sapere se sono necessari ulteriori dettagli sui miei file di configurazione

risposta

10

Questo era un problema di configurazione.

Al fine di farlo funzionare diverse modifiche al config file doveva accadere:

In config/server.properties su ciascun server Kafka:

  • host.name: <Public IP>
  • advertised.host.name: <AWS Public DNS Address>

In config/producer.properties su ogni server Kafka:

  • metadata.broker.list: <Producer Server advertised.host.name>:<Producer Server port>,<Consumer Server advertised.host.name>:<Consumer Server port>

in/etc/hosts su ciascun server Kafka, cambiano 127.0.0.1 localhost localhost.localdomain a:

<Public IP> localhost localhost.localdomain 
+0

@kellanburker Devo riavviare i servizi dopo la modifica 'file/etc/hosts'? –