KubeMQ
ConfigureReference

Connectors

Runtime settings for MCP, A2A agents, CloudEvents, and the wire-protocol connectors — MQTT, AMQP 0.9.1/1.0, STOMP, Kafka, AWS, and GCP Pub/Sub.

KubeMQ ships ten connectors — the MCP and A2A (agents) agent platforms, CloudEvents, and seven wire-protocol connectors: MQTT, AMQP 0.9.1, AMQP 1.0, STOMP, Kafka, AWS (SQS/SNS), and GCP Pub/Sub. The three HTTP-server connectors (MCP, A2A, CloudEvents) are on by default; the seven wire-protocol connectors are opt-in (disabled by default) — each opens a new network port and must be explicitly enabled. Each setting is shown for both targets — Docker single-node (config.yaml key · env var) and Kubernetes/Helm (spec.* path). A dash () in the Helm/CRD column means the setting is not available on that surface (it is config.yaml/env-var-only — supply it through a mounted config file or a raw pod env var, never a typed CRD field).

Connector environment-variable prefixes follow the acronym rule: all-caps acronym segments drop the underscore (CONNECTORSMCP_*, CONNECTORSCE_*, CONNECTORSMQTT_*, CONNECTORSA2_A_*), while Title-case segments keep it (CONNECTORS_AMQP_*, CONNECTORS_AMQP10_*, CONNECTORS_STOMP_*, CONNECTORS_KAFKA_*, CONNECTORS_AWS_*, CONNECTORS_GCP_*). See the reference legend for the full rule and the silently-ignored wrong twin.

Enabling and disabling a connector

The toggle shape differs by connector type and by target:

  • HTTP-server connectors (MCP, A2A, CloudEvents): always on by default. Docker turns them off with enable: false; Kubernetes/Helm turns them off with disabled: true (omit the key while the connector is on).
  • Wire-protocol connectors (MQTT, AMQP 0.9.1, AMQP 1.0, STOMP, Kafka, AWS, GCP Pub/Sub): disabled by default (opt-in). Docker turns them on with enable: true; Kubernetes/Helm turns them on with enabled: true (a positive-sense field — omitting it leaves the connector off).

The snippets below show turning CloudEvents off (HTTP-server connector, uses disabled:) and enabling MQTT (wire-protocol connector, uses enabled:). See the Docker guide and the Kubernetes guide for complete, runnable configurations.

config.yaml
connectors:
  ce:
    enable: false
values.yaml
ce:
  disabled: true
docker run
docker run -e CONNECTORSMQTT_ENABLE=true ...
values.yaml
mqtt:
  enabled: true

MCP

The Model Context Protocol agent platform, served on the shared HTTP server. Env prefix CONNECTORSMCP_* (all-caps MCP collapses the underscore after CONNECTORS); CRD group spec.mcp.*. This is an HTTP-family connector — on by default (opt-out): Docker turns it off with enable: false, Kubernetes/Helm with spec.mcp.disabled: true.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enable / disablebooltrue (on)true / falseconnectors.mcp.enable · CONNECTORSMCP_ENABLEspec.mcp.disabledInverted boolean: Docker enable: false turns it off; Helm disabled: true turns it off.
Tool timeout (s)int300> 0connectors.mcp.tooltimeoutseconds · CONNECTORSMCP_TOOL_TIMEOUT_SECONDSspec.mcp.toolTimeoutSecondsMust be positive (rejected if ≤ 0). CRD minimum 1.
Trusted originsstring[]["auto"]origin list / "auto"connectors.mcp.trustedorigins · CONNECTORSMCP_TRUSTED_ORIGINSspec.mcp.trustedOriginsauto derives allowed origins from the request host.

The MCP env prefix is CONNECTORSMCP_ — no underscore between CONNECTORS and MCP. The natural CONNECTORS_MCP_* form does not bind — the server starts, accepts the variable without error, and silently ignores it. Unlike CloudEvents, MCP has no natural-name alias, so CONNECTORSMCP_ENABLE / CONNECTORSMCP_TOOL_TIMEOUT_SECONDS / CONNECTORSMCP_TRUSTED_ORIGINS are the only working names.

A2A (Agents)

