关于Kafka集群 消费者生产者内外网访问的问题?

慕容紫枫 发表于: 2020-02-17   最后更新时间: 2021-10-19 10:48:14   2,713 游览

请问下关于如何 内外网区分kafka集群访问的问题?

具体情况如下 :

1)现有kafka 集群3台C1 C2 C3 均有内外网 ip
2)生产者A   与 kafka集群 在一个内网环境中      没有绑定外网ip
3)消费者B   与 kafka集群 不在一个内网环境中     有外网ip 
请问如何配置kafka集群
能使生产者使用集群内网地址   内网ip:端口 访问集群生产数据
消费者使用集群外网地址   外网ip:端口 访问集群消费数据

目前遇到的问题是这样的:

kafka集群配置:

我在集群中server.properties 配置了
advertised.listeners 为 集群外网ip:端口   
listeners 集群配置了内网ip:端口

springboot配置

springboot application.yml文件中配置 
生产者 bootstrap-servers 地址写的   集群内网ip:端口  
消费者 bootstrap-servers 地址写的   集群外网ip:端口

本以为这样就能内外网分别访问了结果发现不行,

因为 设置了三个Kafka集群服务器 对应的kafka端口只能对指定的 消费者B的外网ip开放,
而实际上 好像是因为我集群配置了advertised.listeners 为外网地址,结果现在生产者A与集群通信也走外网了,但是因为A没有绑定外网ip所以 连接集群端口就会被拒绝,生产不了数据。

我试了下 给生产者加了个外网ip 然后集群端口对生产者A的ip开放, 是可以正常通信的,但是这种应该是走的外网通信,和消费者B一样了。

想请教一下大佬们如何 能分内外网处理一下生产者消费者问题,
让生产者通过 Kafka集群内网ip通信
消费者通过 Kafka集群外网ip通信?

发表于 2020-02-17
¥5.0

参考下这篇文章。
https://www.orchome.com/1903

慕容紫枫 -> 半兽人 4年前

大佬 我昨天找到你这篇文章了,然后我想问下,对于 消费者走外网 生产者走内网这种 是不是应该这么设置, kafka集群配置文件 server.properties 中仅设置listeners: hostname (比如kafka-01):9092 然后springboot配置中 消费者和生产者 bootstrap-servers配置都用 hostname (比如kafka-01):9092 ,然后在生产者的/etc/hosts 文件中映射 kafka-01 -》 kafka内网地址 在消费者的 /etc/hosts 文件中映射 kafka-01 -》 kafka外网地址 这样就能保证消费者走外网,生产者走内网了么?

慕容紫枫 -> 半兽人 4年前

大佬 不知方不方便加个qq , 有问题请教下 ,入坑kafka感觉好多坑要踩=-=。 1105681132

半兽人 -> 慕容紫枫 4年前

在线交流吧,信息我会收到邮件的。

慕容紫枫 -> 半兽人 4年前

ok, 我按照这个改完已经可以用了, 想弄清下为什么我之前设置集群server.properties advertised.listeners 为 外网ip listeners为内网ip

生产者连接的时候虽然 springboot 指定 bootstrap-servers 成内网ip 但是没走内网 而走外网的原因?

半兽人 -> 慕容紫枫 4年前

advertised.listeners是暴露broker集群地址给客户端的。生产者和消费者都是客户端,所以它俩不管你怎么配置,都获取的是这个地址。原因和我发的文章原理一样。

所以虽然你配置了内网,网络也是通的,但是生产者客户端主动发现了外网的集群列表,所以就会用外网。

慕容紫枫 -> 半兽人 4年前

我看官网上面写的是 advertised.listeners 是对外广播的, 如果配置了advertised.listeners 那么listeners 就无效了 优先使用advertised.listeners
当advertised.listeners 没有配置会读取listenners 当listeners没配置会读取 javaapi hostaddress() 也就是说 因为我配置advertised.listeners 为外网地址 导致实际注册到 zk集群 中的节点是 3个外网ip 的节点信息是这样么?

慕容紫枫 -> 半兽人 4年前

虽然用springboot配置生产者链接Kafka集群的地址为内网地址,但是实际链接的时候会去 zk中寻找 实际的kafka集群节点地址,也就是找到了3个外网地址 然后通过zk中的controller节点 找到对应的分区leader 然后往里面扔数据 这个时候生产者连接的其实是外网ip 的broker,但是因为没开放这个端口的ip白名单 所以访问被拒绝导致生产者连接不上? 请问我这样理解对么?

半兽人 -> 慕容紫枫 4年前

你理解的很透彻了

慕容紫枫 -> 半兽人 4年前

好的好的感谢大佬,都是血泪史啊,这几天各种查资料看的眼都花了。。。到时候有问题还得多麻烦您~

你的答案

查看kafka相关的其他问题或提一个您自己的问题