问题的起因很简单,Spark Stream执行的批任务堆积。
第一次排查
通过UI查看了时间消耗问题。发现主要是在代码中执行saveToEs的时候花费了非常的时间。
查看网络连接,发现通信端存在大量的TIME_WAIT状态的连接。
图片显示的数值是调整了访问2个ES节点地址之后的结果,只访问一个的时候会存在1W多个这样的连接状态。
1
2
3
4
5
6
7
8vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
sysctl -p
针对这个情况,暂时没有找到解决的办法,只能推测saveToEsWithMeta这样的函数内部是HTTP短连接每次都会建立新的TCP连接到ES服务器。(还没看源码!)
第二次排查
- 针对ES提供的库暂时改不了的情况,寻求其它解决办法。