QuestDB Wire Protocol (QWP)
QWP is QuestDB's columnar binary protocol for high-throughput data ingestion
(/write/v4) and streaming query results (/read/v1) over WebSocket and UDP.
These properties control protocol limits and the UDP receiver. WebSocket
ingestion and egress share the HTTP server's network settings (port, TLS,
worker threads); see
HTTP server configuration for those.
Protocol limits
qwp.max.rows.per.table
- Default:
1000000 - Reloadable: no
Maximum number of rows per table block in a single QWP message. The server rejects batches that exceed this limit with a parse error.
qwp.max.tables.per.connection
- Default:
10000 - Reloadable: no
Maximum number of distinct tables a single connection may write to. The server rejects messages referencing additional tables once this limit is reached.
UDP receiver
The QWP UDP receiver is a fire-and-forget ingestion path for metrics workloads where occasional message loss is acceptable. It is disabled by default. For reliable ingestion, use the WebSocket transport.
qwp.udp.bind.to
- Default:
0.0.0.0:9007 - Reloadable: no
IP address and port the UDP receiver binds to. The default listens on all network interfaces on port 9007.
qwp.udp.commit.interval
- Default:
2000(milliseconds) - Reloadable: no
Time interval between commits for data received over UDP. Lower values reduce the window of uncommitted data at the cost of more frequent I/O.
qwp.udp.enabled
- Default:
false - Reloadable: no
Enable or disable the QWP UDP receiver.
qwp.udp.join
- Default:
224.1.1.1 - Reloadable: no
Multicast group address the UDP receiver joins. Only relevant when
qwp.udp.unicast is false.
qwp.udp.max.uncommitted.datagrams
- Default:
1048576 - Reloadable: no
Maximum number of uncommitted datagrams before the receiver forces a commit, regardless of the time-based commit interval.
qwp.udp.msg.buffer.size
- Default:
65536(bytes) - Reloadable: no
Size of each message buffer allocated for the UDP receiver.
qwp.udp.msg.count
- Default:
10000 - Reloadable: no
Number of message buffers to pre-allocate. Higher values absorb larger bursts at the cost of more memory.
qwp.udp.own.thread
- Default:
true - Reloadable: no
When true, the UDP receiver runs in a dedicated thread with a busy-spin
loop for lowest latency. When false, the receiver uses the shared worker
pool.
qwp.udp.own.thread.affinity
- Default:
-1(no affinity) - Reloadable: no
CPU core affinity for the dedicated UDP receiver thread. A value of -1
lets the OS schedule the thread. Only applies when qwp.udp.own.thread is
true.
qwp.udp.receive.buffer.size
- Default:
-1(OS default) - Reloadable: no
OS-level socket receive buffer size in bytes. A value of -1 uses the
operating system's default. Increase this if you observe datagram drops
under high throughput.
qwp.udp.unicast
- Default:
true - Reloadable: no
When true, the UDP receiver operates in unicast mode. When false, it
joins the multicast group specified by qwp.udp.join.