The agent-to-agent platform, served on the shared HTTP server. Env prefix CONNECTORSA2_A_*; the CRD group is spec.agents.* (note the group name differs from the connector name). This is an HTTP-family connector — on by default (opt-out): Docker turns it off with enable: false, Kubernetes/Helm with spec.agents.disabled: true.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enable / disablebooltrue (on)true / falseconnectors.a2a.enable · CONNECTORSA2_A_ENABLEspec.agents.disabledInverted boolean.
Agent TTL (s)int300> 0connectors.a2a.agentttlseconds · CONNECTORSA2_A_AGENT_TTL_SECONDSspec.agents.agentTtlSecondsMust be positive. CRD json tag is agentTtlSeconds (lowercase tl).
Default timeout (s)int300> 0connectors.a2a.defaulttimeoutseconds · CONNECTORSA2_A_DEFAULT_TIMEOUT_SECONDSspec.agents.defaultTimeoutSecondsMust be positive.
Max timeout (s)int3600≥ default timeoutconnectors.a2a.maxtimeoutseconds · CONNECTORSA2_A_MAX_TIMEOUT_SECONDSspec.agents.maxTimeoutSecondsCross-field: must be ≥ Default timeout (enforced server-side, not by the CRD schema).
Max agentsint0≥ 0 (0 = unlimited)connectors.a2a.maxagents · CONNECTORSA2_A_MAX_AGENTSspec.agents.maxAgents0 = unlimited.
Max SSE idle (s)int300> 0connectors.a2a.maxsseidleseconds · CONNECTORSA2_A_MAX_SSE_IDLE_SECONDSspec.agents.maxSseIdleSecondsMust be positive. CRD json tag is maxSseIdleSeconds.
Trusted originsstring[]["auto"]origin list / "auto"connectors.a2a.trustedorigins · CONNECTORSA2_A_TRUSTED_ORIGINSspec.agents.trustedOrigins
Agent max response (bytes)int6410485760 (10 MB)≥ 0connectors.a2a.agentmaxresponsebytes · CONNECTORSA2_A_AGENT_MAX_RESPONSE_BYTESspec.agents.agentMaxResponseBytesCaps a downstream agent's response body.
Agent TLS skip verifyboolfalsetrue / falseconnectors.a2a.agenttlsskipverify · CONNECTORSA2_A_AGENT_TLS_SKIP_VERIFYspec.agents.agentTlsSkipVerifyCRD json tag is agentTlsSkipVerify.
Agent max concurrencyint100≥ 1connectors.a2a.agentmaxconcurrency · CONNECTORSA2_A_AGENT_MAX_CONCURRENCYspec.agents.agentMaxConcurrencyA value ≤ 0 is silently clamped back to 100 (does not error).
Metrics retention (h)int168 (7 days)> 0connectors.a2a.metricsretentionhours · CONNECTORSA2_A_METRICS_RETENTION_HOURSspec.agents.metricsRetentionHoursMust be positive. Retention window for per-agent metrics.

The A2A env prefix is CONNECTORSA2_A_ — not CONNECTORS_A2A_. The convertEnvFormat rule splits A2A into A2_A (the regex breaks between the digit and the trailing A), so the agent variables read CONNECTORSA2_A_MAX_AGENTS, CONNECTORSA2_A_AGENT_TTL_SECONDS, and so on. Neither CONNECTORS_A2A_* nor CONNECTORSA2A_* binds — both are silently ignored. Note also that the CRD group is spec.agents.*, not spec.a2a.*.

CloudEvents

The CloudEvents connector, served on the shared HTTP server. Env prefix CONNECTORSCE_*; CRD group spec.ce.*. This is an HTTP-family connector — on by default (opt-out): Docker turns it off with enable: false, Kubernetes/Helm with spec.ce.disabled: true.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enable / disablebooltrue (on)true / falseconnectors.ce.enable · CONNECTORSCE_ENABLEspec.ce.disabledInverted boolean.
Timeout (s)int60> 0connectors.ce.timeoutseconds · CONNECTORSCE_TIMEOUT_SECONDSspec.ce.timeoutSecondsMust be positive.
Sub buffer sizeint100110000connectors.ce.subbuffsize · CONNECTORSCE_SUB_BUFF_SIZEspec.ce.subBuffSizeRejected if ≤ 0 or > 10000.
Max SSE idle (s)int300> 0connectors.ce.maxsseidleseconds · CONNECTORSCE_MAX_SSE_IDLE_SECONDSspec.ce.maxSseIdleSecondsMust be positive. CRD json tag is maxSseIdleSeconds.
Max SSE connectionsint0≥ 0 (0 = unlimited)connectors.ce.maxsseconnections · CONNECTORSCE_MAX_SSE_CONNECTIONSspec.ce.maxSseConnections0 = unlimited. CRD json tag is maxSseConnections.

CloudEvents accepts both env forms. The primary name is the collapsed CONNECTORSCE_* (e.g. CONNECTORSCE_ENABLE), but CE is the one connector that also binds the natural CONNECTORS_CE_* alias (CONNECTORS_CE_ENABLE, CONNECTORS_CE_TIMEOUT_SECONDS, …). Both resolve to the same setting — this compensating alias exists only for CloudEvents; MCP, A2A, and MQTT do not have it.

MQTT

