连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么-成都快上网建站

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

这篇文章给大家介绍连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联建站是一家专注网站建设、网络营销策划、微信小程序、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十多年以来,已经为上千多家成都服务器租用各业的企业公司提供互联网服务。现在,服务的上千多家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。

1.背景

像之前的大数据环境等都是通过Docker来搭建的,无论是在学习,测试,迁移时候无疑是最快的方式,尤其是在多个环境下还想使用同一套环境时候,https://github.com/hulichao/docker-bigdata,搭建思路,可以参考本仓库,一般情况下只要注意比虚拟机要多做个端口映射等,端口映射也即网络方面,其实是相对冗余的,所以在搭建kafka的环境时候正好遇到了下面的问题,如下图connection to node 0 colud not be establised. Broker may not be avaliable

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

kafka连不上broker,在虚拟机的机器上没问题,但是本地使用idea连接是有问题的。

2.思路

是事后写的博客,所以当时的一些排查问题的截图,不一一贴出来了,只简述一下过程和最终解决,以及引出kafka对内外网隔离时候的解决方式

2.1 首先排查各种网络问题

比如虚拟机网络,使用ping www.baidu.com 再检查端口使用telnet linux121 9092 发现都没有问题,另外查了Docker的虚拟网卡,可以参考另外一篇文章,https://blog.csdn.net/hu_lichao/article/details/109538567,发现也没有问题

2.2 然后开始考虑是Kafka的问题

本来没有往这个方向想,最后只好借助google, 输入关键字 kafka docker idea 连不上Broker ,如下图

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

然后参考第一条,读取关键的信息:Kafka的客户端(生产者与消费者统称)要连接 Broker 需要经过一层认证,不通过认证就无法连接! 然后继续往下读,客户端连接Kafka需要两层认证,其一是Zk上的Broker中的advertised.listeners 配置的连接和端口,注意:这里较坑的一点就是,必须原样比对 PLAINTEXT 中的内容要和Java程序中的要对应,即不考虑你是怎么拿到虚拟机中的Docker中的kafka的连接,总之你要发送的bootstrap.servers 的内容要和PLAINTEXT 要一致,这就需要配置linux121 的hosts,映射到实际的ip和端口了。

java代码

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

zk获取broker信息

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

kafka的server.properties的配置

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

3.Kafka的内外网参数

根据前面的排查问题,有两个重要参数,listenersadvertise.listeners 那这两个参数是做什么用的呢,这里拿来官方的翻译,

用于指定当前Broker向外发布服务的地址和端口。与 advertised.listeners 配合,用于做内外网隔离。

下面介绍几个相关参数:

listener.security.protocol.map

内外网隔离配置:监听器名称和安全协议的映射配置。比如,可以将内外网隔离,即使它们都使用SSL。listener.security.protocol.map=INTERNAL:SSL,EXTERNAL:SSL 注意,每个监听器的名称只能在map中出现一次。 inter.broker.listener.name

用于配置broker之间通信使用的监听器名称,该名称必须在advertised.listeners列表中。例如inter.broker.listener.name=EXTERNAL listeners

用于配置broker监听的URI以及监听器名称列表,使用逗号隔开多个URI及监听器名称。 如果监听器名称代表的不是安全协议,必须配置listener.security.protocol.map。 每个监听器必须使用不同的网络端口。 advertised.listeners 需要将该地址发布到zookeeper供客户端使用,如果客户端使用的地址与listeners配置不同。 可以在zookeeper的 get /brokers/ids/<broker.id> 中找到。

在IaaS环境,该条目的网络接口得与broker绑定的网络接口不同。 如果不设置此条目,就使用listeners的配置。跟listeners不同,该条目不能使用0.0.0.0网络端口。 advertised.listeners的地址必须是listeners中配置的或配置的一部分。

注意:INTERNAL 和 EXTERNAL的作用就是相当于给PLAINTEXT协议起了两个别名,默认map中只能有一个同名的协议,故分开写

下面是一个典型的常用配置:

连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么

关于连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站栏目:连接不上Docker-Kafka-broker及Kafka解决内网外网隔离的几个重要参数分别是什么
本文路径:http://kswjz.com/article/ipigji.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流