前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kafka公网连接的一些记录

kafka公网连接的一些记录

作者头像
营琪
发布2019-11-05 17:21:15
1.6K0
发布2019-11-05 17:21:15
举报
文章被收录于专栏:营琪的小记录营琪的小记录

版权声明:本文为博主原创文章,遵循 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问题

代码语言:javascript
复制
#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.检查用户名

代码语言:javascript
复制
[root@VM_0_16_centos kafka_2.12-2.1.0]# cat /etc/hostname 
VM_0_16_centos

2.修改hosts文件

代码语言:javascript
复制
[root@VM_0_16_centos kafka_2.12-2.1.0]# vim /etc/hosts
172.17.0.16 VM_0_16_centos

3.修改Kafka配置文件

代码语言:javascript
复制
[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

代码语言:javascript
复制
    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对象,改依赖呗!

代码语言:javascript
复制
        <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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个问题:配置/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
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档