像以前的大数据环境等都是经过Docker来搭建的,不管是在学习,测试,迁移时候无疑是最快的方式,尤为是在多个环境下还想使用同一套环境时候,https://github.com/hulichao/docker-bigdata,搭建思路,能够参考本仓库,通常状况下只要注意比虚拟机要多作个端口映射等,端口映射也即网络方面,实际上是相对冗余的,因此在搭建kafka的环境时候正好遇到了下面的问题,以下图connection to node 0 colud not be establised. Broker may not be avaliable
html
kafka连不上broker,在虚拟机的机器上没问题,可是本地使用idea链接是有问题的。java
是过后写的博客,因此当时的一些排查问题的截图,不一一贴出来了,只简述一下过程和最终解决,以及引出kafka对内外网隔离时候的解决方式node
好比虚拟机网络,使用ping www.baidu.com
再检查端口使用telnet linux121 9092
发现都没有问题,另外查了Docker的虚拟网卡,能够参考另一篇文章,https://blog.csdn.net/hu_lichao/article/details/109538567,发现也没有问题linux
原本没有往这个方向想,最后只好借助google
, 输入关键字 kafka docker idea 连不上Broker
,以下图git
而后参考第一条,读取关键的信息:Kafka的客户端(生产者与消费者统称)要链接 Broker 须要通过一层认证,不经过认证就没法链接!
而后继续往下读,客户端链接Kafka须要两层认证,其一是Zk上的Broker中的advertised.listeners
配置的链接和端口,注意:这里较坑的一点就是,必须原样比对 PLAINTEXT 中的内容要和Java程序中的要对应,即不考虑你是怎么拿到虚拟机中的Docker中的kafka的链接,总之你要发送的bootstrap.servers
的内容要和PLAINTEXT
要一致,这就须要配置linux121 的hosts,映射到实际的ip和端口了。github
java代码docker
zk获取broker信息bootstrap
kafka的server.properties的配置安全
根据前面的排查问题,有两个重要参数,listeners
和advertise.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中只能有一个同名的协议,故分开写
下面是一个典型的经常使用配置:
以上是使用wolai笔记写的,能够使用个人邀请码DJED4WI
进行注册哟,名额有限,来抢啦!