наберите tcp: lookup ip-xx-xx.ec2.internal: такого хоста нет - PullRequest
1 голос
/ 24 марта 2020

Я использую пакет github.com/Shopify/sarama для взаимодействия с Kafka. В моем текущем подходе я мог подключиться к брокеру и получить все топи c имена без проблем (код потребителя ниже) .

Однако, когда я пытаюсь удалить некоторые топи c с помощью клиента администратора (Код администратора ниже) , я получаю "dial tcp: lookup ip-xx-xx.ec2.internal : нет такого хоста "ошибка.

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

Потребитель


    config := sarama.NewConfig()
    config.Consumer.Return.Errors = true

    //get broker
    cluster, err := sarama.NewConsumer("localhost:9092", config)
    if err != nil {
        panic(err)
    }

    defer func() {
        if err := cluster.Close(); err != nil {
            panic(err)
        }
    }()

    //get all topic from cluster
    topics, _ := cluster.Topics()

Администратор


    config := sarama.NewConfig()
    config.Consumer.Return.Errors = true

    config.Version = sarama.V2_4_0_0

    //admin broker
    admin, err := sarama.NewClusterAdmin("localhost:9092", config)
    if err != nil {
        panic(err)
    }


    defer func() {
        if err := admin.Close(); err != nil {
            panic(err)
        }
    }()

    topic := []string{"test-topic"}
    output := admin.DeleteTopic(topic)

    if output == nil {
        fmt.Printf(" delete -  %s\n", topic[0])
    } else {
        fmt.Println(output)
    }

Примечание Я подключаюсь через бастионный экземпляр к пульту, перенаправляя s sh порты.


Обновление

после установки sarama.Logger = log.New(os.Stdout, "[sarama] ", log.LstdFlags) Я получаю следующее:

[sarama] 2020/03/25 02:08:03 Initializing new client
[sarama] 2020/03/25 02:08:03 client/metadata fetching metadata for all topics from broker localhost:9092
[sarama] 2020/03/25 02:08:04 Connected to broker at localhost:9092 (unregistered)
[sarama] 2020/03/25 02:08:04 client/brokers registered new broker #1001 at ip-x-x-x-1.ec2.internal:9092
[sarama] 2020/03/25 02:08:04 client/brokers registered new broker #1003 at ip-x-x-x-2.ec2.internal:9092
[sarama] 2020/03/25 02:08:04 client/brokers registered new broker #1002 at ip-x-x-x-3.ec2.internal:9092
[sarama] 2020/03/25 02:08:04 Successfully initialized new client
[sarama] 2020/03/25 02:08:04 Failed to connect to broker ip-x-x-x-3.ec2.internal:9092: dial tcp: lookup ip-x-x-x-3.ec2.internal: no such host`

Обновление 2

my kafka server.properties:

advertised.listeners=INTERNAL://ip-x-x-x-1.ec2.internal:9091,EXTERNAL_INSECURE://ip-x-x-x-1.ec2.internal:9092
listeners=INTERNAL://:9091,EXTERNAL_INSECURE://:9092
listener.security.protocol.map=INTERNAL:SSL,EXTERNAL_INSECURE:PLAINTEXT

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Когда клиент подключается к брокеру (в вашем случае localhost:9092), брокер предоставляет сведения о клиенте всех других брокеров в кластере. Вы можете видеть это в своих журналах:

Начальное соединение

fetching metadata for all topics from broker localhost:9092

Сведения о брокерах:

registered new broker #1001 at ip-x-x-x-1.ec2.internal:9092
registered new broker #1003 at ip-x-x-x-2.ec2.internal:9092
registered new broker #1002 at ip-x-x-x-3.ec2.internal:9092

Проблема, с которой вы столкнулись, заключается в том, что ваш клиент впоследствии будет использовать эти сведения о брокере для дальнейшей связи с кластером. Эти адреса, которые выдает брокер, известны как рекламируемых слушателей . То есть слушатели, которых брокер «рекламирует».

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

Причина взлома вашего /etc/hosts сработала в том, что ваш локальный клиент может затем преобразовать эти адреса обратно в localhost, а затем переадресация S SH работает. Но это всего лишь взлом.

Вы должны установить advertised.listeners в конфигурации брокера на адреса, которые клиент может разрешить (без необходимости хаков на стороне клиента /etc/hosts).

Для подробнее об этом см. https://rmoff.net/2018/08/02/kafka-listeners-explained/


Редактировать : Для ясности, вы должны установить advertised.listeners для каждого брокера по адресу что ваши клиенты могут разрешить - поэтому, если это через localhost S SH forwarding, установите advertised.listeners в localhost:9092.

1 голос
/ 25 марта 2020

поэтому добавление адреса брокера к известным хостам /etc/hosts на моей локальной машине, где я выполняю код, сделало свое дело.

/ etc / hosts:

127.0.0.1 ip-x-x-x-1.ec2.internal
127.0.0.1 ip-x-x-x-2.ec2.internal
127.0.0.1 ip-x-x-x-3.ec2.internal

Хотя я до сих пор не понимаю, почему мне не нужно было делать этот шаг, когда я использовал sarama.NewConsumer().

...