Skip to main content
SDKs connect over TCP and stream binary batches. This is the fastest ingestion path — 64M events/sec — and the default for all native SDKs (Go, Swift, Flutter, C++).
[[sources.tcp]]
port = 50000
That’s it. The defaults handle most deployments. SDKs authenticate with an API key embedded in each batch.

Forwarding mode

You can run multiple TCP sources. A common pattern is one port for direct SDK traffic and another for Tell-to-Tell forwarding between regions:
[[sources.tcp]]
port = 50000

[[sources.tcp]]
port = 8081
forwarding_mode = true
With forwarding_mode = true, the source trusts the original client IP embedded in forwarded batches instead of using the forwarder’s connection IP.

Backpressure

If the pipeline can’t keep up, batches are dropped rather than blocking. This keeps all connections responsive — no single slow sink stalls ingestion.

Advanced

Full config reference with defaults:
[[sources.tcp]]
port = 50000
address = "::"              # Bind address (default: dual-stack IPv4+IPv6)
forwarding_mode = false      # Trust source_ip from upstream forwarders
no_delay = true              # Disable Nagle's algorithm for lower latency
keepalive = true             # TCP keepalive probes
flush_interval = "100ms"     # Flush partial batches after this interval
batch_size = 500             # Messages per batch before flush
max_connections = 10000      # Reject new connections above this limit
buffer_size = 1048576        # Read buffer per connection (1 MB)
socket_buffer_size = 262144  # OS socket buffer (256 KB)
connection_timeout = "0s"    # Idle timeout (0 = no timeout)