我正在构建一个微服务组件,该组件将默认使用其他(SCS)组件生成的Spring Cloud Stream(SCS)Kafka消息。
但是我还需要使用其他使用融合API的组件消耗Kafka消息。
我有一个示例存储库,其中显示了我要执行的操作。
https://github.com/donalthurley/KafkaConsumeScsAndConfluent
这是下面的应用程序配置,带有SCS输入绑定和融合输入绑定。
spring:
application:
name: kafka
kafka:
consumer:
properties.schema.registry.url: http://192.168.99.100:8081
cloud:
stream:
kafka:
binder:
brokers: PLAINTEXT://192.168.99.100:9092
# configuration:
# specific:
# avro:
# reader: true
# key:
# deserializer: org.apache.kafka.common.serialization.StringDeserializer
# value:
# deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
bindings:
inputConfluent:
contentType: application/*+avro
destination: confluent-destination
group: input-confluent-group
inputScs:
contentType: application/*+avro
destination: scs-destination
group: input-scs-group
使用上述配置,我得到了两个使用SCS默认配置创建的使用者 例如,类org.apache.kafka.common.serialization.ByteArrayDeserializer是两个输入绑定的值反序列化器。
如果我删除了上面配置中的注释,那么我的消费者将从Confluent客户端发送的配置中获得两个使用方 例如,类io.confluent.kafka.serializers.KafkaAvroDeserializer是两个输入绑定的值反序列化器。
我了解,因为配置在Kafka活页夹上,它将应用于使用该活页夹定义的所有使用者。
有什么方法可以定义这些特定的属性,以便它们仅适用于融合的特定使用者绑定,而所有其他输入绑定都可以使用默认的SCS配置?
答案 0 :(得分:3)
您可以通过configuration
属性设置特定于绑定的使用者和生产者属性。
spring.cloud.stream.kafka.bindings.<channelName>.consumer.configuration.foo.bar=baz
使用非标准序列化器/反序列化器时,必须分别为生产者和消费者设置useNativeEncoding
和useNativeDecoding
。再次,请参阅参考手册。