配置kafka容器访问ip踩坑
# 通过任意IP的9003访问的定义为OUTSIDE,任意IP9002访问的定义为INSIDE listeners=OUTSIDE://:9093,INSIDE://:9092 # 连上Kafka之后,Broker会根据outside还是inside返回对应的值,也就是配置里的 advertised.listeners=OUTSIDE://<外网IP>,INSIDE://<内网IP>:9092 # OUTSIDE,INSIDE映射协议,OUTSIDE和INSIDE只是一个标志,可以替换为任意其他,只需要映射即可 listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT inter.broker.listener.name=INSIDE
考虑一个场景:
如果有内外网之分,内网client连接Kafka使用9002(即使配置了多个broker,它只会连接某个broker的9092),由此该broker确定了此client使用的是内网,这样子,要让client去连接其他broker时(client经常需要根据消息的hash值取访问不同的broker的),就会返回该broker的INSIDE地址,这样子就解决了当client需要访问其他broker时,拿到的是适合自己网络的IP。如果不这么做,那么client就没办法访问到其他broker了。
127.0.0.1即是环回地址之一,不过网卡,访问本机,可以用于验证TCP实现是否有问题,比如访问127.0.0.1:8080,则这个请求不会经过网卡。127.0.0.1:8080,意味着只能访问127.0.0.1的8080建立链接。
0.0.0.0代表本机所有IP,如果监听是0.0.0.0:8080,即意味着访问任何本机IP的8080都允许建立连接。
localhost一个DNS(对应的127.0.0.1),如果配置了localhost:8080,那么只能通过localhost访问。
本机IP即某一个IP,10.61.74.87:8080,那么就只能通过10.61.74.87来访问了。
wireshark抓本机包方法之一,设置本机ip强制转发到网关,这样子数据包就经过了网卡,到了网关,再回来了。但是127.0.0.1是环回地址,不能设置强制转发到网关的,这是它的特殊性。所以这种方法只能针对本机内用本机IP相互访问的形式。