我正在尝试添加一个拦截器来对生产者发布到Kafka主题的消息进行验证。除了由Kafka主题执行的Schema验证之外,我还需要进行一些验证。我遵循的步骤如下。
但是当我向主题发布消息时,我没有调用我编写的自定义拦截器类。 (我也没有收到任何错误。消息完全发布到主题上。)
我提到https://cwiki.apache.org/confluence/display/KAFKA/KIP-42%3A+Add+Producer+and+Consumer+Interceptors
请就此提出建议。
答案 0 :(得分:1)
这个问题很老了,所以我假设你在此期间找到了解决方案。但是,为了防止其他人,我发现我的buildconf.py
类根据消息内容将消息分派给不同的主题,除非我的流已经有了指定的输出,否则不会调用它。
我的第一次尝试看起来像这样,因为我认为我不需要指定输出主题。这不起作用:
ProducerInterceptor
但这样做:
val builder: KStreamBuilder = new KStreamBuilder
val input = builder.stream("input-topic")
val stream: KafkaStreams = new KafkaStreams(builder, streamsConfigWithProducerInterceptor)
stream.start()
值得注意的是,在第二个示例中没有任何内容发布到val builder: KStreamBuilder = new KStreamBuilder
val input = builder.stream("input-topic").through("dummy-output-topic")
val stream: KafkaStreams = new KafkaStreams(builder, streamsConfigWithProducerInterceptor)
stream.start()
,并且使用dummy-output-topic
代替to
也似乎也有同样的效果。
在我的情况下,我在调用through
之前更改记录,然后使用拦截器将它们分配给不同的主题,所以我的代码看起来更像是这样:
map
我希望这些例子可以帮助那些与我犯同样错误的val builder: KStreamBuilder = new KStreamBuilder
val input = builder.stream("input-topic")
.map(new CustomKeyValueMapper)
.through("dummy-output-topic")
val stream: KafkaStreams = new KafkaStreams(builder, streamsConfigWithProducerInterceptor)
stream.start()
人合作。
答案 1 :(得分:0)
属性名称是interceptor.classes,而不是intercetors.classes