在Kafka Streams中序列化HashMap

时间:2018-09-18 15:31:28

标签: java hashmap jackson apache-kafka-streams

我正在尝试序列化HashMap<String, String>,这是一些最终会出现在ElasticSearch索引中的DTO属性。

我有这样的课:

class MyDto {
    HashMap<String, String> properties;
}

我希望所有属性都直接位于ES中的_source下:

_source: {
    "firstPropKey": "firstValue",
    "secondPropKey": "secondVal"
    ...
}

不是这个:

_source: {
    properties: {
       "firstPropKey": "firstValue",
       "secondPropKey": "secondVal"
       ...
    }
}

我尝试了各种实现,但无法使其正常工作。这是一种方法:

final StreamsBuilder builder = new StreamsBuilder();

builder.stream(dataTopicName, Consumed.with(Serdes.String(), dtoSerde))
    .map((key, myDTO) -> new KeyValue<>(id, myDTO.properties))
    .to(elasticIndexTopicName, Produced.with(Serdes.String(), dtoPropsSerde));

问题在于dto.properties已用HashMap参数化了<String, String>,而Jackson2Serde不允许参数化的类,所以我需要这样:

private final Jackson2Serde<HashMap> dtoPropsSerde = new Jackson2Serde<>(mapper, HashMap.class);

但是随后我得到类型错误,更具体地说:Cannot resolve method to(String, Produced<K,V>)

如果我制作了dto.properties个旧的未参数化的HashMap,仍然无法使用。在我的日志中找不到有用的东西。 我想念什么?

编辑:值得注意的是,在elasticIndexTopicName主题中我什么都没得到,ElasticSearch接收器连接正在读取。

0 个答案:

没有答案