kafka公网连接的一些记录

mac2026-04-08  3

目录

第一个问题:配置/config/server.properties 文件的listeners问题

第二个问题:PLAINTEXT://your.host.name:9092、zookeeper.connect=your.host.name:2181配置问题

第三个问题:org.apache.kafka.common.KafkaException: Failed to construct kafka producer


由于我编程的电脑是没有安装Kafka、mysql这类软件的,只有jdk和编译器,需要用到的时候,都是在云服务器进行安装,并通过外网连接,这里记录一下我通过外网连接kafka遇到的一些问题

软件版本: kafka_2.12-2.1.0  并使用自带的zookeeper

kafka配置外网访问   默认端口已开放

第一个问题:配置/config/server.properties 文件的listeners问题

#socket server监听的地址。如果没有配置,它将获得从 # java.net.InetAddress.getCanonicalHostName()返回的值。 # EXAMPLE: # listeners = PLAINTEXT://your.host.name:9092 #代理将向生产者和消费者广告的主机名和端口。如果未设置, #它使用“Listeners”的值(如果已配置)。否则,它将使用该值。 #从java.net.InetAddress.getCanonicalHostName()返回。 advertised.listeners=PLAINTEXT://your.host.name:9092

 看注解,根本不知道选择哪一个,感觉都没有区别呀! 后面尝试后发现,要想通过外网传递produce或者consumer,只能选择第二个。

第二个问题:PLAINTEXT://your.host.name:9092、zookeeper.connect=your.host.name:2181配置问题

第一次配置:ip,发现Kafka不能调用zookeeper。

第二次配置:域名,发现telnet监测9092端口不通。原因(其他几个配置文件都是依赖your.host.name)

第三次正确配置:Linux 用户名 , 并修改hosts文件

1.检查用户名

[root@VM_0_16_centos kafka_2.12-2.1.0]# cat /etc/hostname VM_0_16_centos

2.修改hosts文件

[root@VM_0_16_centos kafka_2.12-2.1.0]# vim /etc/hosts 172.17.0.16 VM_0_16_centos

3.修改Kafka配置文件

[root@VM_0_16_centos kafka_2.12-2.1.0]# vim ./config/server.properties advertised.listeners=PLAINTEXT://VM_0_16_centos:9092 zookeeper.connect=VM_0_16_centos:2181

4.连接端hosts文件,也要添加上这个用户名 与 实际Ip的映射 

第三个问题:org.apache.kafka.common.KafkaException: Failed to construct kafka producer

外网环境下测试连接,编写了一小段代码去连接Kafka

private static KafkaProducer<String, String> producer; static { Properties properties = new Properties(); properties.put("bootstrap.servers", "VM_0_16_centos:9092"); properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); /*properties.put("partitioner.class", "com.imooc.kafkastudy.CustomPartitioner");*/ producer = new KafkaProducer<>(properties); } private static void sendMessageForgetResult() { ProducerRecord<String, String> record = new ProducerRecord<>( "csdn_test", "name", "ForgetResult" ); producer.send(record); producer.close(); }

报错,org.apache.kafka.common.KafkaException: Failed to construct kafka producer ,哇,这个错误真的是不知道这么解,根本没有啥提示,很懵,在stackoverflow查了一下, 找到原因了,https://stackoverflow.com/questions/47969955/org-apache-kafka-common-kafkaexception-failed-to-construct-kafka-consumer?rq=1

是由于jar包版本不匹配,导致生成不了producer对象,改依赖呗!

<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.12</artifactId> <version>0.10.2.1</version> </dependency>

 

最新回复(0)