请问下关于如何 内外网区分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通信?
参考下这篇文章。
https://www.orchome.com/1903
大佬 我昨天找到你这篇文章了,然后我想问下,对于 消费者走外网 生产者走内网这种 是不是应该这么设置, 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外网地址 这样就能保证消费者走外网,生产者走内网了么?
对的
大佬 不知方不方便加个qq , 有问题请教下 ,入坑kafka感觉好多坑要踩=-=。 1105681132
在线交流吧,信息我会收到邮件的。
ok, 我按照这个改完已经可以用了, 想弄清下为什么我之前设置集群server.properties advertised.listeners 为 外网ip listeners为内网ip
生产者连接的时候虽然 springboot 指定 bootstrap-servers 成内网ip 但是没走内网 而走外网的原因?
advertised.listeners是暴露broker集群地址给客户端的。生产者和消费者都是客户端,所以它俩不管你怎么配置,都获取的是这个地址。原因和我发的文章原理一样。
所以虽然你配置了内网,网络也是通的,但是生产者客户端主动发现了外网的集群列表,所以就会用外网。
我看官网上面写的是 advertised.listeners 是对外广播的, 如果配置了advertised.listeners 那么listeners 就无效了 优先使用advertised.listeners
当advertised.listeners 没有配置会读取listenners 当listeners没配置会读取 javaapi hostaddress() 也就是说 因为我配置advertised.listeners 为外网地址 导致实际注册到 zk集群 中的节点是 3个外网ip 的节点信息是这样么?
虽然用springboot配置生产者链接Kafka集群的地址为内网地址,但是实际链接的时候会去 zk中寻找 实际的kafka集群节点地址,也就是找到了3个外网地址 然后通过zk中的controller节点 找到对应的分区leader 然后往里面扔数据 这个时候生产者连接的其实是外网ip 的broker,但是因为没开放这个端口的ip白名单 所以访问被拒绝导致生产者连接不上? 请问我这样理解对么?
你理解的很透彻了
好的好的感谢大佬,都是血泪史啊,这几天各种查资料看的眼都花了。。。到时候有问题还得多麻烦您~
你的答案