The MQTT 3.1.1 / 5.0 wire protocol. Env prefix CONNECTORSMQTT_* (no underscore after CONNECTORS); CRD group spec.mqtt.*. This is a wire-protocol connector — opt-in (disabled by default): Docker turns it on with enable: true, Kubernetes/Helm with spec.mqtt.enabled: true (a positive-sense *bool — omitting it leaves MQTT off). Ports are string server-side ("" disables a listener) and int32 on the CRD.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enable / disableboolfalse (opt-in)true / falseconnectors.mqtt.enable · CONNECTORSMQTT_ENABLEspec.mqtt.enabledOpt-in: set true to open ports 1883/8883/8083. Helm uses positive-sense enabled: true.
Portstring1883port / ""connectors.mqtt.port · CONNECTORSMQTT_PORTspec.mqtt.portPlaintext TCP listener; "" disables it. CRD type int32 (1–65535).
TLS portstring8883port / ""connectors.mqtt.tlsport · CONNECTORSMQTT_TLS_PORTspec.mqtt.tlsPortTLS listener; active only when Security mode ≠ None. "" disables. CRD int32 (1–65535).
WebSocket portstring8083port / ""connectors.mqtt.wsport · CONNECTORSMQTT_WS_PORTspec.mqtt.wsPortWebSocket listener; "" disables. CRD int32 (1–65535).
Default patternenumeventsevents / store / noneconnectors.mqtt.defaultpattern · CONNECTORSMQTT_DEFAULT_PATTERNspec.mqtt.defaultPatternKubeMQ pattern for prefixless topics.
Sub buffer sizeint100110000connectors.mqtt.subbuffsize · CONNECTORSMQTT_SUB_BUFF_SIZEspec.mqtt.subBuffSizeRejected if ≤ 0 or > 10000.
Queue ACK timeout (s)int30> 0connectors.mqtt.queueacktimeoutseconds · CONNECTORSMQTT_QUEUE_ACK_TIMEOUT_SECONDSspec.mqtt.queueAckTimeoutSecondsMust be positive.
RPC timeout (s)int30> 0connectors.mqtt.rpctimeoutseconds · CONNECTORSMQTT_RPC_TIMEOUT_SECONDSspec.mqtt.rpcTimeoutSecondsMust be positive.
RPC max pendingint1024> 0connectors.mqtt.rpcmaxpending · CONNECTORSMQTT_RPC_MAX_PENDINGspec.mqtt.rpcMaxPendingMust be positive.
Detail history enabledbooltruetrue / falseconnectors.mqtt.detailhistoryenabled · CONNECTORSMQTT_DETAIL_HISTORY_ENABLEDspec.mqtt.detailHistoryEnabledMaster switch for per-entity (client/subscription) detail-page history recording.
Detail history max entitiesint5000≥ 0 (0 = unbounded)connectors.mqtt.detailhistorymaxentities · CONNECTORSMQTT_DETAIL_HISTORY_MAX_ENTITIESspec.mqtt.detailHistoryMaxEntitiesCaps tracked per-entity history keys; new keys refused beyond it. Validated even when history is off.
Capabilities · max clientsint640≥ 0 (0 = unlimited)connectors.mqtt.capabilities.maxclients · CONNECTORSMQTT_CAPABILITIES_MAX_CLIENTSspec.mqtt.capabilities.maxClients0 = unlimited (explicit opt-in; startup logs a WARN). Never clamped.
Capabilities · max packet size (bytes)uint324194304 (4 MB)14294967295connectors.mqtt.capabilities.maxpacketsizebytes · CONNECTORSMQTT_CAPABILITIES_MAX_PACKET_SIZE_BYTESspec.mqtt.capabilities.maxPacketSizeBytesA 0 is clamped back to 4 MB (0 = "unlimited" is a DoS footgun); effective value logged at startup.
Capabilities · receive maximumuint161024165535connectors.mqtt.capabilities.receivemaximum · CONNECTORSMQTT_CAPABILITIES_RECEIVE_MAXIMUMspec.mqtt.capabilities.receiveMaximumA 0 is clamped back to 1024.
Capabilities · max inflightuint168192065535connectors.mqtt.capabilities.maxinflight · CONNECTORSMQTT_CAPABILITIES_MAX_INFLIGHTspec.mqtt.capabilities.maxInflightNot clamped.
Capabilities · max session expiry (s)uint32360014294967295connectors.mqtt.capabilities.maxsessionexpiryseconds · CONNECTORSMQTT_CAPABILITIES_MAX_SESSION_EXPIRY_SECONDSspec.mqtt.capabilities.maxSessionExpirySecondsA 0 is clamped back to 3600.
Capabilities · max message expiry (s)int6486400≥ 0connectors.mqtt.capabilities.maxmessageexpiryseconds · CONNECTORSMQTT_CAPABILITIES_MAX_MESSAGE_EXPIRY_SECONDSspec.mqtt.capabilities.maxMessageExpirySecondsRejected if negative.
Capabilities · max QoSbyte202connectors.mqtt.capabilities.maxqos · CONNECTORSMQTT_CAPABILITIES_MAX_QOSspec.mqtt.capabilities.maxQosRejected if > 2.
Capabilities · min protocol versionbyte44 / 5connectors.mqtt.capabilities.minprotocolversion · CONNECTORSMQTT_CAPABILITIES_MIN_PROTOCOL_VERSIONspec.mqtt.capabilities.minProtocolVersion4 = MQTT 3.1.1, 5 = MQTT 5.0.
Capabilities · max subscriptions per clientint1000≥ 0 (0 = unlimited)connectors.mqtt.capabilities.maxsubscriptionsperclient · CONNECTORSMQTT_CAPABILITIES_MAX_SUBSCRIPTIONS_PER_CLIENTspec.mqtt.capabilities.maxSubscriptionsPerClientCaps distinct subscription filters per client; excess SUBSCRIBEs get SUBACK 0x97 (DoS cap). 0 = unlimited.

The MQTT env prefix is CONNECTORSMQTT_ — no underscore between CONNECTORS and MQTT. The natural CONNECTORS_MQTT_* form does not bind and is silently ignored. This applies to every MQTT variable, including the nested CONNECTORSMQTT_CAPABILITIES_* keys. Unlike CloudEvents, MQTT has no natural-name alias.

Some MQTT capabilities are forced, not configurable. At server construction the connector pins RetainAvailable = 0 (retained messages rejected), SharedSubAvailable = 1, and WildcardSubAvailable = 1 regardless of config. A partially-specified capabilities block leaves unset safety caps (maxPacketSizeBytes, receiveMaximum, maxSessionExpirySeconds) at 0, which the server clamps back to their safe defaults rather than treating as "unlimited" — the effective caps are logged at startup. At least one listener port (port, tlsPort, or wsPort) must be non-empty, and no two may share the same value.

AMQP 0.9.1

