如何从键值列表向Kafka Topic输出单个键值对?
解决方案
你需要使用flatMap操作来同时拆分键和值的列表,将每个键元素与对应的元素配对后输出。flatten仅能处理值为集合的场景,无法同时拆分键的集合,所以不适用这里。
示例代码如下:
// 假设keys和values的列表长度一致,确保一一对应 KStream<keys, values> flattenedStream = mapValues.flatMap((keyList, valueList) -> { List<KeyValue<keys, values>> result = new ArrayList<>(); // 遍历列表,将每个key和对应的value配对 for (int i = 0; i < keyList.size(); i++) { if (i < valueList.size()) { // 避免索引越界 result.add(KeyValue.pair(keyList.get(i), valueList.get(i))); } } return result; }); // 输出到指定Topic flattenedStream.to("out-topic", Produced.with(keySerdes, valueSerdes));
关键说明:
flatMap允许你将单个键值对转换为多个键值对,正好适配将两个列表拆分为多组单键单值的场景。- 遍历过程中加入了索引越界判断,避免因键列表和值列表长度不一致导致的异常。
- 最终生成的
KStream<keys, values>可以直接使用to方法输出到目标Topic,适配你已有的Avro格式Serdes。
内容的提问来源于stack exchange,提问作者Naga Ramesh Busam
相关产品推荐
相关产品推荐

