Spring Cloud Stream如何深度支援Apache Kafka?
Spring Cloud Stream提供了一種程式設計模型,可以立即連線到Apache Kafka。應用程式需要在其類路徑中包含Kafka繫結器並新增一個名為的註釋@EnableBinding,該註釋將Kafka主題繫結到其輸入或輸出(或兩者)。
Spring Cloud Stream提供了三個方便的介面來繫結@EnableBinding:( Source單輸出),Sink(單輸入)和Processor(單輸入和輸出)。它可以擴充套件到具有多個輸入和輸出的自定義介面。
以下程式碼片段顯示了Spring Cloud Stream的基本程式設計模型:
@SpringBootApplication @EnableBinding(Processor.class) public class UppercaseProcessor { @StreamListener(Processor.INPUT) @SendTo(Processor.OUTPUT) public String process(String s) { return s.toUpperCase(); } } |
請注意該方法已註釋@StreamListener,Spring Cloud Stream提供該方法以接收來自Kafka主題的訊息。同樣的方法也用註釋SendTo,這是一個方便的註釋,用於將訊息傳送到輸出目的地。這是一個Spring Cloud Stream Processor應用程式,它使用來自輸入的訊息並向輸出生成訊息。
前面的程式碼中沒有提到Kafka主題Topic。此時可能出現的一個自然問題是,“此應用程式如何與Kafka通訊?”答案是:使用Spring Boot支援的眾多配置選項之一配置入站和出站主題。在這種情況下,我們使用名為YAML的配置檔案application.yml,預設情況下會搜尋該檔案。以下是輸入和輸出目標的配置:
spring.cloud.stream.bindings: input: destination: topic1 output: destination: topic2 |
Spring Cloud Stream將輸入input對映到輸出topic1和輸出topic2。這是一組非常小的配置,但有更多選項可用於進一步自定義應用程式。預設情況下,主題是使用單個分割槽建立的,但可以由應用程式覆蓋。有關更多資訊,請參閱這些文件。
最重要的是,開發人員可以專注於編寫核心業務邏輯,並讓Spring Cloud Stream和Spring Boot處理基礎架構問題(例如連線到Kafka,配置和調整應用程式等)。
以下示例顯示了另一個簡單的應用程式(消費者):
@SpringBootApplication @EnableBinding(Sink.class) public class LoggingConsumerApplication { @StreamListener(Sink.INPUT) public void handle(Person person) { System.out.println("Received: " + person); } public static class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return this.name; } } } |
請注意,@EnableBinding帶有一個Sink.class,表示這是一個消費者。與之前的應用程式的一個主要區別在於,註釋的方法@StreamListener是將稱為Person的POJO作為其引數而不是字串。將來自Kafka主題的訊息轉換為此POJO!Spring Cloud Stream提供自動內容型別轉換。預設情況下,它application/JSON用作內容型別,但也支援其他內容型別。您可以使用該屬性提供內容型別spring.cloud.stream.bindings.input.contentType,然後將其設定為適當的內容型別,例如application/Avro。
Spring Cloud Stream根據此配置選擇適當的訊息轉換器。如果應用程式想要使用Kafka提供的本機序列化和反序列化而不是使用Spring Cloud Stream提供的訊息轉換器,則可以設定以下屬性。
對於序列化:
spring.cloud.stream.bindings.output.useNativeEncoding=true |
對於反序列化:
spring.cloud.stream.bindings.input.useNativeDecoding=true |
自動配置主題
Apache Kafka繫結器提供了一個配置器provisioner ,用於在啟動時配置主題。如果在代理上啟用了主題建立,則Spring Cloud Stream應用程式可以作為應用程式啟動的一部分來建立和配置Kafka主題。
例如,可以向分配器提供分割槽和其他主題級配置。這些自定義可以在 binder完成,適用於應用程式中使用的所有主題,或者適用於單個生產者和消費者級別。這在應用程式的開發和測試期間尤其方便。有關如何為多個分割槽配置主題的各種示例。
支援消費組和分割槽
消費者組和分割槽等眾所周知的屬性可透過Spring Cloud Stream進行配置。可以透過屬性設定消費者組:
spring.cloud.stream.bindings.input.group=group-name |
如前所述,在內部,該小組將被翻譯成Kafka的消費者群體。在編寫生產者應用程式時,Spring Cloud Stream提供了將資料傳送到特定分割槽的選項。在內部,框架再次將這些職責委託給Kafka。
如果禁用消費者組的自動重新平衡,則可以限制特定應用程式例項使用來自某組分割槽的訊息,這是一個需要覆蓋的簡單配置屬性。有關詳細資訊,請參閱這些配置選項
繫結視覺化和控制
使用Spring Boot的執行器機制,我們現在可以控制 Spring Cloud Stream中的各個繫結。
在執行時,可以使用執行器端點停止,暫停,恢復應用程式,這是Spring Boot的機制,用於在將應用程式推送到生產環境時監視和管理應用程式。此功能使使用者可以對應用程式處理Kafka資料的方式進行更多控制。如果應用程式暫停繫結,則處理來自該特定主題的記錄將被暫停,直到恢復為止。
Spring Cloud Stream還與Micrometer整合,可實現更豐富的指標,排放混亂率並提供其他與監控相關的功能。這些可以與許多其他監控系統進一步整合。Kafka活頁夾提供了擴充套件的指標功能,可以提供有關主題的消費者滯後的其他見解。
Spring Boot 透過特殊的健康端點提供應用程式執行狀況檢查。Kafka繫結器提供了一個特殊的健康指示器實現,它考慮了與代理的連線,並檢查所有分割槽是否健康。如果在沒有領導者的情況下找到任何分割槽,或者無法連線代理,則執行狀況檢查會相應地報告狀態。
下面見Spring Cloud Stream對Kafka Streams的深度支援,可點選Kafka標籤進入檢視
相關文章
- Spring 對Apache Kafka的支援與整合SpringApacheKafka
- RocketMQ 整合 Spring Cloud StreamMQSpringCloud
- Spring Cloud Stream事件路由 - spring.ioSpringCloud事件路由
- Spring Cloud Stream如何處理訊息重複消費?SpringCloud
- Spring Cloud Stream如何消費自己生產的訊息?SpringCloud
- (十七) 整合spring cloud雲架構 -訊息驅動 Spring Cloud StreamSpringCloud架構
- Spring Cloud Stream微服務訊息框架SpringCloud微服務框架
- Spring Cloud 快速入門(八)訊息系統整合框架 Spring Cloud StreamSpringCloud框架
- Spring Cloud Stream 體系及原理介紹SpringCloud
- 最完整的 Spring Cloud 元件-訊息中介軟體 Spring Cloud Stream 使用教程SpringCloud元件
- Apache-Flink深度解析-DataStream-Connectors之KafkaApacheASTKafka
- 介紹一下Spring Cloud Stream主要概念SpringCloud
- 深度剖析Spring Cloud底層原理SpringCloud
- 阿里Sentinel支援Spring Cloud Gateway啦阿里SpringCloudGateway
- 訊息驅動式微服務:Spring Cloud Stream & RabbitMQ微服務SpringCloudMQ
- springCloud學習5(Spring-Cloud-Stream事件驅動)SpringGCCloud事件
- 如何建立自定義Apache Kafka聯結器(Kafka Connectors) - PrashannaApacheKafka
- Spring Boot和Apache Kafka結合實現錯誤處理,訊息轉換和事務支援?Spring BootApacheKafka
- 整合原始碼深度剖析:Fescar x Spring Cloud原始碼SpringCloud
- 使用Spring Cloud Stream和Spring State Machine建立事件驅動的微服務案例SpringCloudMac事件微服務
- 如何在 Rocky Linux 上安裝 Apache Kafka?LinuxApacheKafka
- Apache Dubbo 官方正式釋出 Spring 6 & Spring Boot 3 支援ApacheSpring Boot
- 使用spring.cloud.stream來傳送kafka訊息,並根據某欄位將訊息傳送到固定partition上SpringCloudKafka
- Apache Kafka教程--Kafka新手入門ApacheKafka
- Spring Cloud Gateway 擴充套件支援動態限流SpringCloudGateway套件
- 使用Spring Cloud Stream和RabbitMQ實現事件驅動的微服務SpringCloudMQ事件微服務
- Spring Cloud Stream應用與自定義RocketMQ Binder:程式設計模型SpringCloudMQ程式設計模型
- Spring Cloud 終結篇之訊息驅動--stream 大集合SpringCloud
- Apache Camel與Spring-boot和Kafka的整合開源案例ApacheSpringbootKafka
- Spring Cloud Netflix—如何加入HystrixSpringCloud
- Spring Cloud(二):Spring Cloud ConfigSpringCloud
- 深度解析spring cloud分散式微服務的實現SpringCloud分散式微服務
- Apache-Kafka簡介ApacheKafka
- 什麼是 Apache Kafka?ApacheKafka
- Apache Kafka設計思考ApacheKafka
- Apache Kafka 移除 ZK ProposalsApacheKafka
- Apache Kafka 3.0.0釋出ApacheKafka
- Spring Cloud Gateway 原生支援介面限流該怎麼玩SpringCloudGateway