Проблемы с публикацией сообщений при работе kafka на mesos DCOS

У меня есть небольшой кластер под управлением DCOS. Я могу успешно установить kafka, следуя этому руководство. Бег

$ dcos kafka connection

дает

{
  "address": [
    "10.131.17.126:9475",
    "10.131.24.6:9655",
    "10.131.14.192:9181"
  ],
  "zookeeper": "master.mesos:2181/dcos-service-kafka",
  "dns": [
    "broker-0.kafka.mesos:9475",
    "broker-1.kafka.mesos:9655",
    "broker-2.kafka.mesos:9181"
  ]
}

Я могу создавать темы, и я проверил zookeeper с помощью инструмента cli, и состояние кажется хорошим.

get /dcos-service-kafka/brokers/ids/0
{"jmx_port":-1,"timestamp":"1474206074029","endpoints":["PLAINTEXT://10.131.17.126:9475"],"host":"10.131.17.126","version":3,"port":9475}
get /dcos-service-kafka/brokers/ids/1
{"jmx_port":-1,"timestamp":"1474206120002","endpoints":["PLAINTEXT://10.131.24.6:9655"],"host":"10.131.24.6","version":3,"port":9655}
get /dcos-service-kafka/brokers/ids/2
{"jmx_port":-1,"timestamp":"1474206122985","endpoints":["PLAINTEXT://10.131.14.192:9181"],"host":"10.131.14.192","version":3,"port":9181}

Однако, когда я пытаюсь опубликовать

echo "Hello, World." | ./kafka-console-producer.sh --broker-list 10.131.17.126:9475, 10.131.24.6:9655, 10.131.14.192:9181 --topic topic1

я получил

[2016-09-18 18:49:32,909] ERROR Error when sending message to topic topic1 with key: null, value: 13 bytes with error: Failed to update metadata after 60000 ms. (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)

Я подозреваю, что это может быть как-то связано с частными и общедоступными IP-адресами и, возможно, host.name в server.properties.

Может ли кто-нибудь дать несколько предложений относительно того, как я могу отладить (и, надеюсь, исправить!) проблему, чтобы я мог успешно публиковать сообщения?

Спасибо

AJ


person Andy Johnson    schedule 18.09.2016    source источник


Ответы (2)


Обновление — похоже, это было вызвано отсутствием записей в /etc/hosts. Я обновил свой скрипт terraform, чтобы записать их во время установки, и приведенный выше пример теперь работает, как и ожидалось.

Спасибо за вашу помощь

person Andy Johnson    schedule 28.09.2016
comment
Большой! Рад, что вы нашли решение. Извините, я не мог больше помочь. - person Gabriel; 29.09.2016

Изменить: для тех, кто смотрит в будущее. Это была проблема в /etc/hosts, вызванная скриптом terraform< /а>.

Ваше подозрение верно. Это частные IP-адреса, которые нельзя адресовать извне кластера. Чтобы общаться с Kafka, вам нужно либо настроить VPN так, чтобы эти IP-адреса стали доступными, либо запустить команду публикации на машине в кластере.

Кроме того, похоже, что вы используете версию DC/OS более раннюю, чем 1.8. Если вы используете 1.8, вы получите более простую в использовании конечную точку брокера, независимо от динамически назначаемых IP-адресов. Вы можете использовать именованный виртуальный IP-адрес broker.kafka.l4lb.thisdcos.directory:9092, однако он доступен только для машин в кластере.

Настройка haproxy или nginx для указания на именованный виртуальный IP-адрес также является способом получить легкий внешний доступ к службе (в данном случае Kafka), работающей в кластере DC/OS. Вы хотели бы убедиться, что эти прокси работают на общедоступном агенте. Подробнее см. здесь.

Вот пример установки, создания и использования из установки Kafka по умолчанию:

~ $ dcos package install kafka
Installing Marathon app for package [kafka] version [1.1.11-0.10.0.0]
Installing CLI subcommand for package [kafka] version [1.1.11-0.10.0.0]
New command available: dcos kafka
DC/OS Kafka Service is being installed.

        Documentation: https://docs.mesosphere.com/usage/services/kafka/
        Issues: https://docs.mesosphere.com/support/
~ $ dcos kafka connection
{
  "address": [
    "10.0.3.64:9951",
    "10.0.3.68:9795",
    "10.0.3.66:9531"
  ],
  "zookeeper": "master.mesos:2181/dcos-service-kafka",
  "dns": [
    "broker-0.kafka.mesos:9951",
    "broker-1.kafka.mesos:9795",
    "broker-2.kafka.mesos:9531"
  ],
  "vip": "broker.kafka.l4lb.thisdcos.directory:9092"
}
~ $ dcos kafka topic create topic0
{
  "message": "Output: Created topic \"topic0\".\n"
}
~ $ dcos node ssh --master-proxy --leader
core@ip-10-0-7-56 ~ $ wget http://download.nextag.com/apache/kafka/0.10.0.1/kafka_2.11-0.10.0.1.tgz
core@ip-10-0-7-56 ~ $ tar xf kafka_2.11-0.10.0.1.tgz
core@ip-10-0-7-56 ~ $ cd kafka_2.11-0.10.0.1
core@ip-10-0-7-56 ~/kafka_2.11-0.10.0.1 $ bin/kafka-console-producer.sh --broker-list broker.kafka.l4lb.thisdcos.directory:9092 --topic topic0
This is a message
This is another message
^Ccore@ip-10-0-7-56 ~/kafka_2.11-0.10.0.1 $ bin/kafka-console-consumer.sh --zookeeper master.mesos:2181/dcos-service-kafka --topic topic0 --from-beginning
This is a message
This is another message
^CProcessed a total of 2 messages
$ bin/kafka-console-producer.sh --broker-list 10.0.3.64:9951,10.0.3.68:9795,10.0.3.66:9531 --topic topic0
foo
bar
baz
^Ccore@ip-10-0-7-56 ~/kafka_2.11-0.10.0.1 $ bin/kafka-console-consumer.sh --zookeeper master.mesos:2181/dcos-service-kafka --topic topic0 --from-beginning
This is a message
This is another message
foo
bar
baz
^CProcessed a total of 5 messages
person Gabriel    schedule 21.09.2016
comment
Обновился до 1.8, спасибо. Я подключаюсь по ssh к одному из узлов брокера в соответствии с руководством пользователя dcos node ssh --master-proxy --leader. Я могу пропинговать все внутренние порты оттуда и из док-контейнера - person Andy Johnson; 22.09.2016
comment
Должен добавить, что он все еще не работает. Не уверен, что использование VPN исправит это, поправьте меня, если я ошибаюсь. - person Andy Johnson; 23.09.2016
comment
Спасибо за вашу помощь. К сожалению, это все еще не работает для меня. Если я выполню те же шаги, что и вы выше, я получу: - person Andy Johnson; 28.09.2016