记一次非直达网络环境下对接Kafka集群实战

记一次非直达网络环境下对接Kafka集群实战 网络环境下属公司到集团公司之间通过专线连接但客户端不能直接通过专线到集团Kafka集群需经过代理服务器将流量转发至Kafka集群。本人对Kafka工作原理一窍不通开始以为只要端口可达即实现Kafka连接后续才了解到Producer 启动时并不会立即连接 Broker而是先访问 NameServer 获取路由信息真正与 Broker 建立连接通常发生在首次发送消息时Broker 连接成功后才标志着 Producer 可正常工作。本文适用于没有代理服务器操作权限或变更流程复杂情况文中提到的代理均为TCP代理非HTTP代理编译nginx时一定要--with-stream一、第一次代理通过代理服务器 10.0.0.1:2001 将客户端请求转发到集群 5 个节点的 9092 端口Producer 能够向集群发送消息但在接收集群返回的 Broker 地址后无法与该 Broker 建立连接。故障原因集群返回的broker是真实域名客户端无法解析到地址就算解析到地址也无法连接到真实的172.16.1.0段的地址。二、第二次代理解决方案一次代理不行那就再来一次。将集群返回的broker域名解析到客户端本地写在客户端的hosts中(因为本次生产环境的代理服务器不能改hosts)如127.0.0.1 Kafka_1127.0.0.1 Kafka_2127.0.0.1 Kafka_3127.0.0.1 Kafka_4127.0.0.1 Kafka_5用nginx监听本地127.0.0.1:9092端口将9092端口流量用TCP代理转发到代理服务器10.0.0.1的2001端口再由代理服务器将2001端口的流量转发到Kafka集群。##可能是测试当天运气爆棚执行该方案后连接Kafka-broker成功不幸的是只有第一次成功。##猜测失败原因采用代理服务器10.0.0.1的2001端口代理集群5个IP的9092端口导致连接broker时是根据代理轮询的当集群返回连接broke1时代理轮询却连接broker2、broker3、broker4或者broker5就会导致连接失败。只有当集群返回连接broker1时代理轮询也刚好连接broker1那么恭喜你Kafka连接如成三、解决代理轮询broker解决方案改变代理服务器用10.0.0.1的2001端口代理集群5个IP的9092端口的方式用1个端口对应一个IP的方式进行代理如下代理服务器nginx代理10.0.0.1:2001172.16.1.1:909210.0.0.1:2002172.16.1.2:909210.0.0.1:2003172.16.1.3:909210.0.0.1:2004172.16.1.4:909210.0.0.1:2005172.16.1.5:9092这样做的目的是让代理端口对应集群里的IP不再像之前一样进行轮询靠运气。但即便是解决了代理轮询问题还有个更严重的问题客户端一个127.0.0.1地址无法区分连接哪一个broker比如集群返回broker1Kafka_1:9092对应hosts解析给127.0.0.1:9092,流量转发给10.0.0.1:2001,那返回broker2Kafka_2:9092对应hosts解析还是给127.0.0.1:9092,流量转发给10.0.0.1:2001便会导致返回任意broker都是连接broker1。好的之前的方案是看代理轮询的运气现在的方案是看返回broker的运气了依旧如成四、解决客户端无法区分broker4.1 增加环回地址解决方案当前hosts将所有broker解析给127.0.0.1改变打法。环回地址不是只能存在一个嘛多写几个也无妨不能占用环回地址上在使用的端口比如127.0.0.1:9092端口有程序占用那就得考虑让它迁移或者是自己迁移了在原来的环回接口上添加4个环回地址用命令查看一下ip addr show lo如下inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 127.0.0.2/8 brd 127.255.255.255 scope host secondary lovalid_lft forever preferred_lft foreverinet 127.0.0.3/8 brd 127.255.255.255 scope host secondary lovalid_lft forever preferred_lft foreverinet 127.0.0.4/8 brd 127.255.255.255 scope host secondary lovalid_lft forever preferred_lft foreverinet 127.0.0.5/8 brd 127.255.255.255 scope host secondary lovalid_lft forever preferred_lft forever4.2 用环回地址区分broker将5个broker分别解析到5个环回地址上在用nginx监听5个环回地址的9092端口将流量转发到代理服务器10.0.0.1对应的5个端口上如下hosts:127.0.0.1 Kafka_1127.0.0.2 Kafka_2127.0.0.3 Kafka_3127.0.0.4 Kafka_4127.0.0.5 Kafka_5客户端nginx代理127.0.0.1:909210.0.0.1:2001127.0.0.2:909210.0.0.1:2002127.0.0.3:909210.0.0.1:2003127.0.0.4:909210.0.0.1:2004127.0.0.5:909210.0.0.1:2005最终网络结构127.0.0.1:909210.0.0.1:2001172.16.1.1:9092127.0.0.2:909210.0.0.1:2002172.16.1.2:9092127.0.0.3:909210.0.0.1:2003172.16.1.3:9092127.0.0.4:909210.0.0.1:2004172.16.1.4:9092127.0.0.5:909210.0.0.1:2005172.16.1.5:9092####你都看到这里了说明你技术和我也是一样的菜狗########本篇文章没有提供配置命令随便找个AI都可以帮你写#######声明#######本人对Kafka的工作原理一窍不通只是提供代理网络下对接Kafka的解题思路。大佬别喷###展示一下结果算了不展示了反正就是执行sh kafka-topics.sh --bootstrap-server 172.16.1.1:2001 --describe --topic ****************后给你返回一堆topic相关的信息分区数量分区leader分区Replicas分区Isr副本数量等。####目前AI还不会提供此解决方案也可能是我问的姿势不对####