kafka公網連接的一些記錄

目錄

第一個問題:配置/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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章