【问题标题】:Spring cloud stream with kafka streams binder: how to set `trusted.packages` for a Stream Processor (that's different than consumer and producer)带有kafka流绑定器的Spring云流:如何为流处理器设置`trusted.packages`(与消费者和生产者不同)
【发布时间】:2021-02-07 07:01:24
【问题描述】:

我有一个简单的流处理器(不是消费者/生产者),看起来像这样 (Kotlin)

@Bean
fun processFoo():Function<KStream<FooName, FooAddress>, KStream<FooName, FooAddressPlus>> {
    return Function { input-> input.map { key, value ->
        println("\nPAYLOAD KEY: ${key.name}\n");
        println("\nPAYLOAD value: ${value.address}\n");
        val output = FooAddressPlus()
        output.address = value.address
        output.name = value.name
        output.plus = "$value.name-$value.address"
        KeyValue(key, output)
    }}
}

FooNameFooAddressFooAddressPlus 这些类与处理器在同一个包中。 这是我的配置文件:

spring.cloud.stream.kafka.binder:
  brokers: localhost:9093

spring.cloud.stream.function.definition: processFoo

spring.cloud.stream.kafka.streams.binder.functions.processFoo.applicationId: foo-processor
spring.cloud.stream.bindings.processFoo-in-0:
  destination: foo.processor
spring.cloud.stream.bindings.processFoo-out-0:
  destination: foo.processor.out

spring.cloud.stream.kafka.streams.binder:
  deserializationExceptionHandler: logAndContinue
  configuration:
    default.key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
    default.value.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
    commit.interval.ms: 1000

运行处理器时出现此错误:

The class '<here_comes_package>.FooAddress' is not in the trusted packages: [java.util, java.lang]. 
If you believe this class is safe to deserialize, please provide its name. 
If the serialization is only done by a trusted source, you can also enable trust all (*).

在使用 Kafka Streams Binder 流处理器时,为所有内容设置可信包的最佳方法是什么? (没有消费者/生产者,只有流处理器)

非常感谢!

【问题讨论】:

  • @jokarls 谢谢。这是我之前尝试过的事情之一,但我有一个流处理器,在那个答案中,他们分别使用消费者和生产者。在这种情况下,他们要么在配置中设置消费者/生产者属性(spring.kafka.consumer.properties.spring.json.trusted.packages),要么在消费者/生产者工厂中设置反序列化器。因为我有一个流处理器,所以我没有可以设置的消费者或生产者道具或工厂,但我可能错了。

标签: kotlin apache-kafka spring-cloud-stream


【解决方案1】:

您可以在...binder.configuration 下设置任意配置属性(Kafka 流属性、serdes 使用的属性等):

spring:
  cloud:
    stream:
      kafka:
        streams:
          binder:
            configuration:
              spring.json.trusted.packages: '*'

【讨论】:

  • 该代码很有用,但如果您可以添加有关此代码片段如何解决问题的描述,您的答案会更好
  • 谢谢@gary-russel。正如这里所问的stackoverflow.com/questions/64516217/… 使用TopologyTestDriver 时如何在测试中设置此属性?在 TopologYTestDriver 创建中设置此属性时,我无法使其工作。谢谢
  • @gary-russell 这不起作用(不再),我看到以下内容:2021-04-12 13:46:55.767 [main] WARN o.a.k.c.consumer.ConsumerConfig - The configuration 'spring.json.trusted.packages' was supplied but isn't a known config.
  • 这只是来自 kafka 消费者关于它无法识别的属性的虚假警告。事实上,它证明了属性 is 设置正确 - 相同的属性在其configure() 方法中传递到 serde。如果您遇到问题,请提出一个显示代码、配置、版本、日志等的新问题。
猜你喜欢
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2017-05-31
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多