Производитель Kafka подключается к localhost вместо реального IP - PullRequest
3 голосов
/ 22 января 2020

Помогите, пожалуйста, мне интересно, почему производитель kafka всегда подключается к локальному хосту, однако там ip брокера не является локальным хостом. Итак, есть ли помощь? какие-нибудь идеи?

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

public class ProducerDemo {

    public static void main(String[] args) throws Exception{
        String bootstrapServers = "192.168.199.137:9092";

        Properties properties = new Properties();
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

        // create the producer
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(properties);

        System.out.println("kafka IP   " + properties.getProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG));


        // create producer record
        ProducerRecord<String, String> record = new ProducerRecord<String, String>("first_topic", "Hello world");


        // send data
        producer.send(record);
        producer.flush();
        producer.close();

    }

}

А вот содержимое pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>KafkaBeginnersCourse</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.4.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.28</version>
            <!--scope>test</scope-->
        </dependency>
    </dependencies>
</project>

Вот список из консоли вывода

[kafka-seller-network-thread | продюсер-1] ИНФОРМАЦИЯ org. apache .kafka.clients.Metadata - [Producer clientId = provider-1] ИД кластера: 0TPD87gWR0G18RLKk4gPow [кафка-производитель-сетевой поток | seller-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Соединение с узлом 1 (localhost / 127.0.0.1: 9092) не может быть установлено. Брокер может быть недоступен. [Кафка-производитель-сеть-нить | seller-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Не удалось установить соединение с узлом 1 (localhost / 127.0.0.1: 9092). Брокер может быть недоступен. [Кафка-производитель-сеть-нить | seller-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Не удалось установить соединение с узлом 1 (localhost / 127.0.0.1: 9092). Брокер может быть недоступен. [Кафка-производитель-сеть-нить | seller-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Соединение с узлом 1 (localhost / 127.0.0.1: 9092) не может быть установлено. Брокер может быть недоступен. [Кафка-производитель-сеть-нить | seller-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Соединение с узлом 1 (localhost / 127.0.0.1: 9092) не может быть установлено. Брокер может быть недоступен. [Кафка-производитель-сеть-нить | Manufacturer-1] WARN org. apache .kafka.clients.NetworkClient - [Producer clientId = provider-1] Соединение с узлом 1 (localhost / 127.0.0.1: 9092) не может быть установлено. Брокер может быть недоступен.

Ответы [ 2 ]

3 голосов
/ 23 января 2020

Кажется, есть проблема в настройке advertised.listeners в файле server.properties, как уже сказал @ cricket_007. Позвольте мне попытаться объяснить это подробно.

Когда ваш производитель пытается подключиться к брокеру Kafka, брокер отправляет объявленное имя хоста клиенту для использования, а затем производитель подключается к брокеру с использованием этого адреса. Итак, обычно общение выглядит так:

enter image description here

Но в вашем случае общение между производителем и брокером выглядит так:

enter image description here

PS: Вы можете принять publi c IP в изображениях как частный IP для вашего случая.

В результате вы должны установить рекламируемых слушателей в server.properties как это:

advertised.listeners=PLAINTEXT://192.168.199.137:9092

Ссылка для изображений: https://www.udemy.com/course/kafka-cluster-setup/

2 голосов
/ 23 января 2020

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

Ваш клиент фактически подключается к возвращенному списку определенного advertised.listeners для всех брокеров.

Звучит так, как будто вас вернули localhost в качестве этих слушателей.

...