Kafka Streams将KTable值映射为单独的值

时间:2017-12-05 13:37:29

标签: apache-kafka apache-kafka-streams

我有一个Kafka Stream应用程序,它将单个主题读作KTable,将每个元素转换为0-n个元素,并将所有元素写入另一个主题。流程看起来像这样(简化了很多):

('a', '123') -> ('a', '1,2,3') -> ('a1', '1'), ('a2', '2'), ('a3', '3')

这是否可以使用Kafka Stream DSL?正在使用的所有主题都是compact,因此我想模拟一个表,永远不会删除旧值。

tl; dr; 如何将邮件转换为多条邮件?

1 个答案:

答案 0 :(得分:2)

不确定您是否可以通过DSL表达这一点。但使用Processor API执行此操作相当简单:

builder.stream("input-topic").transform(...).to("output-topic");

您将键值存储附加到transform()并为每个输入记录执行以下操作:

  1. 检查商店中是否存在相应的键值对
    • 如果是(即store.get()!=null),则从商店中取出旧值并将其拆分;用null替换每个“拆分记录”的值并发出所有这些记录
  2. 如果输入记录value!=null,则将输入记录按原样放入商店并拆分输入记录并发出单独的输出记录
  3. 如果输入记录value==null,请从商店中删除key
  4. 查看文档了解更多详情:https://docs.confluent.io/current/streams/developer-guide/dsl-api.html#applying-processors-and-transformers-processor-api-integration