连接到 Kafka
从版本 2.5 开始,上述每个类都扩展了 KafkaResourceFactory。这允许通过向其配置添加 Supplier<String> 来在运行时更改引导服务器:setBootstrapServersSupplier(() -> …)。这将为所有新连接调用以获取服务器列表。消费者和生产者通常是长期运行的。要关闭现有生产者,请在 DefaultKafkaProducerFactory 上调用 reset()。要关闭现有消费者,请在 KafkaListenerEndpointRegistry 上调用 stop()(然后是 start()),和/或在任何其他监听器容器 Bean 上调用 stop() 和 start()。
为方便起见,框架还提供了一个 ABSwitchCluster,它支持两组引导服务器;其中一组在任何给定时间都是活动的。配置 ABSwitchCluster 并通过调用 setBootstrapServersSupplier() 将其添加到生产者和消费者工厂以及 KafkaAdmin。当您想要切换时,调用 primary() 或 secondary() 并在生产者工厂上调用 reset() 以建立新的连接;对于消费者,则 stop() 和 start() 所有监听器容器。使用 @KafkaListener 时,stop() 和 start() KafkaListenerEndpointRegistry Bean。
有关更多信息,请参见 Javadoc。
工厂监听器
从版本 2.5 开始,DefaultKafkaProducerFactory 和 DefaultKafkaConsumerFactory 可以配置一个 Listener,以便在创建或关闭生产者或消费者时接收通知。
interface Listener<K, V> {
default void producerAdded(String id, Producer<K, V> producer) {
}
default void producerRemoved(String id, Producer<K, V> producer) {
}
}
interface Listener<K, V> {
default void consumerAdded(String id, Consumer<K, V> consumer) {
}
default void consumerRemoved(String id, Consumer<K, V> consumer) {
}
}
在每种情况下,id 都是通过将 client-id 属性(在创建后从 metrics() 获取)附加到工厂的 beanName 属性,并以 . 分隔来创建的。
这些监听器可以用于,例如,在创建新客户端时创建并绑定一个 Micrometer KafkaClientMetrics 实例(并在客户端关闭时关闭它)。
该框架提供了完全实现此功能的监听器;参见 Micrometer 原生指标。
默认客户端 ID 前缀
从版本 3.2 开始,对于使用 spring.application.name 属性定义应用程序名称的 Spring Boot 应用程序,此名称现在用作这些客户端类型自动生成客户端 ID 的默认前缀:
-
不使用消费者组的消费者客户端
-
生产者客户端
-
管理客户端
这使得在服务器端识别这些客户端进行故障排除或应用配额变得更加容易。
| 客户端类型 | 无应用程序名称 | 有应用程序名称 |
|---|---|---|
无消费者组的消费者 |
consumer-null-1 |
myapp-consumer-1 |
带消费者组 "mygroup" 的消费者 |
consumer-mygroup-1 |
consumer-mygroup-1 |
生产者 |
producer-1 |
myapp-producer-1 |
管理 |
adminclient-1 |
myapp-admin-1 |