记录一次SparkStream中Processing Time时间过长的问题

问题的起因很简单,Spark Stream执行的批任务堆积。

第一次排查

  • 通过UI查看了时间消耗问题。发现主要是在代码中执行saveToEs的时候花费了非常的时间。

  • 查看网络连接,发现通信端存在大量的TIME_WAIT状态的连接。

    • 图片显示的数值是调整了访问2个ES节点地址之后的结果,只访问一个的时候会存在1W多个这样的连接状态。

      1
      2
      3
      4
      5
      6
      7
      8
      vi /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提供的库暂时改不了的情况,寻求其它解决办法。