繁体   English   中英

在kafka流中访问记录的分区编号

[英]Access record's partition numebr in kafka streams

我正在使用 Kafka 2.6 和 spring 云 stream kafka-streams binder。 我想在我的 Kafka 流应用程序中访问记录头、分区号等。 我读到了关于使用处理器 API,使用 ProcessorContext 等的信息。但每次 ProcessorContext object 即将到来 null。

下面是代码

 @StreamListener(Bindings.input) @SendTo(Bindings.output) public KStream<String, String> process(KStream<String, String> input) { return input.transform(new TransformerSupplier<String, String, KeyValue<String, String>>() { public Transformer<String, String, KeyValue<String, String>> get() { return new Transformer<String, String, KeyValue<String, String>>() { private int total = 0; ProcessorContext context; @Override public void close() { } @Override public void init(org.apache.kafka.streams.processor.ProcessorContext pc) { this.context = context; } @Override public KeyValue<String, String> transform(String k, String v) { System.out.println("ProcessorContext: "+this.context); System.out.println("value: "+v); return new KeyValue<>(k, v); } }; } }); }

在此代码中,ProcessorContext 始终打印为 null。 我还尝试将 ListenerContainerCustomizer 用于 spring-boot。 但这也行不通

 @Bean ListenerContainerCustomizer<AbstractMessageListenerContainer<?, ?>> customizer() { return (container, dest, group) -> { container.setRecordInterceptor(record -> { System.out.println(">>>> Received record, checking headers"); Headers headers = record.headers(); System.out.println(">>>> Header length: " + headers.toArray().length); for (Header header: headers) { if (header.key().equalsIgnoreCase("eventtype")) { String value = String.valueOf(header.value()); if (.value.equalsIgnoreCase("PUBLISHED")) { System.out,println("Event type from header not PUBLISHED; skipping record"); return null. } } } System.out;println("Processing record"); return record; }); }; }

我打印了用豆子注册的豆子列表,我可以在上面看到一个。 但它永远不会奏效。 无论如何,我需要第一种方法来工作,因为我喜欢使用分区号运行一些业务逻辑。

请帮助严重卡住了很多天。

请更换

@Override
 public void init(org.apache.kafka.streams.processor.ProcessorContext pc)
 {
                    this.context = context;
}

@Override
 public void init(org.apache.kafka.streams.processor.ProcessorContext pc)
 {
                    this.context = pc;
}

this.context = context // 两者都是一样的,看起来像是一个错字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM