Skip to content

AxonOps — AI-Native Control Plane for Open Source Data Platforms

nodetool sethintedhandoffthrottlekb

Sets the hinted handoff throttle rate in KB per second.


Terminal window
nodetool [connection_options] sethintedhandoffthrottlekb <throttle_in_kb>

See connection options for connection options.

nodetool sethintedhandoffthrottlekb controls the rate at which hints are delivered to recovered nodes. This throttle prevents hint delivery from overwhelming target nodes or consuming excessive network bandwidth.

Per-Thread Throttle

The throttle limit is applied per hinted handoff delivery thread, not as an aggregate node-wide limit. If multiple delivery threads are active, the total throughput may be a multiple of this value.


ArgumentDescription
throttle_in_kbMaximum hint delivery rate in KiB/s per delivery thread. Set to 0 to disable throttling.

cassandra.yaml Parameter

The corresponding cassandra.yaml parameter changed in 4.1:

Cassandra VersionParameter NameExample
Pre-4.1hinted_handoff_throttle_in_kb1024
4.1+hinted_handoff_throttle1024KiB

Terminal window
# Set to 1024 KB/s (1 MB/s)
nodetool sethintedhandoffthrottlekb 1024
Terminal window
# Increase to 2048 KB/s for faster hint delivery
nodetool sethintedhandoffthrottlekb 2048
Terminal window
# Reduce to 512 KB/s to minimize impact on target nodes
nodetool sethintedhandoffthrottlekb 512

Reduce throttle when recovering node is busy:

Terminal window
# Slow down hint delivery
nodetool sethintedhandoffthrottlekb 256
# Monitor target node
ssh <target_node> "nodetool tpstats"

Increase throttle when hints need to be delivered quickly:

Terminal window
# Check pending hints
nodetool listpendinghints
# Increase throttle for faster delivery
nodetool sethintedhandoffthrottlekb 4096

Adjust based on available network capacity:

Terminal window
# High-bandwidth network
nodetool sethintedhandoffthrottlekb 4096
# Limited bandwidth
nodetool sethintedhandoffthrottlekb 512

The default is 1024 KiB/s per delivery thread.

# cassandra.yaml (4.1+)
hinted_handoff_throttle: 1024KiB
# cassandra.yaml (Pre-4.1)
# hinted_handoff_throttle_in_kb: 1024
SettingPersistence
sethintedhandoffthrottlekbUntil restart
cassandra.yamlPermanent

EffectImpact
Hint deliveryFaster
Network usageHigher
Target node loadHigher
Recovery timeShorter
EffectImpact
Hint deliverySlower
Network usageLower
Target node loadLower
Recovery timeLonger

monitor_hint_delivery.sh
#!/bin/bash
echo "=== Hint Delivery Monitor ==="
# Initial hint count
initial=$(nodetool listpendinghints | tail -n +2 | awk '{sum+=$2} END {print sum}')
echo "Initial pending hints: $initial"
# Wait and check again
sleep 60
final=$(nodetool listpendinghints | tail -n +2 | awk '{sum+=$2} END {print sum}')
echo "Pending hints after 60s: $final"
delivered=$((initial - final))
echo "Hints delivered: $delivered"
echo "Approximate rate: $((delivered / 60)) hints/second"

set_hint_throttle_cluster.sh
#!/bin/bash
THROTTLE="$1"
if [ -z "$THROTTLE" ]; then
echo "Usage: $0 <throttle_kb>"
exit 1
fi
# Get list of node IPs from local nodetool status
nodes=$(nodetool status | grep "^UN" | awk '{print $2}')
echo "Setting hint throttle to ${THROTTLE} KiB/s cluster-wide..."
for node in $nodes; do
echo -n "$node: "
ssh "$node" 'nodetool sethintedhandoffthrottlekb '"$THROTTLE"' && echo "OK" || echo "FAILED"'
done

Terminal window
# Check current pending hints
nodetool listpendinghints
# Increase throttle
nodetool sethintedhandoffthrottlekb 4096
# Monitor delivery rate
watch -n 10 'nodetool listpendinghints'
Terminal window
# Check target node health
ssh <target_node> "nodetool tpstats"
# Reduce throttle
nodetool sethintedhandoffthrottlekb 256
# Monitor target node recovery

Throttle Guidelines

  1. Start conservative - Lower throttle for busy clusters
  2. Monitor target nodes - Watch for overload signs
  3. Adjust dynamically - Increase during maintenance windows
  4. Balance speed vs impact - Faster isn't always better
  5. Cluster-wide consistency - Set same value on all nodes

Throttle Selection (per delivery thread)

  • 256-512 KiB/s: Low-impact, slow recovery
  • 1024 KiB/s: Balanced (default)
  • 2048-4096 KiB/s: Fast recovery, higher impact
  • 0: Disable throttling (maximum speed, use cautiously)

CommandRelationship
listpendinghintsView pending hints
statushandoffCheck handoff status
pausehandoffPause hint delivery
resumehandoffResume hint delivery
getmaxhintwindowView hint window