static private Bootstrap createBootStrap(EventLoopGroup eventLoopGroup, Http2ClientConfig http2ClientConfig,
      InetSocketAddress inetSocketAddress) {
    Bootstrap b = new Bootstrap().group(eventLoopGroup)
        .channel(Epoll.isAvailable() ? EpollSocketChannel.class : NioSocketChannel.class)
        .option(ChannelOption.SO_KEEPALIVE, true)
        // To honor http2 window size, WriteBufferWaterMark.high() should be greater or equal to http2 window size.
        // Also see: https://github.com/netty/netty/issues/10193
        // Use reasonable WaterMark, because channel.isWriteable() depends on WriteBufferWaterMark.
        .option(ChannelOption.WRITE_BUFFER_WATER_MARK,
            new WriteBufferWaterMark(http2ClientConfig.http2InitialWindowSize / 2,
                http2ClientConfig.http2InitialWindowSize))
        .remoteAddress(inetSocketAddress);
    if (http2ClientConfig.nettyReceiveBufferSize != -1) {
      b.option(ChannelOption.SO_RCVBUF, http2ClientConfig.nettyReceiveBufferSize);
    }
    if (http2ClientConfig.nettySendBufferSize != -1) {
      b.option(ChannelOption.SO_SNDBUF, http2ClientConfig.nettySendBufferSize);
    }
    return b;
  }
@param inetSocketAddress IP Socket Address (IP address + port number).
@param eventLoopGroup The event loop group.
@param http2ClientConfig http2 client configs.
@param inetSocketAddress Remote Socket Address (IP address + port number).
@return {@link Bootstrap}
ambry-network/src/main/java/com/github/ambry/network/http2/Http2MultiplexedChannelPool.java