Elasticsearch http.tcp.keep_alive Setting

The http.tcp.keep_alive setting in Elasticsearch controls whether to enable TCP keep-alive packets for HTTP client connections. This setting helps maintain long-lived connections and detect disconnected clients more quickly.

Description

  • Default value: true
  • Possible values: true or false
  • Recommendation: Keep the default value unless you have specific network requirements

The http.tcp.keep_alive setting is enabled by default, which allows Elasticsearch to send TCP keep-alive packets periodically. This helps in detecting and closing stale connections, preventing resource leaks and improving overall system stability.

Example

To disable TCP keep-alive for HTTP connections, you can use the cluster settings API:

PUT _cluster/settings
{
  "persistent": {
    "http.tcp.keep_alive": false
  }
}

Disabling this setting might be necessary in environments where network policies or firewalls interfere with TCP keep-alive packets. However, this can lead to increased resource consumption due to lingering inactive connections.

Common Issues

  1. Increased number of stale connections when disabled
  2. Potential firewall issues if keep-alive packets are blocked
  3. Slight increase in network traffic due to keep-alive packets

Do's and Don'ts

  • Do: Keep the default setting unless you have specific network requirements
  • Do: Monitor connection counts and resource usage when changing this setting
  • Don't: Disable this setting without understanding the implications on your network and application
  • Don't: Confuse this with HTTP keep-alive, which is a different concept

Frequently Asked Questions

Q: How does http.tcp.keep_alive differ from HTTP keep-alive?
A: http.tcp.keep_alive operates at the TCP level, maintaining the underlying network connection. HTTP keep-alive, on the other hand, is an application-layer protocol feature that allows multiple HTTP requests to use the same TCP connection.

Q: Can enabling http.tcp.keep_alive impact performance?
A: The performance impact is generally minimal. It can slightly increase network traffic due to keep-alive packets, but it helps in maintaining cleaner connection states and can improve overall system stability.

Q: How often are TCP keep-alive packets sent?
A: The frequency of TCP keep-alive packets is determined by the operating system, not Elasticsearch. Typical intervals range from 30 seconds to 2 hours, depending on the OS configuration.

Q: Does this setting affect internal node-to-node communication?
A: No, this setting specifically applies to HTTP client connections. Node-to-node communication uses different transport-layer settings.

Q: Can I change this setting dynamically?
A: Yes, you can change the http.tcp.keep_alive setting dynamically using the cluster settings API. However, the change will only affect new connections; existing connections will maintain their original keep-alive state.

Subscribe to the Pulse Newsletter

Get early access to new Pulse features, insightful blogs & exclusive events , webinars, and workshops.

We use cookies to provide an optimized user experience and understand our traffic. To learn more, read our use of cookies; otherwise, please choose 'Accept Cookies' to continue using our website.