查看哪些IP在向kafka的broker生产消息

6 阅读2分钟

问题来源

数据采集端正在调试,相关人员告知已经将所有的推送端服务都停止了,为何kafka上相关topic还能不断接收到消息,要求排查是哪些ip还在推送数据。

问了一下DeepSeek,得到的答案是Kafka本身并不直接记录或提供推送数据的客户端IP信息。Kafka的设计理念是追求高吞吐量和低延迟,因此没有内置记录客户端IP的功能。

提供了三种方案:

1、使用网络层工具:使用netstat或lsof命令来查看与Kafka broker建立的连接,方法简单直接,但缺点是这些IP地址无法与Kafka的客户端ID直接关联起来,而且是实时的,无法追溯历史记录。

2、临时修改Kafka日志级别:修改log4j.properties文件,将kafka.network.Processor的日志级别设置为DEBUG并重启,这样Kafka会在日志中记录连接细节,包括客户端的IP地址,不过搜索结果提到这种方法会增加磁盘I/O和存储需求,不建议长期使用。

3、使用抓包工具:可以建立客户端ID与IP的关联关系,这种方法需要交叉分析,但能提供更丰富的信息。

可选方案

结合实际情况,在不影响线上业务的情况下,快速查出正在向broker发送消息的ip即可,故选择第一个方案,在kafka broker节点上使用 

netstat -anp | grep :9092 | grep ESTABLISHED

或者

lsof -i :9092 | grep java

这里最终使用 netstat,但是打印出来的消息较多,里面包含集群中的其他broker、消费端的ip,结合grep -v排除集群的其他ip和消费端ip 和 awk确定打印指定列

最终方案

netstat -anp | grep :9092 | grep ESTABLISHED  | grep -v '消费端IP' | grep -v '集群中其他节点IP'  | awk '{print $5}'

通过以上命令就可以快速找到推送端ip地址了