Kafka 生产者正在连接到本地主机而不是真实 IP
Kafka producer is connecting to localhost instead of the real IP
请帮助我想知道为什么 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-producer-network-thread | producer-1] INFO org.apache.kafka.clients.Metadata - [Producer clientId=producer-1] Cluster ID: 0TPD87gWR0G18RLKk4gPow
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
bootstrap.servers
发现所有节点,你可以只给一个地址,但更多是首选。
您的客户端实际上连接到返回的所有代理的已定义 advertised.listeners
列表。
听起来您作为那些听众返回了 localhost。
您在 server.properties
文件中的 advertised.listeners
设置似乎有问题,@cricket_007 已经说过了。让我试着详细解释一下。
当您的生产者尝试连接 Kafka 代理时,代理将广告主机名发送给客户端使用,然后生产者使用此地址连接到代理。所以平时的交流是这样的:
但在您的情况下,生产者和经纪人之间的沟通是这样的:
P.S:您可以假设图像中的 public IP 为您案例的私有 IP。
因此,您应该像这样在 server.properties 中设置您的广告侦听器:
advertised.listeners=PLAINTEXT://192.168.199.137:9092
请帮助我想知道为什么 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-producer-network-thread | producer-1] INFO org.apache.kafka.clients.Metadata - [Producer clientId=producer-1] Cluster ID: 0TPD87gWR0G18RLKk4gPow
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
[kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Connection to node 1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
bootstrap.servers
发现所有节点,你可以只给一个地址,但更多是首选。
您的客户端实际上连接到返回的所有代理的已定义 advertised.listeners
列表。
听起来您作为那些听众返回了 localhost。
您在 server.properties
文件中的 advertised.listeners
设置似乎有问题,@cricket_007 已经说过了。让我试着详细解释一下。
当您的生产者尝试连接 Kafka 代理时,代理将广告主机名发送给客户端使用,然后生产者使用此地址连接到代理。所以平时的交流是这样的:
但在您的情况下,生产者和经纪人之间的沟通是这样的:
P.S:您可以假设图像中的 public IP 为您案例的私有 IP。
因此,您应该像这样在 server.properties 中设置您的广告侦听器:
advertised.listeners=PLAINTEXT://192.168.199.137:9092