记一次线上环境flink任务连接kafka失败的问题

简单说一下线上环境配置:
15台kafka、30台flink(2台job,28台task)512G内存,挂载7T硬盘
数据量大概是每秒560w+

背景:发现kafka的部分消费者组有积压,打算调整程序的一些配置参数,来提高flink的处理能力,只做配置文件的修改,然后重启程序。再flink界面观察到任务在不停重启。

解决:先在flink界面查看报错任务的日志,报错的大意是无法获取到kafka-topic的元数据信息,由于已经明确程序未做任何变更,修改的参数也并不会产生此类报错。
1、优先考虑是不是由于网络波动导致连不上kafka,ping过之后排除网络原因。
2、查看kafka-manager,发现broker的值是13,说明有两台kafka挂掉了,在zookeeper中找到挂掉的两台机器的brokerid(我们的网口用的v6的网口,在kafka-manager界面ipv6的地址无法完全展示,所以没办法通过界面查看是那哪两台挂掉了,如果网口是ipv4的话,应该可以直接通过界面查看)
2、查看挂掉的两台的kafka日志,在kafka安装目录下的 logs/ 目录,ll -rt 命令找到最新的日志文件,通过查看日志发现两台机器是由于JVM的堆内存不足,不停的fullGC,导致程序无法正常连接kafka集群。
3、首先想到的就是增加堆内存,但是由于这两台kafka进程无法通过正常的启停重启(停不掉)。所以只能选择强行kill的方式,但是强行kill掉程序,会导致kafka安装目录下 kafka-logs/ 目录中的index损坏,还是无法正常启动kafka,所以想到一个办法就是先将 *kafka-logs/*目录下的数据移动到别的地方,再启动kafka,然后再将它们移回 kafka-logs/,但是我当时移走发现还是无法启动,于是我又给它移回去了,再启动就可以正常启动了…(很神奇,我也不知道为什么,希望有大佬可以解答一下)。两台挂掉的kafka都进行同样的操作。确保kafka集群的15台机器全部正常。
4、由于堆内存不是一下子占满的,所以等kafka集群正常以后,再停掉kafka集群,在修改堆内存也是可以的(由于我这里允许有数据丢失,所以就全部同时重启了,最好不要这样做,最好的做法就是停一部分留一部分,保证永远有kafka在接收数据)
5、kafka安装目录的 bin/ 目录下,有一个kafka的启动脚本 kafka-server-start.sh,export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 找到这句话,Xmx表示的是最大的堆内存,Xms表示的是初始化的堆内存,根据项目需要修改,我这里是把最大的堆内存从20g扩到了40g,初始化堆内存4g不变。
6、修改完堆内存后重启kafka集群,可以先通过kafka的消费命令消费一个topic,看看能否正常消费。如果不能正常消费,再看kafka日志,定位问题
此致,问题解决。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值