У меня есть Spring Cloud Stream, материализованный в GlobalKTable
. Для локальной среды разработки это обычный текст без настройки безопасности.
@EnableBinding(CacheBinding.class)
public class ItemCacher {
@StreamListener
void materialize(@Input(CacheBinding.ITEMS) GlobalKTable<String, Item> items) {}
}
interface CacheBinding {
String ITEMS = "cache";
@Input(ITEMS) GlobalKTable<String, Item> cache();
}
@Data class Item {
private String key;
private String value;
}
@Data class ItemList {
private List<Item> items;
}
public class SampleSerdes {
public static class ItemSerde extends JsonSerde<Item> {}
public static final Serde<Item> POSITION_SERDE = new ItemSerde();
}
application.yaml
:
spring.cloud.stream:
bindings.cache:
destination: items-topic
binder: cache
group: cache-group
kafka.streams:
binder:
application-id: splitter
brokers: localhost:9092
configuration.default:
key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
value.serde: com.example.minfail.SampleSerdes$ItemSerde
bindings:
cache.consumer:
applicationId: cache
materializedAs: items-cache
binders.cache.type: ktable
Однако для развертывания в тестовой системе темы Kafka защищены с помощью Kerberos, поэтому я добавил это в другом профиле:
application-kerberos.yaml
:
spring.cloud.stream:
kafka.binder.configuration:
security.protocol: SASL_SSL
sasl.kerberos.service.name: kafka
jaas:
loginModule: com.sun.security.auth.module.Krb5LoginModule
options:
useKeytab: true
storeKey: true
binders.cache.environment.spring.cloud.stream.kafka.streams.binder.configuration.jaas.options:
keyTab: cache_keytab
principal: cache_principal
Теперь, когда я запускаю приложение с -Dspring.profiles.active=kerberos
, я получаю сообщение
Вызвано: org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа 'org.springframework.boot.autoconfigure.kafka.KafkaProperties': ожидается, что по крайней мере 1 компонент будет квалифицирован как кандидат для автоматической передачи. Аннотации зависимостей: {}
Я нашел эту проблему (к которой я также добавил комментарий), но, похоже, ее следует решить.
Я использую Spring Boot 2.1.5.RELEASE, версию Spring Cloud Greenwich.SR1 и версию Cloud Stream Fishtown.RELEASE.
Я что-то упускаю из виду или все еще использую неправильную версию? Есть ли обходной путь?