efak监控工具部署无法获取Kafka信息问题处理过程

666 阅读2分钟

背景

项目使用Kafka进行数据接收处理,因为业务需要,要求能够对内外网进行分离,即开放出外网访问地址,和内网访问地址,设计初衷是外网进行sasl认证,内网不用进行认证,最终在部署的时候遇到了困难,实现的是内外网都实用了认证。这是前提。

问题

选了efak工具,监控Kafka的消费情况,在部署中,按照官网中的配置说明进行配置,完成后,日志总是在抛如下警告: will not attempt to authenticate using sasl(unknown error)

并且efak dashboard页面Kafka、zk等个数都为0,点击个数链接后,有对应信息,但是显示不全。 查看erro.log 后发现,报错

Load kafka metadata into cache has error, msg is 

由于没有截图,具体错误就不贴出去了,整体上就是报错,Kafka的元信息找不到什么的

分析

面对这个问题,完全没头绪,首先Kafka集群运转正常,那就只能是efak的问题了,检查了配置文件,基本没有什么有问题的了。

排查问题还是得从日志着手,但是log.log日志并没有什么有用的信息,那就看看debug出来的是什么,打开debug级别的日志输出。

打开后,发现debug打印出的信息,没有broker的ip和端口信息,问题基本出在这,配置文件应该已经没有问题了,那就从efak的源码着手。

最后定位到,获取Kafka元数据的位置

image.png

继续往下看,在获取Kafka的ip和端口等信息的时候,有这样一段代码:

image.png

这里,拿到元数据后进行了判断,即包含SASL_PLAIN的数据,才被认为是Kafka的ip和地址。

首先,因为内网往分流,所以这里的size会大于1,进了这个逻辑,然后再Kafka的配置文件中,这个映射是可以自定义的,也就是说,我很可能是External或者Internal这种形式的协议了,那这个时候,这里就获取不到Kafka的ip和port了。

解决

问题很清晰了,只要Kafka配置文件中advertised中的协议包含SASL_PLAIN即可,这个只是个映射,更改一下不会影响其他功能。

说了一大堆,中间也缺少问题的详细信息,不过如果遇到的是这个问题的话,看这个贴子,基本是能对应上的。希望能够帮到你。