Kafka Streams binder 中的绑定可视化和控制
从 3.1.2 版本开始,Kafka Streams binder 支持绑定可视化和控制。支持的生命周期阶段只有 STOPPED
和 STARTED
。生命周期阶段 PAUSED
和 RESUMED
在 Kafka Streams binder 中不可用。
为了激活绑定可视化和控制功能,应用需要包含以下两个依赖。
<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 http://localhost: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 http://localhost:8080/actuator/bindings/consumer-in-0
此时,将不会通过此绑定接收任何记录。
再次启动绑定。
curl -d '{"state":"STARTED"}' -H "Content-Type: application/json" -X POST http://localhost:8080/actuator/bindings/consumer-in-0
当一个函数存在多个绑定时,在这些绑定中的任何一个上调用这些操作都将生效。这是因为一个函数上的所有绑定都由同一个 StreamsBuilderFactoryBean
支持。因此,对于上面的函数,function-in-0
或 function-out-0
都可以工作。