Не удается заставить производителя или потребителя консоли kafka работать

#amazon-ec2 #apache-kafka

#amazon-ec2 #apache-kafka

Вопрос:

Я смог заставить kafka нормально работать, когда я развернул его на своем локальном компьютере. Но когда я пытаюсь заставить его работать на экземпляре AWS, кажется, что ничего не работает правильно. Я попытался запустить свой собственный сервер и сделать то же самое, что я делал локально, запустив zookeeper и 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 amp;

bin/kafka-server-start.sh config/server.properties amp;
  

Я также пытался использовать 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, что что-то пошло не так? Но что?

Комментарии:

1. Для AWS или других компьютеров IaaS попробуйте установить advertised.listeners для своих клиентов

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

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

4. Это сработало, но вы должны были указать это как ответ, чтобы я мог его принять.

Ответ №1:

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

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