【发布时间】:2020-02-12 13:19:38
【问题描述】:
我正在学习 Kafka,并且已经开始使用 Maven。
我在 AWS 中有一个独立的 Kafka 实例,在我的笔记本电脑上有一个 Maven 应用程序。我写了一个作为生产者的小应用程序
import org.apache.kafka.clients.KafkaClient;
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) {
// create producer properties
Properties properties = new Properties();
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "<IP_TO_REMOTE_SERVER>:9092");
properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
//create producer
KafkaProducer<String,String> producer = new KafkaProducer<String, String>(properties);
//producer record
ProducerRecord <String,String> record = new ProducerRecord<String, String>("first_topic", "jello there");
System.out.println("SENDING RECORD");
//send data - async
producer.send(record);
producer.flush();
producer.close();
System.out.println("complete");
}
}
当我运行它时,似乎我无法连接到远程实例。我收到以下错误。
[kafka-producer-network-thread |> producer-1] 警告 org.apache.kafka.clients.NetworkClient - [生产者 clientId=producer-1] 无法连接到节点 0 (/xx.xx.xx.xx:9092) 成立。经纪人可能不可用。
[main] 信息 org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=producer-1] 关闭 Kafka 生产者 timeoutMillis = 9223372036854775807 毫秒。
查看 Stackoverflow 后,我将 server.properties 侦听器部分更新为服务器的私有 IP
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://10.0.1.51:9092
我应该如何将服务器上的 Kafka 配置为可远程访问和侦听?
【问题讨论】:
-
为什么不在“listeners”部分使用公网IP地址呢? IP 必须可访问,以便您可以连接到代理。
-
我无法将“侦听器”设置为公共 IP,因为 EC2 VPC 实例只知道它们的私有 IP,而不是公共 IP,因为它是由 AWS 进行 NAT 的。但是,您让我想到...这篇博文 rmoff.net/2018/08/02/kafka-listeners-explained 提到使用广告地址 - 将其设置为公开就可以了。
标签: java maven apache-kafka