Kafka Streams制作人上的自定义标头

时间:2019-08-01 13:08:24

标签: java apache-kafka apache-kafka-streams spring-cloud-stream

我在一个主题中有多个事件,并且我尝试按照以下步骤进行处理:

  1. 根据标头值过滤事件
  2. 应用反序列化器
  3. 按键分组
  4. 聚合以生成新的KTable
  5. 新的KTable将与具有新标题的新事件一起流式传输到同一主题。

我能够使用transformValues访问标头,但不确定执行toStream时如何注入新标头值。

streamsBuilder.stream("my-topic")
.transformValues(new Transformer())//access headers here n filter few events
.groupByKey(Serialized.with(Serdes.String(),null)
.aggregate(()->my avro object initialization,(key,value,aggregate)->newValue(Value,aggregate),Materialized.as("my-store").withKeySerde(Serdes.String()).withValueSerde(Serdes.ByteArray())
.mapValues((key,value)->convert to bytes).toStream()

注意:我是KStream的新手。

1 个答案:

答案 0 :(得分:1)

您可以使用Processor API添加自定义标题。以与访问标头相同的方式实施过程方法。

new Processor() { 
    ......
   @override
   public void process(String key, String value) {
       // add a header to the elements
       context().headers().add.("key", "key");
   }
   ...
}