2016-10-20 8 views
1

Я смог заставить kafka нормально работать, когда я развернул ее на своей локальной машине. Но когда я пытаюсь заставить его работать над экземпляром AWS, похоже, что все работает правильно. Я пытался спиннинг свой собственный сервер и делать так же, как я на месте раскручивается зоопарка и Кафки, как такНевозможно получить продюсера или потребительскую консоль kafka

curl http://apache.spinellicreations.com/kafka/0.10.0.0/kafka_2.11-0.10.0.0.tgz | tar -xzf 

cd kafka_2.11-0.10.0.0 

bin/zookeeper-server-start.sh config/zookeeper.properties & 

bin/kafka-server-start.sh config/server.properties & 

Я также попытался с помощью AMI от bitami который, кажется, все в один AMI. Создание темы, похоже, отлично работает. Но когда я пытаюсь запустить консоль производителя, я получаю сообщение об ошибке

SEASPAULSON-MAC:kafka_2.11-0.10.0.0 spaulson$ bin/kafka-console-producer.sh --broker-list ec2-54-186-31-109.us-west-2.compute.amazonaws.com:9092 --topic test 
blah 
[2016-10-20 12:13:23,395] ERROR Error when sending message to topic test with key: null, value: 4 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback) 
org.apache.kafka.common.errors.TimeoutException: Batch containing 1 record(s) expired due to timeout while requesting metadata from brokers for test-0 

Я также получаю сообщение об ошибке при попытке запустить консоль потребителя, который повторяется снова и снова.

bin/kafka-console-consumer.sh --zookeeper ec2-54-186-31-109.us-west-2.compute.amazonaws.com:2181 --topic test --from-beginning 


[2016-10-19 18:26:47,175] WARN Fetching topic metadata with correlation id 152 for topics [Set(test)] from broker [BrokerEndPoint(0,ip-172-31-52-58.ec2.internal,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:80) 
     at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:79) 
     at kafka.producer.SyncProducer.send(SyncProducer.scala:124) 
     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) 

Я чувствую, что такие операции должны быть тривиальными, но это очень сложно. У меня возникли проблемы с поиском документации о том, как диагностировать проблемы и выяснить, что происходит. Лучшее, что я нашел, это команда

KAFKA_HOME/bin/kafka-topics.sh --describe --topic test --zookeeper ec2-54-186-31-109.us-west-2.compute.amazonaws.com:2181 
Topic:test  PartitionCount:1  ReplicationFactor:1  Configs: 
     Topic: test  Partition: 0 Leader: 0  Replicas: 0  Isr: 0 

Ли лидер: 0 указывает, что что-то пошло не так? Но что?

+0

Для AWS или других машин IaaS попробуйте установить рекламируемые.listeners для ваших клиентов. – amethystic

+0

Мне нужно настроить рекламируемых слушателей на клиенте? Как в машине, с которой я пытаюсь подключиться? Я думал, что указать его в качестве аргумента для сценария оболочки будет достаточно. –

+1

Это конфигурация брокера, которая должна быть установлена ​​в «server.properties». Затем перезапустите брокеров. – amethystic

ответ

2

Для AWS или любых других машин IaaS вы должны установить для клиентов «advertised.listeners». Вот что это означает в документе Kafka:

Слушатели публикуют в ZooKeeper для клиентов, если они отличаются от слушателей выше. В средах IaaS это может отличаться от интерфейса, к которому привязывается брокер. Если это не задано, будет использоваться значение для listeners.

Смежные вопросы