kafka公网连接的一些记录
- 2019 年 11 月 5 日
- 笔记
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43126117/article/details/102868599
目录
第一个问题:配置/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>
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=29l3humiv5esg