首页 » 技术分享 » 【kafka】报错:advertised.listeners参数的重要性(外部访问局域网kafka)

【kafka】报错:advertised.listeners参数的重要性(外部访问局域网kafka)

 

嗯,菜鸡一个,写个帖子记录下解决的一个kafka的问题。

关于kafka的另外两篇文章!

【kafka】一、kafka框架介绍(生产者篇):https://blog.csdn.net/lsr40/article/details/84029034

【kafka】二、kafka框架介绍(消费者篇):https://blog.csdn.net/lsr40/article/details/84034394

背景:

看图吧!

文字说明:

消费者通过内网ip与kafka集群交互,但是因为服务器101是外网环境,是不可能通过内网ip跟kafka交互的,所以必须做端口映射。

也就是说把:

局域网ip-1:局域网端口-1,局域网ip-2:局域网端口-2,局域网ip-3:局域网端口-3

映射成

外部可以访问的3个ip+3个端口

接着生产者连接kafka的broker-list参数就写上:外部可以访问的3个ip+3个端口(用逗号分隔)就可以了。

正文:

但是我确认了在网络和各种环境都没有问题的情况下,就是发送不了数据。

具体情况是:我能够拿得到broker上有几个topic,但是我却不能把数据发送出去!

因此我确认了,应该是kafka集群搭建的问题!经过一番挣扎,解决了这个问题!

如图(这图是CM平台上kafka的配置):

在每一个kafka的broker上添加上这两条配置,第一台就外网ip1:外网端口1,第二台就外网ip2:外网端口2,以此类推

配置好了,重启kafka服务就可以了!

具体原因可以参考:

kafka的server.properties

官网也有对这几个参数做介绍:http://kafka.apache.org/0100/documentation.html#brokerconfigs

主要看如下参数的官方解释:

参数1:advertised.host.name

参数2:advertised.listeners

参数3:advertised.port

参数4:host.name

参数5:java.net.InetAddress.getCanonicalHostName().

自己翻译的中文解释:不推荐直接使用参数1,请用参数2加上参数3的方式来配置,这三个参数的作用就是用client连接zk的时候能够获得主机名端口自等信息,如果在IaaS的环境下(IaaS 是云服务的最底层,相当于只提供了基础服务器),可能要为broker配置不同的接口绑定(以免端口冲突等问题),如果是这种情况,配置参数4是生效的,否则,kafka会自己通过调用java的方法来获取主机名!

英文原文:DEPRECATED: only used when `advertised.listeners` or `listeners` are not set. Use `advertised.listeners` instead. Hostname to publish to ZooKeeper for clients to use. In IaaS environments, this may need to be different from the interface to which the broker binds. If this is not set, it will use the value for `host.name` if configured. Otherwise it will use the value returned from java.net.InetAddress.getCanonicalHostName().

关于IaaS和其他两个(PaaS,SaaS)的介绍:http://www.ruanyifeng.com/blog/2017/07/iaas-paas-saas.html

报错的原因(大概是这样):连接上了broker,找到了zookeeper上对应的kafka的topic信息,接下来要往topic上发送数据的时候,zk上注册的topic对应的信息是局域网的机器名称和ip,因为从集群外自然访问不了局域网,所以导致了这个错误,在此记录下。

发这篇文章的时候还是命途多舛,两度被删,原因不可描述~

如果有什么说错的地方还请大家批评指出!

转载自原文链接, 如需删除请联系管理员。

原文链接:【kafka】报错:advertised.listeners参数的重要性(外部访问局域网kafka),转载请注明来源!

0