The AMQP 0.9.1 / RabbitMQ wire protocol. Env prefix CONNECTORS_AMQP_*; CRD group spec.amqp.*.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.amqp.enable · CONNECTORS_AMQP_ENABLEspec.amqp.enabledOpt-in wire connector: Docker enable: true, Helm enabled: true (positive-sense). Opens ports 5672/5671 (shared mux with AMQP 1.0).
Portint5672065535 (0 disables)connectors.amqp.port · CONNECTORS_AMQP_PORTspec.amqp.portPlaintext listener, shared with AMQP 1.0. Port and TlsPort cannot both be 0 when enabled. CRD accepts 165535.
TLS portint5671065535 (0 disables)connectors.amqp.tlsport · CONNECTORS_AMQP_TLS_PORTspec.amqp.tlsPortTLS listener.
Heartbeat (s)int600connectors.amqp.heartbeatseconds · CONNECTORS_AMQP_HEARTBEAT_SECONDSspec.amqp.heartbeatSeconds
Frame max (bytes)int1310724096connectors.amqp.framemax · CONNECTORS_AMQP_FRAME_MAXspec.amqp.frameMaxSilently clamped down to 536870912 (512 MiB) if set higher (a stderr warning is emitted); a value ≥ 2³² would otherwise narrow to 0 and disable the codec frame-size cap.
Channel maxint2047165535connectors.amqp.channelmax · CONNECTORS_AMQP_CHANNEL_MAXspec.amqp.channelMax
Max connectionsint10000 (0 = unlimited)connectors.amqp.maxconnections · CONNECTORS_AMQP_MAX_CONNECTIONSspec.amqp.maxConnections0 = unlimited.
Max body size (bytes)int104857600> 0connectors.amqp.maxbodysize · CONNECTORS_AMQP_MAX_BODY_SIZEspec.amqp.maxBodySize
Default vhoststringdefaultnon-empty; no whitespace or ;:*>; no trailing .connectors.amqp.defaultvhost · CONNECTORS_AMQP_DEFAULT_VHOSTspec.amqp.defaultVhostBecomes a channel segment, so it must pass the channel-charset rules.
Get batch sizeint3211024connectors.amqp.getbatchsize · CONNECTORS_AMQP_GET_BATCH_SIZEspec.amqp.getBatchSizeMust also be ≤ queue.maxNumberOfMessages (cross-checked in top-level config validation).
Dead-letter max hopsint161connectors.amqp.deadlettermaxhops · CONNECTORS_AMQP_DEAD_LETTER_MAX_HOPSspec.amqp.deadLetterMaxHops
Max receive countint00 (0 = unlimited)connectors.amqp.maxreceivecount · CONNECTORS_AMQP_MAX_RECEIVE_COUNTspec.amqp.maxReceiveCount0 = unlimited. Must also be ≤ queue.maxReceiveCount (cross-checked in top-level config validation).

Two cross-checks against the queue limits. The server rejects the config unless amqp.maxReceiveCount ≤ queue.maxReceiveCount and amqp.getBatchSize ≤ queue.maxNumberOfMessages. Keep the AMQP values within the queue ceilings (see Storage & Queues).

AMQP 1.0

The AMQP 1.0 wire protocol (also the JMS / Qpid path). Env prefix CONNECTORS_AMQP10_*; CRD group spec.amqp10.*.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.amqp10.enable · CONNECTORS_AMQP10_ENABLEspec.amqp10.enabledOpt-in wire connector. Opens ports 5672/5671 (shared mux with AMQP 0.9.1).
Portint5672065535 (0 disables)connectors.amqp10.port · CONNECTORS_AMQP10_PORTspec.amqp10.portShared with AMQP 0.9.1 — a Port == Amqp.Port collision is intentionally allowed (the mux dedupes the bind). Port and TlsPort cannot both be 0.
TLS portint5671065535 (0 disables)connectors.amqp10.tlsport · CONNECTORS_AMQP10_TLS_PORTspec.amqp10.tlsPort
Max frame size (bytes)int131072512connectors.amqp10.maxframesize · CONNECTORS_AMQP10_MAX_FRAME_SIZEspec.amqp10.maxFrameSizeSpec floor 512.
Max message size (bytes)int64104857600> 0connectors.amqp10.maxmessagesize · CONNECTORS_AMQP10_MAX_MESSAGE_SIZEspec.amqp10.maxMessageSizeint64; matches the AMQP 0.9.1 maxBodySize default (100 MB).
Session maxint256165535connectors.amqp10.sessionmax · CONNECTORS_AMQP10_SESSION_MAXspec.amqp10.sessionMax
Max links per sessionint2561connectors.amqp10.maxlinkspersession · CONNECTORS_AMQP10_MAX_LINKS_PER_SESSIONspec.amqp10.maxLinksPerSession
Max connectionsint10000 (0 = unlimited)connectors.amqp10.maxconnections · CONNECTORS_AMQP10_MAX_CONNECTIONSspec.amqp10.maxConnections0 = unlimited.
Idle timeout (s)int1200 (0 = disabled)connectors.amqp10.idletimeoutseconds · CONNECTORS_AMQP10_IDLE_TIMEOUT_SECONDSspec.amqp10.idleTimeoutSeconds0 = disabled.
Default patternenumqueuesqueues / events / events-store / commands / queriesconnectors.amqp10.defaultpattern · CONNECTORS_AMQP10_DEFAULT_PATTERNspec.amqp10.defaultPatternKubeMQ pattern mapped from AMQP addresses.
Get batch sizeint3211024connectors.amqp10.getbatchsize · CONNECTORS_AMQP10_GET_BATCH_SIZEspec.amqp10.getBatchSize
Max unsettled per linkint10241connectors.amqp10.maxunsettledperlink · CONNECTORS_AMQP10_MAX_UNSETTLED_PER_LINKspec.amqp10.maxUnsettledPerLink
Default RPC timeout (s)int301connectors.amqp10.defaultrpctimeoutseconds · CONNECTORS_AMQP10_DEFAULT_RPC_TIMEOUT_SECONDSspec.amqp10.defaultRpcTimeoutSeconds
RPC max pendingint5121connectors.amqp10.rpcmaxpending · CONNECTORS_AMQP10_RPC_MAX_PENDINGspec.amqp10.rpcMaxPending

