Kafka内外网分流设置listeners和advertised.listeners

十念  金牌会员 | 2024-8-31 23:05:01 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 680|帖子 680|积分 2040

问题背景:

Kafka部署在内网,内网Java服务会利用Kafka收发消息,别的,Java服务会与其他第三方体系利用kafka实现数据同步,也就是外网也会发送消息到kafka,外网IP做了端口映射到了内网,advertised.listeners设置了外网ip端口,所以这里的问题就是内网步伐发送kafka消息也会走到外网,如许会有部门毗连出现超时错误,所以这种方式不太合理。
解决办法:

参考网上内外网分流方式进行处理,外部访问kafka通过公网毗连,内部步伐利用内网访问。
listeners与advertised.listeners含义

1. listeners

含义:用于指定Kafka Broker实际监听的地点和端口,listeners 的格式通常是:协议名称://主机名或IP地点:端口,可以同时设置多个, 而且用逗号隔开,监听器的名称和端口必须是唯一的,端口相同,就冲突了。
示例
  1. listeners=PLAINTEXT://your.host.name:9092
复制代码
在这个示例中,Kafka Broker将监听your.host.name这个主机名上的9092端口,并利用PLAINTEXT协议(即不加密的文本协议)。
2.advertised.listeners

含义
Kafka 服务器对外宣传的端点信息,它会将地点注册到Zookeeper中,用于告诉客户端应该毗连到哪个地点和端口,也就是客户端真正要访问的地点。advertised.listeners 的格式与 listeners 类似,但是可以指定差别的地点或端口,如果没有设置,则默认值和listener一样,别的,advertised.listeners不支持0.0.0.0这种情势, 所以如果listeners属性设置成0.0.0.0,则必须设置advertised.listeners属性。
示例
  1. listeners=PLAINTEXT://internal.host.name:9092  
  2. advertised.listeners=PLAINTEXT://external.host.name:9092
复制代码
在这个示例中,Kafka Broker在内部网络上监听internal.host.name这个主机名上的9092端口,但向外部客户端公布external.host.name这个主机名上的9092端口作为毗连地点。
内外网分流设置修改

kakfa设置文件config/server.properties修改前
  1. listeners=PLAINTEXT://172.20.0.147:9092
  2. advertised.listeners=PLAINTEXT://10.103.25.230:9092
复制代码
修改后
  1. listeners=INSIDE://:19092,OUTSIDE://:9092
  2. advertised.listeners=INSIDE://172.20.0.147:19092,OUTSIDE://10.103.25.230:9092
  3. listener.security.protocol.map=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
  4. inter.broker.listener.name=INSIDE
复制代码
说明


  • listeners这里设置了2个监听器,监听了所有IP的两个端口,19092为内网kafka利用端口,9092为外部访问端口
  • 172.20.0.147是内网服务器IP地点,10.103.25.230为公网IP地点,端口已也添加了映射:10.103.25.230->172.20.0.147,如许我们当我们通过kafka客户端毗连kafka时,kafka会从zookeeper中获取kafka元数据信息,这时候kafka客户端得到的就是advertised.listeners的信息,由于这里OUTSIDE设置的外网IP,当客户端通过10.103.25.230访问kafka时,请求就会被之前设置的映射进行转发,被转发到内网ip,从而完成对kafka的访问。
  • listener.security.protocol.map为监听器名称和安全协议之间的映射关系集合,PLAINTEXT表现明文
  • inter.broker.listener.name用于broker之间通讯的listener名称,如果未设置,则listener名称由 security.inter.broker.protocol 界说(security.inter.broker.protocol默认值是PLAINTEXT)
碰到问题


  • 修改过程中的报错:
  1. org.apache.kafka.common.KafkaException: Socket server failed to bind to 10.103.25.230:9092: Cannot assign requested address.
复制代码
解决方案
将listeners由原来固定IP修改为:
  1. listeners=INSIDE://:19092,OUTSIDE://:9092
复制代码
参考链接:
https://juejin.cn/post/6893410969611927566
https://www.confluent.io/blog/kafka-listeners-explained/

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表