# spring-cloud/spring-cloud-stream architecture

> Architecture diagram of the GitHub repository spring-cloud/spring-cloud-stream, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/spring-cloud/spring-cloud-stream
- Repository: https://github.com/spring-cloud/spring-cloud-stream

## Overview

Spring Cloud Stream is a framework for message-driven applications that connects application functions to broker destinations through configurable binders. The principal channel-based workflow resolves binding settings, selects a binder, and creates producer or consumer bindings to a broker; Kafka Streams provides a distinct native-streams path. The repository also includes schema-registry services and an Avro client. README claims establish the supported binder capabilities; source excerpts confirm core binding, lifecycle, Kafka Streams query, and schema operations, but do not expose every binder’s internal call wiring.

Main entry points: [`core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java`](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java) (Binding service), [`binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java`](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java) (Kafka binder), [`binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java`](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java) (Rabbit binder), [`binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java`](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java) (Pulsar binder)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Binding core"]
  node_settings["Binding settings"]
  node_binding["Binding service"]
  node_binderfactory["Binder factory<br/>[BinderFactory.java]"]
  node_lifecycle["Binding lifecycle"]
  node_partition["Partition routing"]
end

subgraph group_channel["Channel binders"]
  node_kafka["Kafka binder"]
  node_kafka_provision["Kafka provisioning"]
  node_rabbit["Rabbit binder"]
  node_rabbit_provision["Rabbit provisioning"]
  node_pulsar["Pulsar binder"]
  node_pulsar_provision["Pulsar provisioning"]
end

subgraph group_streams["Kafka Streams"]
  node_kstream_binder["Kafka Streams binder<br/>[KStreamBinder.java]"]
  node_function_processor["Function processor"]
  node_streams_manager["Streams manager"]
  node_streams_registry[("Streams registry")]
  node_interactive_query["Interactive queries"]
end

subgraph group_schema["Schema registry"]
  node_schema_server["Schema server"]
  node_schema_repository[("Schema repository")]
  node_registry_client["Registry client"]
  node_schema_cache[("Schema cache")]
  node_avro_service["Avro serialization"]
end

node_application(("Stream application"))
node_broker{{"Message broker"}}
node_kafka_cluster{{"Kafka cluster"}}
node_schema_consumer(("Schema consumer"))

node_application -->|"supplies configuration"| node_settings
node_binding -->|"reads properties"| node_settings
node_application -->|"defines bindings"| node_lifecycle
node_lifecycle -->|"starts bindings"| node_binding
node_binding -->|"selects binder"| node_binderfactory
node_binding -->|"creates binding"| node_kafka
node_binding -->|"creates binding"| node_rabbit
node_binding -->|"creates binding"| node_pulsar
node_partition -.->|"selects partition"| node_kafka
node_kafka -->|"provisions destinations"| node_kafka_provision
node_rabbit -->|"provisions destinations"| node_rabbit_provision
node_pulsar -->|"provisions destinations"| node_pulsar_provision
node_kafka -->|"sends and receives"| node_broker
node_rabbit -->|"sends and receives"| node_broker
node_pulsar -->|"sends and receives"| node_broker
node_application -->|"declares stream bindings"| node_kstream_binder
node_kstream_binder -->|"binds native functions"| node_function_processor
node_streams_manager -->|"registers streams"| node_streams_registry
node_kstream_binder -->|"starts topology"| node_streams_manager
node_function_processor -->|"processes streams"| node_kafka_cluster
node_interactive_query -->|"queries instances"| node_streams_registry
node_interactive_query -->|"queries stores"| node_kafka_cluster
node_schema_consumer -->|"registers or fetches"| node_registry_client
node_registry_client -->|"delegates registry calls"| node_schema_server
node_registry_client -->|"caches schemas"| node_schema_cache
node_schema_server -->|"reads and writes schemas"| node_schema_repository
node_schema_server -->|"validates then persists"| node_schema_repository
node_avro_service -.->|"encodes and decodes Avro"| node_schema_consumer