AMQP 1.0 shares port 5672 (and TLS 5671) with AMQP 0.9.1. The two protocols are demultiplexed on a single shared listener, so running both on the default ports is fine. If you set a different port for one, keep the pair consistent so clients reach the listener you intend.

STOMP

The STOMP 1.0 / 1.1 / 1.2 wire protocol. Env prefix CONNECTORS_STOMP_*; CRD group spec.stomp.*.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.stomp.enable · CONNECTORS_STOMP_ENABLEspec.stomp.enabledOpt-in wire connector. Opens ports 61613/61614.
Portstring61613"" (disabled) or 165535connectors.stomp.port · CONNECTORS_STOMP_PORTspec.stomp.portPlaintext listener. String on the server ("" disables); the CRD takes an int32 (165535). Port must differ from TlsPort.
TLS portstring61614"" (disabled) or 165535connectors.stomp.tlsport · CONNECTORS_STOMP_TLS_PORTspec.stomp.tlsPortTLS listener. At least one of Port/TlsPort must be set.
Default patternenumeventsevents / queues / store / noneconnectors.stomp.defaultpattern · CONNECTORS_STOMP_DEFAULT_PATTERNspec.stomp.defaultPatternKubeMQ pattern for bare (prefixless) destinations.
Sub buffer sizeint100110000connectors.stomp.subbuffsize · CONNECTORS_STOMP_SUB_BUFF_SIZEspec.stomp.subBuffSizeEvents deliver-channel buffer.
Max connectionsint10000 (0 = unlimited)connectors.stomp.maxconnections · CONNECTORS_STOMP_MAX_CONNECTIONSspec.stomp.maxConnections0 = unlimited.
Max body size (bytes)int104857600> 0connectors.stomp.maxbodysize · CONNECTORS_STOMP_MAX_BODY_SIZEspec.stomp.maxBodySize
Heartbeat (ms)int100000 (0 = disabled)connectors.stomp.heartbeatms · CONNECTORS_STOMP_HEARTBEAT_MSspec.stomp.heartbeatMsAdvertised sx,sy; 0 disables the server side.
Queue ACK timeout (s)int30> 0connectors.stomp.queueacktimeoutseconds · CONNECTORS_STOMP_QUEUE_ACK_TIMEOUT_SECONDSspec.stomp.queueAckTimeoutSeconds
RPC timeout (s)int30> 0connectors.stomp.rpctimeoutseconds · CONNECTORS_STOMP_RPC_TIMEOUT_SECONDSspec.stomp.rpcTimeoutSecondsSilently clamped down to 2147483 (~24.8 days) if set higher, so timeout × 1000 cannot overflow the int32 RPC-bridge deadline.
RPC max pendingint1024> 0connectors.stomp.rpcmaxpending · CONNECTORS_STOMP_RPC_MAX_PENDINGspec.stomp.rpcMaxPendingIn-flight RPC cap.

Kafka

The embedded Kafka drop-in connector — KubeMQ speaks the native Kafka wire protocol, so real librdkafka/kcat/Java clients connect unchanged. Env prefix CONNECTORS_KAFKA_*; CRD group spec.kafka.*. As of v3.1 the connector is compiled into the default build (no build tag) and gated purely at runtime by Enable.

Eight fields are exposed as typed CRD fields (spec.kafka.*) — including the Service-exposure type; the remaining advanced knobs — fourteen scalars plus the six-field OAUTHBEARER block — are config.yaml/env-var-only (Helm/CRD path ) and were deliberately deferred from the CRD in v3.1 — set them via a mounted config file or a raw pod env var. The SASL credential store is secret/file-only (no env var, no CRD field).

See the Kafka connector overview and the migration guide for adoption planning, fitness assessment, and cutover tooling beyond this config reference.

Kafka requires the next storage engine — but it's zero-config. On a fresh store with Kafka enabled and Store.Engine unset, the server auto-selects next (a NOTICE is logged) — no manual store.engine=next step needed. It fails closed only when the store directory already holds legacy data (a config error naming the conflicting directory) or Store.Engine=legacy is set explicitly alongside Kafka. Pinning STORE_ENGINE=next skips the probe entirely and always wins. See Storage Engines.

Core (CRD-exposed) settings

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.kafka.enable · CONNECTORS_KAFKA_ENABLEspec.kafka.enabledOpt-in wire connector. Opens ports 9092/9093.
Portstring9092"" (disabled) or 165535connectors.kafka.port · CONNECTORS_KAFKA_PORTspec.kafka.portPlaintext listener. A TLS-only config (TlsPort set, Port empty) is rejected — the TLS accept path is not yet wired, so Port is currently required. Port must differ from TlsPort.
TLS portstring9093"" (disabled) or 165535connectors.kafka.tlsport · CONNECTORS_KAFKA_TLS_PORTspec.kafka.tlsPortReserved TLS listener (see the TLS-only note above).
Advertised hoststring""hostname / IPconnectors.kafka.advertisedhost · CONNECTORS_KAFKA_ADVERTISED_HOSTspec.kafka.advertisedHostThe single broker address handed to every client in Metadata/FindCoordinator. Set it to the external LoadBalancer DNS / NodePort IP (or the in-cluster Service DNS) — leaving it "" falls back to the server Host, then the pod hostname, which is unreachable off-pod (connect-then-hang). The TLS cert SAN must include this value.
Advertised portint0065535 (0 = use Port)connectors.kafka.advertisedport · CONNECTORS_KAFKA_ADVERTISED_PORTspec.kafka.advertisedPortThe external LB/NodePort port. 0 = fall back to Port on the config.yaml/env path. The CRD schema is stricter than the server: spec.kafka.advertisedPort enforces minimum: 1, so 0 is rejected on the typed CRD field even though the server itself accepts it.
Max connectionsint10000 (0 = unlimited)connectors.kafka.maxconnections · CONNECTORS_KAFKA_MAX_CONNECTIONSspec.kafka.maxConnections0 = unlimited.
Max message bytesint104857611073741824 (1 GiB)connectors.kafka.maxmessagebytes · CONNECTORS_KAFKA_MAX_MESSAGE_BYTESspec.kafka.maxMessageBytesPer-message cap (1 MiB default). Hard ceiling 1 GiB — Kafka frames are int32-length-prefixed, so a larger value would truncate.
Service exposurestring (enum)ClusterIPClusterIP / NodePort / LoadBalancer— (Docker: -p host port mapping)spec.kafka.exposeKubernetes Service type for the Kafka listener — same three values as the gRPC/REST/API expose fields.

