飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

Flume消费内外网分流配置的Kafka时遇到的坑

时间:2021-12-04  作者:liugh  

  网上有铺天盖地的文章,介绍如何将Kafka同时配置成公网地址、内网地址,以实现内外网分流,看着都很成功。

  但我们通过Flume消费一个配置了内外网分流的Kafka(版本域名.1)集群时遇到了坑,却没有从现有的文章中找到解决方案。

  如果使用公有云服务,一般一台虚拟机只有一块网卡,这时内外网分流的Kafka配置方案如下:

域名域名=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

listeners=INTERNAL://内网地址:9092,EXTERNAL://内网地址:19092

域名eners=INTERNAL://内网地址:9092,EXTERNAL://外网地址:19092

域名域名=INTERNAL

  在另一个公网环境中,通过Flume消费上面配置的公网Kafka地址时,通过Zookeeper拿到的却始终是内网地址!

  但是直接查询Zookeeper,获得的endpoints访问地址,却是同时包含了公网和内网地址的:

"endpoints":[内网地址及端口公网地址及端口]

 经过多次对比Kafka的配置以及从Zookeeper中获得的endpoints值,我们大胆猜想:

 是不是Zookeeper返回了endpoints中的第一个值?

 如果是这样,那我们把Kafka的配置改为公网在前,内网在后,是不是Flume通过Zookeeper获得的Kafka地址就是公网地址了呢?

 于是带着疑问与猜想,我们把内外网分流的Kafka配置对调了一下,调整如下:

域名域名=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

listeners=INTERNAL://内网地址:9092,EXTERNAL://内网地址:19092

域名eners=EXTERNAL://外网地址:19092,INTERNAL://内网地址:9092

域名域名=INTERNAL

 我们再次从Zookeeper中获得endpoints的值如下:

"endpoints":[公网地址及端口,内网地址及端口]

 通过将公网地址和内网地址的配置对调后,Flume可以成功消费到公网地址的Kafka!

 至于Zookeeper如何将endpoints中的多个地址返回的,是不是就选择了第一个,还需要继续研究一下源代码。

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。