容器环境下IP跨网闸映射kafka部署

一、 listenersadvertised.listeners

在公司内网部署 kafka 集群只需要用到 listeners,内外网需要作区分时才需要用到advertised.listeners

  • listeners: 学名叫监听器,其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。我们要监听的uri的逗号分隔列表和监听器名称。指定hostname为0.0.0.0绑定所有接口。hostname为空以绑定到默认接口(JVM拿到的本机的hostname,java.net.InetAddress.getCanonicalHostName().)。
  • advertised.listeners:和 listener相比多了个advertised。Advertise的含义表示宣称的、公布的,就是组监听器是 Broker 用于对外发布的。会注册到zookeeper中,client真正要访问的地址。 如果没有配置advertised.listeners,此时advertised.listeners默认值等于listeners参数的值,并被发布到zooleeper中,供客户端访问使用。

比如在公司搭建的 kafka 集群,只有内网中的服务可以用,这种情况下,只需要用 listeners 就行;在 docker 中或者 在类似阿里云主机上部署 kafka 集群,这种情况下是需要用到 advertised.listeners

kafka 0.9.x以后的版本新增了advertised.listeners配置 kafka 0.9.x以后的版本不要使用 advertised.host.name 和 advertised.host.port 已经deprecated host.name 和 port 为 deprecated,使用listeners代替。

注意:

  • 如果 advertised.listeners没有设置,则hostname的值会被注册到zookeeper中;
  • 如果 advertised.listeners没有设置,hostname不能为0.0.0.0,否则client通过zk拿到的broker地址就是0.0.0.0;
  • 如果要绑定到所有interface,hostname不设置就可以;
  • 如果hostnameadvertised.listeners都没设置,则注册到zk的就是JVM拿到的本机的hostname;
  • 如果要bind到所有interface,client又能访问,解决的办法是hostname不设置或设置为0.0.0.0,advertised.listeners一定要设置为一个client可以访问的地址,如直接设置ip地址。
#hostname为空
listeners=PLAINTEXT://:9092
zookeeper.connect=10.254.254.5:2181
advertised.listeners=PLAINTEXT://192.168.3.46:9092

二、容器环境下IP跨网闸映射

kafka容器在地点A,平台服务器在地点B,地点A与地点B之间跨网闸。kafka容器ip为192.168.3.46映射到11.55.56.6,平台ip为11.55.56.26。但是发现实际使用中,平台无法消费到kafka的数据,但是能telnet通9092。

根据之间的介绍,kafka的clinet连接broker的过程如下所示:
在这里插入图片描述
在这里插入图片描述

平台可以连接到kafka,但是从kafka获取到的ip为PLAINTEXT://192.168.3.46:9092,为映射前的IP,所以ip映射是失效的。

解决此问题的办法是采用域名的方式:

  • kafka配置文件:
listeners=PLAINTEXT://:9092
zookeeper.connect=10.254.254.5:2181
advertised.listeners=PLAINTEXT://cluster_kafka:9092
  • kafka容器在/etc/hosts增加域名:
192.168.3.46 cluster_kafka
  • 平台容器在/etc/hosts增加域名:
11.55.56.6 cluster_kafka
  • 与Kafka容器同宿主机的容器在/etc/hosts增加域名:
192.168.3.46 cluster_kafka
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值