Advanced settings (config.yaml / env-var only — no CRD field)

These are on the configData allowlist (deferred from the CRD in v3.1). Every one has a working env var but no spec.kafka.* path — mount them via config file or a raw pod env var.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Max fetch wait (ms)int1000300000 (5 min)connectors.kafka.maxfetchwaitms · CONNECTORS_KAFKA_MAX_FETCH_WAIT_MSCeiling a client's fetch.max.wait.ms is clamped to. ≤ 0 falls back to the 1 s default; an over-ceiling value is rejected.
Timestamp typestringCreateTime"" / CreateTimeconnectors.kafka.timestamptype · CONNECTORS_KAFKA_TIMESTAMP_TYPELogAppendTime is rejected (deferred); any other value is rejected.
Offsets retention (min)int10080 (7 days)52560000 (100 yr)connectors.kafka.offsetsretentionminutes · CONNECTORS_KAFKA_OFFSETS_RETENTION_MINUTESCommitted-offset expiry. ≤ 0 is floored to the default (no "retain forever"); over-ceiling rejected.
Max groupsint1000010000000connectors.kafka.maxgroups · CONNECTORS_KAFKA_MAX_GROUPSCoordinator-wide consumer-group registry cap. ≤ 0 floored to default; over-ceiling rejected.
Max topics per requestint100001000000connectors.kafka.maxtopicsperrequest · CONNECTORS_KAFKA_MAX_TOPICS_PER_REQUESTPer-request distinct-topic cap (DoS fan-out guard). ≤ 0 floored; over-ceiling rejected.
Max partitions per requestint10000010000000connectors.kafka.maxpartitionsperrequest · CONNECTORS_KAFKA_MAX_PARTITIONS_PER_REQUESTPer-request distinct-partition cap. ≤ 0 floored; over-ceiling rejected.
SCRAM iterationsint40961000000connectors.kafka.scramiterations · CONNECTORS_KAFKA_SCRAM_ITERATIONSPBKDF2 iteration count for the SCRAM verifier. ≤ 0 floored to 4096 (RFC-7677 minimum); over-ceiling rejected.
SASL mechanismsstring[][] (offer PLAIN, SCRAM-SHA-256, SCRAM-SHA-512)subset of PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER (empty = offer the first three only)connectors.kafka.saslmechanisms · CONNECTORS_KAFKA_SASL_MECHANISMSEmpty = offer the first three (PLAIN, SCRAM-SHA-256, SCRAM-SHA-512). OAUTHBEARER is never part of the implicit default — it must be listed explicitly, and doing so requires OAuthBearer.Issuer set (see OAUTHBEARER authentication below). A non-empty allow-list restricts what SaslHandshake offers (e.g. SCRAM-only, dropping cleartext PLAIN); an unknown entry is rejected.
Produce byte rateint0 (unlimited)1099511627776 (1 TiB/s)connectors.kafka.producebyterate · CONNECTORS_KAFKA_PRODUCE_BYTE_RATEPer-principal produce quota (bytes/s). 0 = unlimited (ThrottleMillis=0). < 0 floored to 0; over-ceiling rejected.
Fetch byte rateint0 (unlimited)1099511627776 (1 TiB/s)connectors.kafka.fetchbyterate · CONNECTORS_KAFKA_FETCH_BYTE_RATEFetch-direction twin of the produce quota.
Max transaction timeout (ms)int900000 (15 min)86400000 (24 h)connectors.kafka.maxtransactiontimeoutms · CONNECTORS_KAFKA_MAX_TRANSACTION_TIMEOUT_MSCeiling on the transaction.timeout.ms a client negotiates. ≤ 0 floored; over-ceiling rejected.
Transactional ID expiration (ms)int64604800000 (7 days)3153600000000 (100 yr)connectors.kafka.transactionalidexpirationms · CONNECTORS_KAFKA_TRANSACTIONAL_ID_EXPIRATION_MSIdle-transactional.id reaper deadline. int64. ≤ 0 floored; over-ceiling rejected.
Max transactional IDsint1000010000000connectors.kafka.maxtransactionalids · CONNECTORS_KAFKA_MAX_TRANSACTIONAL_I_DSTxn-coordinator registry cap. Env-name trap (see callout). ≤ 0 floored; over-ceiling rejected.
Producer ID block sizeint10001000000connectors.kafka.produceridblocksize · CONNECTORS_KAFKA_PRODUCER_ID_BLOCK_SIZEProducer-ID allocation block. ≤ 0 floored; over-ceiling rejected.
SASL credentialsstruct[]list of {username, password}connectors.kafka.credentials (config file / secret only)Secret — no env var, no CRD field. SASL/PLAIN + SCRAM user store; when non-empty, SASL auth is enforced on every listener. Validate() rejects empty or duplicate usernames, empty passwords, and a username matching the reserved internal dashboard identity. Passwords are redacted in logs.

