kafka实战(四):外网访问AWS上kafka集群

aws上的服务是有内网ip和外网ip区分的。我们在aws内部环境运行程序需要指定内网ip,在外网访问时需要指定外网ip。但是broker是只能配置一个ip的,我们怎么做呢?

首先要了解一下几个配置:

  • host.name
    已弃用。 仅当listeners属性未配置时被使用,已用listeners属性代替。表示broker的hostname

  • advertised.host.name
    已弃用。仅当advertised.listeners或者listeners属性未配置时被使用。官网建议使用advertised.listeners。该配置的意思是这册到zookeeper上的broker的hostname或ip。是提供给客户端与kafka通信使用的。如果没有设置则使用host.name

  • listeners
    需要监听的URL和协议,如:PLAINTEXT://myhost:9092,SSL://:9091 CLIENT://0.0.0.0:9092,REPLICATION://localhost:9093。如果未指定该配置,则使用java.net.InetAddress.getCanonicalHostName()函数的的返回值

  • advertised.listeners
    注册到zookeeper上并提供给客户端的监听器,如果没有配置则使用listeners。如果listeners也没有配置则使用java.net.InetAddress.getCanonicalHostName()函数的的返回值

从上诉配置我们很清楚的了解了该如何配置hostname,但是我们如何把外网ip注册到zookeeper呢,答案是不可能的,因为内网是不识别外网ip的。

网上一些道友的解决方法如下:

advertised.listeners=PLAINTEXT://x.x.x.x:9092

x.x.x.x为外网ip。
想法很丰满,直接把外网ip注册给zookeeper,这样客户端就可以识别到外网ip进行访问了。但现实很骨感,内网是不识别外网ip的,这样把外网ip配置进去,不报错才怪。

解决方案

1、修改server.properties配置文件

advertised.listeners=PLAINTEXT://kafka1:9092

2、修改aws上broker的/etc/hosts文件

[内网ip]    kafka1

3、修改外网访问服务器上的/etc/hosts文件

[外网ip]    kafka1

这样外部生产/消费的时候只要指定kafka1,就可以进行访问了。

props.put("bootstrap.servers", "kafka1:9092");

注意:这里拿一个节点举例,集群其他节点也如此配置。

更多:kafka深入理解专栏
——————————————————————————————————
作者:桃花惜春风
转载请标明出处,原文地址:
https://blog.csdn.net/xiaoyu_BD/article/details/82496257
如果感觉本文对您有帮助,您的支持是我坚持写作最大的动力,谢谢!

你可能感兴趣的:(kafka,kafka深入理解,kafka外网访问,kafka内网外网,外网如何访问kafka,外网访问kafka集群)