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