From b490b6b73d7ae364a732986a8574ed1556614657 Mon Sep 17 00:00:00 2001 From: Marius Bogoevici Date: Thu, 4 Feb 2016 03:13:20 -0500 Subject: [PATCH] Adding binder docs + 1.0.0.M4 updates Health indicators --- spring-cloud-stream-docs/pom.xml | 16 ++++ .../src/main/asciidoc/images/kafka-binder.png | Bin 0 -> 9469 bytes .../asciidoc/images/producers-consumers.png | Bin 0 -> 15947 bytes .../main/asciidoc/images/rabbit-binder.png | Bin 0 -> 12440 bytes .../src/main/asciidoc/images/redis-binder.png | Bin 0 -> 13731 bytes .../spring-cloud-stream-overview.adoc | 74 +++++++++++++++--- 6 files changed, 81 insertions(+), 9 deletions(-) create mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png create mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/producers-consumers.png create mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png create mode 100755 spring-cloud-stream-docs/src/main/asciidoc/images/redis-binder.png diff --git a/spring-cloud-stream-docs/pom.xml b/spring-cloud-stream-docs/pom.xml index 1f96e7907..1bbeb784d 100644 --- a/spring-cloud-stream-docs/pom.xml +++ b/spring-cloud-stream-docs/pom.xml @@ -159,6 +159,14 @@ + + + + + + + + @@ -186,6 +194,14 @@ + + + + + + + + diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png b/spring-cloud-stream-docs/src/main/asciidoc/images/kafka-binder.png new file mode 100755 index 0000000000000000000000000000000000000000..7c6c4c02018322ef83787be5c91852b13f96d412 GIT binary patch literal 9469 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 literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/producers-consumers.png b/spring-cloud-stream-docs/src/main/asciidoc/images/producers-consumers.png new file mode 100755 index 0000000000000000000000000000000000000000..9990897dd2d428d7f2b80126e5b29841040e3237 GIT binary patch literal 15947 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 literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png b/spring-cloud-stream-docs/src/main/asciidoc/images/rabbit-binder.png new file mode 100755 index 0000000000000000000000000000000000000000..aabf698b3a9873395764d1d974996a22436188a9 GIT binary patch literal 12440 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 literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/images/redis-binder.png b/spring-cloud-stream-docs/src/main/asciidoc/images/redis-binder.png new file mode 100755 index 0000000000000000000000000000000000000000..1832bd2e31af35537088abd41f7092e5c63e3b66 GIT binary patch literal 13731 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 literal 0 HcmV?d00001 diff --git a/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc b/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc index ed1d1627c..2c5501634 100644 --- a/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc +++ b/spring-cloud-stream-docs/src/main/asciidoc/spring-cloud-stream-overview.adoc @@ -9,7 +9,7 @@ such as creating and running stream modules. === Introducing Spring Cloud Stream -The Spring Cloud Stream project allows a user to develop and run messaging microservices using Spring Integration. Just add `@EnableBinding` and run your app as a Spring Boot app (single application context). You just need to connect to the physical broker for the bindings, which is automatic if the relevant binder implementation is available on the classpath. The sample uses Redis. +The Spring Cloud Stream project allows a user to develop and run messaging microservices using Spring Integration. Just add `@EnableBinding` and run your app as a Spring Boot app (single application context). Spring Cloud Stream applications connect to the physical broker through bindings, which link Spring Integration channels to physical broker destinations, for either input (consumer bindings) and output (producer bindings). The creation of the bindings, and therefore their broker-specific implementation is handled by the binder, which is another important abstraction of Spring Cloud Stream. Binders abstract out the broker-specific implementation details. In order to connect to a specific type of broker (e.g. Rabbit or Kafka) you just need to have the relevant binder implementation on the classpath. Here's a sample source module (output channel only): @@ -78,13 +78,31 @@ NOTE: In this case there is only one `Source` in the application context so ther A module can have multiple input or output channels defined as `@Input` and `@Output` methods in an interface. Instead of just one channel named "input" or "output" you can add multiple `MessageChannel` methods annotated `@Input` or `@Output` and their names will be converted to external channel names on the broker. It is common to specify the channel names at runtime in order to have multiple modules communicate over a well known channel names. Channel names can be specified as properties that consist of the channel names prefixed with `spring.cloud.stream.bindings` (e.g. `spring.cloud.stream.bindings.input` or `spring.cloud.stream.bindings.output`). These properties can be specified though environment variables, the application YAML file or the other mechanism supported by Spring Boot. -Channel names can also have a channel type as a colon-separated prefix, and the semantics of the external bus channel changes accordingly. For example, you can have two `MessageChannels` called "output" and "foo" in a module with `spring.cloud.stream.bindings.output=bar` and `spring.cloud.stream.bindings.foo=topic:foo`, and the result is 2 external channels called "bar" and "topic:foo". The queue prefix for point to point semantics is also supported. Note, that in a future release only topic (pub/sub) semantics will be supported. +Channel names can also have a channel type as a colon-separated prefix, and the semantics of the external bus channel changes accordingly. For example, you can have two `MessageChannels` called "output" and "foo" in a module with `spring.cloud.stream.bindings.output=bar` and `spring.cloud.stream.bindings.foo=baz`, and the result is 2 external channels called "bar" and "baz". ==== Inter-module communication While Spring Cloud Stream makes it easy for individual modules to connect to messaging systems, the typical scenario for Spring Cloud Stream is the creation of multi-module pipelines, where modules are sending data to each other. This can be achieved by correlating the input and output destinations of adjacent modules, as in the following example. -Supposing that the design calls for the `time-source` module to send data to the `log-sink` module, we will use a common destination named `foo` for both modules. `time-source` will set `spring.cloud.stream.bindings.output=foo` and `log-sink` will set `spring.cloud.stream.bindings.input=foo`. +Supposing that the design calls for the `time-source` module to send data to the `log-sink` module, we will use a common destination named `foo` for both modules. `time-source` will set `spring.cloud.stream.bindings.output=foo` and `log-sink` will set `spring.cloud.stream.bindings.input=foo`. + +==== Consumer group support + +Spring Cloud Stream is a library focusing on building message-driven microservices, and more specifically stream processing applications. In such scenarios, communication between different logical applications follows a publish-subscribe pattern, with data being broadcast through a shared topic, but at the same time, it is important to be able to scale up by creating multiple instances of a given application, which are in a competing consumer relationship with each other. + +Spring Cloud Stream models this behavior through the concept of a consumer group, which is similar to the notion of consumer groups in Kafka. Each consumer binding can specify a group name such as `spring.cloud.stream.bindings.input.group=foo` (the actual name of the binding may vary). Each consumer group bound to a given destination will receive a copy of the published data, but within the group, only one application will receive a specific message. + +If no consumer group is specified for a given binding, then the binding is treated as if belonging to an anonymous, independent, single-member consumer group. Otherwise said, if no consumer group is specified for a binding, it will be in a publish-subcribe relationship with everyone else. + +In general, it is preferable to always specify a consumer group when binding an application to a given destination. When scaling up a Spring Cloud Stream application, a consumer group must be specified for each of its input bindings, in order to prevent its instances to receive duplicate messages (unless that behavior is desired, which is a less common use case). + +NOTE: This feature has been introduced since version 1.0.0.M4. + +==== Instance index and instance count + +When scaling up Spring Cloud Stream applications, each instance can receive information about many other instances of the same application exist and what is its own instance index. This is done through the `spring.cloud.stream.instanceCount` and `spring.cloud.stream.instanceIndex` properties. For example if there are 3 instances of the HDFS sink application, all three will have `spring.cloud.stream.instanceCount` set to 3, and each of the applications will have `spring.cloud.stream.instanceIndex` set to 0, 1 and 2, respectively. When Spring Cloud Stream applications are deployed via Spring Cloud Data Flow, these properties are configured automatically, but when Spring Cloud Stream applications are launched independently, these properties must be set correctly. By default `spring.cloud.stream.instanceCount` is 1, and `spring.cloud.stream.instanceIndex` is 0. + +Setting up the two properties correctly on scale up scenarios is important for addressing partitioning scenarios in general (see below), and they are always required by certain types of binders (e.g. the Kafka binder) in order to ensure that data is split correctly between multiple consumer instance. ==== Advanced binding properties @@ -95,7 +113,7 @@ The input and output channel names are the common properties to set in order to Spring Cloud Stream provides support for partitioning data between multiple instances of a given application. In a partitioned scenario, one or more producer modules will send data to one or more consumer modules, ensuring that data with common characteristics is processed by the same consumer instance. The physical communication medium (i.e. the broker topic or queue) is viewed as structured into multiple partitions. Regardless whether the broker type is naturally partitioned (e.g. Kafka) or not (e.g. Rabbit or Redis), Spring Cloud Stream provides a common abstraction for implementing partitioned processing use cases in a uniform fashion. -Setting up a partitioned processing scenario requires configuring both the data producing and the data consuming end. +Setting up a partitioned processing scenario requires configuring both the data producing and the data consuming end. ====== Configuring output channels for partitioning @@ -111,7 +129,7 @@ Additional properties can be configured for more advanced scenarios, as describe An input channel is configured to receive partitioned data by setting its `partitioned` binding property, as well as the instance index and instance count properties on the module, as follows: `spring.cloud.stream.bindings.input.partitioned=true`,`spring.cloud.stream.instanceIndex=3`,`spring.cloud.stream.instanceCount=5`. The instance count value represents the total number of similar modules between which the data needs to be partitioned, whereas instance index must be value unique across the multiple instances between `0` and `instanceCount - 1`. The instance index helps each module to identify the unique partition (or in the case of Kafka, the partition set) that they receive data from. It is important that both values are set correctly in order to ensure that all the data is consumed, as well as that the modules receive mutually exclusive datasets. -While setting up multiple instances for partitioned data processing may be complex in the standalone case, Spring Cloud Data Flow can simplify the process significantly, by populating both the input and output values correctly, as well as relying on the runtime infrastructure to provide information about the instance index and instance count. +While setting up multiple instances for partitioned data processing may be complex in the standalone case, Spring Cloud Data Flow can simplify the process significantly, by populating both the input and output values correctly, as well as relying on the runtime infrastructure to provide information about the instance index and instance count. === Binder selection @@ -147,7 +165,7 @@ For instance, a processor module that reads from Rabbit and writes to Redis can ====== Connecting to multiple systems -By default, binders share the Spring Boot autoconfiguration of the application module and create one instance of each binder found on the classpath. In scenarios where a module should connect to more than one broker of the same type, Spring Cloud Stream allows you to specify multiple binder configurations, with different environment settings. Please note that turning on explicit binder configuration will disable the default binder configuration process altogether, so all the binders in use must be included in the configuration. +By default, binders share the Spring Boot autoconfiguration of the application module and create one instance of each binder found on the classpath. In scenarios where a module should connect to more than one broker of the same type, Spring Cloud Stream allows you to specify multiple binder configurations, with different environment settings. Please note that turning on explicit binder configuration will disable the default binder configuration process altogether, so all the binders in use must be included in the configuration. For example, this is the typical configuration for a processor that connects to two rabbit instances: @@ -155,9 +173,9 @@ For example, this is the typical configuration for a processor that connects to ---- spring: cloud: - stream: + stream: bindings: - input: + input: destination: foo binder: rabbit1 output: @@ -186,6 +204,44 @@ Code using the Spring Cloud Stream library can be deployed as a standalone appli ==== Fat JAR -You can run in standalone mode from your IDE for testing. To run in production you can create an executable (or "fat") JAR using the standard Spring Boot tooling provided by Maven or Gradle. +You can run in standalone mode from your IDE for testing. To run in production you can create an executable (or "fat") JAR using the standard Spring Boot tooling provided by Maven or Gradle. +==== Health endpoints +Spring Cloud Stream provides a health indicator for the binders, registered under the name of `binders`. It can be enabled or disabled using the `management.health.binders.enabled` property. + +=== Binder SPI + +Spring Cloud Stream provides a binder abstraction for connecting to physical destinations. This section will describe the main concepts behind the Binder SPI, its main components, as well as details specific to different implementations. + +==== Producers and Consumers + +.Producers and Consumers +image::producers-consumers.png[width=300,scaledwidth="75%"] + +A producer is any component that sends messages to a channel. That channel can be bound to an external message broker via a Binder implementation for that broker. When invoking the bindProducer method, the first parameter is the name of the destination within that broker. The second parameter is the local channel instance to which the producer will be sending messages, and the third parameter contains properties to be used within the adapter that is created for that channel, such as a partition key expression. + +A consumer is any component that receives messages from a channel. As with the producer, the consumer’s channel can be bound to an external message broker, and the first parameter for the bindConsumer method is the destination name. However, on the consumer side, a second parameter provides the name of a logical group of consumers. Each group represented by consumer bindings for a given destination will receive a copy of each message that a producer sends to that destination (i.e. pub/sub semantics). If there are multiple consumer instances bound using the same group name, then messages will be load balanced across those consumer instances so that each message sent by a producer would only be consumed by a single consumer instance within each group (i.e. queue semantics). + +==== RabbitMQ Binder + +.RabbitMQ Binder +image::rabbit-binder.png[width=300,scaledwidth="50%"] + +The RabbitMQ Binder implementation maps the destination to a TopicExchange, and for each consumer group, a Queue will be bound to that TopicExchange. Each consumer instance that binds will be a Consumer instance for its group’s Queue. + +==== Kafka Binder + +.Kafka Binder +image::kafka-binder.png[width=300,scaledwidth="50%"] + +The Kafka Binder implementation maps the destination to a Topic, and the consumer group maps directly to the same Kafka concept. Spring Cloud Stream does not use the high level consumer, but implements a similar concept for the simple consumer. + +==== Redis Binder + +.Redis Binder +image::redis-binder.png[width=300,scaledwidth="50%"] + +NOTE: we recommend only using the Redis Binder for development + +The Redis Binder creates a LIST for each consumer group. A consumer binding will trigger BRPOP operations on that LIST. A producer binding will consult a ZSET to determine what groups currently have active consumers, and then for each message being sent, an LPUSH operation will occur on each of those LISTs.