kafka foreing key加入最后一条记录

时间:2017-07-06 09:41:28

标签: java apache-spark stream apache-kafka apache-kafka-streams

我有两个流在键和值上都有相同的类型,

  - first represent a finantial instrument with key (string) Currency (Eur-USD)
  - second represent a finantial instrument with key (tenor) Eur-3month , Eur-6month , USD-3month


  - first stream: <key, value> = <Eur , { data , .... } >
  - second stream: <key, value> = <Eur-3month , { data .... }>

要求是一个流的最后一个流必须始终与最后一个密钥一起加入另一个流,具体取决于(月份:3m,6m,7m)

   - i thought that the streams must be K-tables is this the correct way to join them and have in output always the last join on the last updates ? 
   - i can have the same results with a stream ? 

在这个声明中,我发现我可以使用的最相似的东西是

   KStream<K, RV> join(final GlobalKTable<GK, GV> globalKTable,
                                 final KeyValueMapper<? super K, ? super V, ? extends GK> keyValueMapper,
                                 final ValueJoiner<? super V, ? super GV, ? extends RV> joiner)

使用KeyValueMapper我可以加入密钥 但是在左侧我有一个流而不是k表,这不会更新&#34;更新&#34;左侧

1 个答案:

答案 0 :(得分:0)

通常,您选择较小的流(具有较少不同键的流)并将其实现为KTable,方法是将其从kafka读取为表(KStreamBuilder.table())或使用.groupByKey()通过reduce()或aggregate()。

然后你加入你的另一个流与KTable。

或者,您可以将您的流实现为KTable并加入它们。我没有详细了解您的用例,因此无法建议哪个更好。

请参阅:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams+Join+Semantics