Kafka Streams 繫結器中的繫結視覺化和控制
從版本 3.1.2 開始,Kafka Streams 繫結器支援繫結視覺化和控制。僅支援兩個生命週期階段:STOPPED 和 STARTED。PAUSED 和 RESUMED 生命週期階段在 Kafka Streams 繫結器中不可用。
為了啟用繫結視覺化和控制,應用程式需要包含以下兩個依賴項。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果你喜歡使用 webflux,則可以包含 spring-boot-starter-webflux 而不是標準 web 依賴項。
此外,你還需要設定以下屬性:
management.endpoints.web.exposure.include=bindings
為了進一步說明此功能,讓我們使用以下應用程式作為指導:
@SpringBootApplication
public class KafkaStreamsApplication {
public static void main(String[] args) {
SpringApplication.run(KafkaStreamsApplication.class, args);
}
@Bean
public Consumer<KStream<String, String>> consumer() {
return s -> s.foreach((key, value) -> System.out.println(value));
}
@Bean
public Function<KStream<String, String>, KStream<String, String>> function() {
return ks -> ks;
}
}
正如我們所看到的,該應用程式有兩個 Kafka Streams 函式——一個消費者和一個函式。消費者繫結預設命名為 consumer-in-0。類似地,對於該函式,輸入繫結是 function-in-0,輸出繫結是 function-out-0。
應用程式啟動後,我們可以使用以下繫結端點查詢有關繫結的詳細資訊。
curl https://:8080/actuator/bindings | jq .
[
{
"bindingName": "consumer-in-0",
"name": "consumer-in-0",
"group": "consumer-applicationId",
"pausable": false,
"state": "running",
"paused": false,
"input": true,
"extendedInfo": {}
},
{
"bindingName": "function-in-0",
"name": "function-in-0",
"group": "function-applicationId",
"pausable": false,
"state": "running",
"paused": false,
"input": true,
"extendedInfo": {}
},
{
"bindingName": "function-out-0",
"name": "function-out-0",
"group": "function-applicationId",
"pausable": false,
"state": "running",
"paused": false,
"input": false,
"extendedInfo": {}
}
]
以上可以找到所有三個繫結的詳細資訊。
現在讓我們停止 consumer-in-0 繫結。
curl -d '{"state":"STOPPED"}' -H "Content-Type: application/json" -X POST https://:8080/actuator/bindings/consumer-in-0
此時,此繫結將不再接收任何記錄。
再次啟動繫結。
curl -d '{"state":"STARTED"}' -H "Content-Type: application/json" -X POST https://:8080/actuator/bindings/consumer-in-0
當單個函式上存在多個繫結時,在其中任何一個繫結上呼叫這些操作都將起作用。這是因為單個函式上的所有繫結都由同一個 StreamsBuilderFactoryBean 支援。因此,對於上面的函式,function-in-0 或 function-out-0 都可以工作。