click node_settings "https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingServiceProperties.java"
click node_binding "https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java"
click node_binderfactory "https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/BinderFactory.java"
click node_lifecycle "https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingsLifecycleController.java"
click node_partition "https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/PartitionHandler.java"
click node_kafka "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java"
click node_kafka_provision "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java"
click node_rabbit "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java"
click node_rabbit_provision "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/rabbit-binder/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java"
click node_pulsar "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java"
click node_pulsar_provision "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/provisioning/PulsarTopicProvisioner.java"
click node_kstream_binder "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KStreamBinder.java"
click node_function_processor "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsFunctionProcessor.java"
click node_streams_manager "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/StreamsBuilderFactoryManager.java"
click node_streams_registry "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsRegistry.java"
click node_interactive_query "https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/InteractiveQueryService.java"
click node_schema_server "https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java"
click node_schema_repository "https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java"
click node_registry_client "https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java"
click node_schema_cache "https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java"
click node_avro_service "https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/avro/AvroSchemaServiceManagerImpl.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_settings,node_binding,node_binderfactory,node_lifecycle,node_partition toneBlue
class node_kafka,node_kafka_provision,node_rabbit,node_rabbit_provision,node_pulsar,node_pulsar_provision toneAmber
class node_kstream_binder,node_function_processor,node_streams_manager,node_streams_registry,node_interactive_query toneMint
class node_schema_server,node_schema_repository,node_registry_client,node_schema_cache,node_avro_service toneRose
class node_application,node_broker,node_kafka_cluster,node_schema_consumer toneIndigo
```

## Components

### Binding core

- [Binding settings](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingServiceProperties.java): `core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingServiceProperties.java`
- [Binding service](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java): `core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingService.java`
- [Binder factory](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/BinderFactory.java): `core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/BinderFactory.java`
- [Binding lifecycle](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingsLifecycleController.java): `core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/BindingsLifecycleController.java`
- [Partition routing](https://github.com/spring-cloud/spring-cloud-stream/blob/main/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/PartitionHandler.java): `core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/PartitionHandler.java`

### Channel binders

- [Kafka binder](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka/src/main/java/org/springframework/cloud/stream/binder/kafka/KafkaMessageChannelBinder.java`
- [Kafka provisioning](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-core/src/main/java/org/springframework/cloud/stream/binder/kafka/provisioning/KafkaTopicProvisioner.java`
- [Rabbit binder](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java): `binders/rabbit-binder/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/RabbitMessageChannelBinder.java`
- [Rabbit provisioning](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/rabbit-binder/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java): `binders/rabbit-binder/spring-cloud-stream-binder-rabbit-core/src/main/java/org/springframework/cloud/stream/binder/rabbit/provisioning/RabbitExchangeQueueProvisioner.java`
- [Pulsar binder](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java): `binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/PulsarMessageChannelBinder.java`
- [Pulsar provisioning](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/provisioning/PulsarTopicProvisioner.java): `binders/pulsar-binder/spring-cloud-stream-binder-pulsar/src/main/java/org/springframework/cloud/stream/binder/pulsar/provisioning/PulsarTopicProvisioner.java`

### Kafka Streams

- [Kafka Streams binder](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KStreamBinder.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KStreamBinder.java`
- [Function processor](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsFunctionProcessor.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsFunctionProcessor.java`
- [Streams manager](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/StreamsBuilderFactoryManager.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/StreamsBuilderFactoryManager.java`
- [Streams registry](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsRegistry.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/KafkaStreamsRegistry.java`
- [Interactive queries](https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/InteractiveQueryService.java): `binders/kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/InteractiveQueryService.java`

### Schema registry

- [Schema server](https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java): `schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java`
- [Schema repository](https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java): `schema-registry/spring-cloud-stream-schema-registry-core/src/main/java/org/springframework/cloud/stream/schema/registry/controllers/ServerController.java`
- [Registry client](https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java): `schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java`
- [Schema cache](https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java): `schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/client/CachingRegistryClient.java`
- [Avro serialization](https://github.com/spring-cloud/spring-cloud-stream/blob/main/schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/avro/AvroSchemaServiceManagerImpl.java): `schema-registry/spring-cloud-stream-schema-registry-client/src/main/java/org/springframework/cloud/stream/schema/registry/avro/AvroSchemaServiceManagerImpl.java`

### Other components

- **Stream application**
- **Message broker**
- **Kafka cluster**
- **Schema consumer**

## Connections

- Stream application → Binding settings: supplies configuration
- Binding service → Binding settings: reads properties
- Stream application → Binding lifecycle: defines bindings
- Binding lifecycle → Binding service: starts bindings
- Binding service → Binder factory: selects binder
- Binding service → Kafka binder: creates binding
- Binding service → Rabbit binder: creates binding
- Binding service → Pulsar binder: creates binding
- Partition routing → Kafka binder: selects partition
- Kafka binder → Kafka provisioning: provisions destinations
- Rabbit binder → Rabbit provisioning: provisions destinations
- Pulsar binder → Pulsar provisioning: provisions destinations
- Kafka binder → Message broker: sends and receives
- Rabbit binder → Message broker: sends and receives
- Pulsar binder → Message broker: sends and receives
- Stream application → Kafka Streams binder: declares stream bindings
- Kafka Streams binder → Function processor: binds native functions
- Streams manager → Streams registry: registers streams
- Kafka Streams binder → Streams manager: starts topology
- Function processor → Kafka cluster: processes streams
- Interactive queries → Streams registry: queries instances
- Interactive queries → Kafka cluster: queries stores
- Schema consumer → Registry client: registers or fetches
- Registry client → Schema server: delegates registry calls
- Registry client → Schema cache: caches schemas
- Schema server → Schema repository: reads and writes schemas
- Schema server → Schema repository: validates then persists
- Avro serialization → Schema consumer: encodes and decodes Avro