Kafka env-var trap: CONNECTORS_KAFKA_MAX_TRANSACTIONAL_I_DS. The MaxTransactionalIDs field renders to ..._MAX_TRANSACTIONAL_I_DS (an extra underscore before DS), not the intuitive ..._MAX_TRANSACTIONAL_IDS. The wrong form does not bind and is silently ignored. All other Kafka names follow the normal CONNECTORS_KAFKA_* rule.

Kafka SASL credentials are secret/file-only. Unlike AWS, there is no CredentialsData env-var escape hatch and no CRD field — supply the credentials list through a mounted config.yaml (or Secret-mounted file). Plan the credential delivery path before enabling SASL on Kubernetes.

OAUTHBEARER authentication

OAUTHBEARER activates when OAuthBearer.Issuer is non-empty — there is no separate enable flag. It is enforced only on the TLS/SASL_SSL listener (TlsPort); like the advanced knobs above, it is config.yaml/env-var-only (Helm/CRD path , not a CRD field).

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Issuerstring""non-empty to activate; else OAUTHBEARER stays offconnectors.kafka.oauthbearer.issuer (by convention — the env var is authoritative) · CONNECTORS_KAFKAO_AUTH_BEARER_ISSUERNon-empty requires a non-empty TlsPort — a bearer token must not cross a plaintext transport.
Client IDstring""required unless Skip client-ID check is trueconnectors.kafka.oauthbearer.clientid (by convention) · CONNECTORS_KAFKAO_AUTH_BEARER_CLIENT_IDThe OIDC audience. Enforced only when Issuer is set.
Skip client-ID checkboolfalsetrue / falseconnectors.kafka.oauthbearer.skipclientidcheck (by convention) · CONNECTORS_KAFKAO_AUTH_BEARER_SKIP_CLIENT_ID_CHECKThe one skip-flag Kafka permits as true — some IdPs legitimately omit or vary the audience claim.
Skip expiry checkboolfalsemust stay falseconnectors.kafka.oauthbearer.skipexpirycheck (by convention) · CONNECTORS_KAFKAO_AUTH_BEARER_SKIP_EXPIRY_CHECKtrue is hard-rejected on the Kafka listener — stricter than the generic OIDC authentication path, which only warns.
Skip issuer checkboolfalsemust stay falseconnectors.kafka.oauthbearer.skipissuercheck (by convention) · CONNECTORS_KAFKAO_AUTH_BEARER_SKIP_ISSUER_CHECKtrue is hard-rejected — it would accept tokens from any issuer.
Insecure skip signature checkboolfalsemust stay falseconnectors.kafka.oauthbearer.insecureskipsignaturecheck (by convention) · CONNECTORS_KAFKAO_AUTH_BEARER_INSECURE_SKIP_SIGNATURE_CHECKtrue is hard-rejected — it would accept forged/unsigned tokens.

OAUTHBEARER env-var trap: CONNECTORS_KAFKAO_AUTH_BEARER_*. The prefix is CONNECTORS_KAFKAO_AUTH_BEARER_*, not the intuitive CONNECTORS_KAFKA_OAUTH_BEARER_*Kafka and OAuthBearer fuse into one word (KAFKAO), then Auth/Bearer split normally. The natural-looking form does not bind and is silently ignored.

Skip-flags are hard-rejected on Kafka, not just warned. Setting Insecure skip signature check, Skip issuer check, or Skip expiry check to true on the Kafka listener is rejected outright by Validate() — stricter than the generic OIDC authentication path, which only warns. Skip client-ID check is the one permitted skip. (OAuthBearer.Issuer also requires a non-empty TlsPort — see the Issuer row above.)

AWS

The AWS SQS/SNS-compatible connector. Env prefix CONNECTORS_AWS_*; CRD group spec.aws.*.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.aws.enable · CONNECTORS_AWS_ENABLEspec.aws.enabledOpt-in wire connector. Opens port 4566.
Portstring4566165535connectors.aws.port · CONNECTORS_AWS_PORTspec.aws.portRejected if it collides with the gRPC/REST/HTTP or GCP listener port.
Regionstringkubemqnon-emptyconnectors.aws.region · CONNECTORS_AWS_REGIONspec.aws.region
Account IDstring000000000000^[0-9]{12}$connectors.aws.accountid · CONNECTORS_AWS_ACCOUNT_IDspec.aws.accountIdExactly 12 digits.
Advertised URLstring"""" or scheme://host[:port]connectors.aws.advertisedurl · CONNECTORS_AWS_ADVERTISED_URLspec.aws.advertisedUrlRejected unless it parses with a scheme and host.
Max inflight per queueint20000110000000connectors.aws.maxinflightperqueue · CONNECTORS_AWS_MAX_INFLIGHT_PER_QUEUEspec.aws.maxInflightPerQueueOver-ceiling rejected (OOM guard).
Max concurrent pollsint102411000000connectors.aws.maxconcurrentpolls · CONNECTORS_AWS_MAX_CONCURRENT_POLLSspec.aws.maxConcurrentPollsOver-ceiling rejected.
Read timeout (s)int6013600connectors.aws.readtimeout · CONNECTORS_AWS_READ_TIMEOUTspec.aws.readTimeoutPer-action sync deadline; over-ceiling rejected.
Body limitstring2Msize stringconnectors.aws.bodylimit · CONNECTORS_AWS_BODY_LIMITspec.aws.bodyLimit
Message signingboolfalsetrue / falseconnectors.aws.messagesigning · CONNECTORS_AWS_MESSAGE_SIGNINGspec.aws.messageSigningSign SNS Notification / SubscriptionConfirmation envelopes (SigV2).
Signing cert TTL (h)int87601connectors.aws.signingcertttlhours · CONNECTORS_AWS_SIGNING_CERT_TTL_HOURSspec.aws.signingCertTtlHoursSelf-signed signing-cert validity (default 365 days). Applies when message signing is on.
Credentials (data blob)string""JSON or base64-of-JSON credential arrayconnectors.aws.credentialsdata · CONNECTORS_AWS_CREDENTIALS_DATAspec.aws.credentialsDataSigV4 credential array. On Helm/CRD this is rendered into a Kubernetes Secret (not a plain ConfigMap).
Credentials (structured)struct[]list of {accessKeyId, secretAccessKey, clientID}connectors.aws.credentials (config file only)No env var, no CRD field. File/structured-only credential list; the env/CRD path is credentialsData. Empty or duplicate accessKeyId is rejected; clientID defaults to accessKeyId.

AWS credentials go through a Secret, not a plain CRD value. The spec.aws.credentialsData field exists but the operator writes it into a Kubernetes Secret (CONNECTORS_AWS_CREDENTIALS_DATA), never a ConfigMap. On Docker, set connectors.aws.credentialsdata (JSON or base64-of-JSON) or the CONNECTORS_AWS_CREDENTIALS_DATA env var. The fully-structured connectors.aws.credentials list is config-file-only and has no env/CRD route.

GCP Pub/Sub

The Google Cloud Pub/Sub emulator connector (gRPC). Env prefix CONNECTORS_GCP_*; CRD group spec.gcp.*.

SettingTypeDefaultValid valuesDocker (config.yaml key · env var)Helm/CRD pathNotes
Enableboolfalse (opt-in)true / falseconnectors.gcp.enable · CONNECTORS_GCP_ENABLEspec.gcp.enabledOpt-in wire connector. Opens port 8085.
Portstring8085165535connectors.gcp.port · CONNECTORS_GCP_PORTspec.gcp.portgRPC listener (Pub/Sub emulator convention). Rejected if it collides with the gRPC/REST/HTTP or AWS listener port.
Advertised endpointstring""endpointconnectors.gcp.advertisedendpoint · CONNECTORS_GCP_ADVERTISED_ENDPOINTspec.gcp.advertisedEndpointEndpoint advertised to clients.
Max message bytesint10485760 (10 MiB)11073741824 (1 GiB)connectors.gcp.maxmessagebytes · CONNECTORS_GCP_MAX_MESSAGE_BYTESspec.gcp.maxMessageBytesFeeds the gRPC frame ceiling (value + 1 MiB); hard cap 1 GiB.
Default ack deadline (s)int1010600connectors.gcp.defaultackdeadlineseconds · CONNECTORS_GCP_DEFAULT_ACK_DEADLINE_SECONDSspec.gcp.defaultAckDeadlineSeconds
Max outstanding messagesint1000> 0connectors.gcp.maxoutstandingmessages · CONNECTORS_GCP_MAX_OUTSTANDING_MESSAGESspec.gcp.maxOutstandingMessages
Max inflight per subscriptionint20000> 0connectors.gcp.maxinflightpersubscription · CONNECTORS_GCP_MAX_INFLIGHT_PER_SUBSCRIPTIONspec.gcp.maxInflightPerSubscription
Max concurrent pollsint1024> 0connectors.gcp.maxconcurrentpolls · CONNECTORS_GCP_MAX_CONCURRENT_POLLSspec.gcp.maxConcurrentPolls
Max concurrent streamsint10240 (default) or 165536connectors.gcp.maxconcurrentstreams · CONNECTORS_GCP_MAX_CONCURRENT_STREAMSspec.gcp.maxConcurrentStreamsPer-server cap on concurrent StreamingPull streams. 0 = use the built-in default (1024).
Delivery shardsint161256connectors.gcp.deliveryshards · CONNECTORS_GCP_DELIVERY_SHARDSspec.gcp.deliveryShardsStriped delivery-pool shards.
Max ack extension (s)int6000 (disabled) or 103600connectors.gcp.maxackextensionseconds · CONNECTORS_GCP_MAX_ACK_EXTENSION_SECONDSspec.gcp.maxAckExtensionSeconds0 disables the ordered-head ack-deadline keep-alive.
Stream close (s)int1800> 0connectors.gcp.streamcloseseconds · CONNECTORS_GCP_STREAM_CLOSE_SECONDSspec.gcp.streamCloseSeconds
Max seek replayint1000000> 0connectors.gcp.maxseekreplay · CONNECTORS_GCP_MAX_SEEK_REPLAYspec.gcp.maxSeekReplay
Enable reflectionboolfalsetrue / falseconnectors.gcp.enablereflection · CONNECTORS_GCP_ENABLE_REFLECTIONspec.gcp.enableReflectiongRPC server reflection.

Enable GCP Pub/Sub explicitly. A stock kubemq-server does not bind port 8085 until you set CONNECTORS_GCP_ENABLE=true (Docker) or spec.gcp.enabled: true (Kubernetes). Point clients at the connector with PUBSUB_EMULATOR_HOST=localhost:8085 — no auth, no TLS (emulator mode).

Was this page helpful?

On this page