[英]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.