我有两个流在键和值上都有相同的类型,
- 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表,这不会更新左侧“updates”上的连接
1条答案
按热度按时间relj7zay1#
通常,您选择较小的流(具有较少不同键的流)并将其具体化为一个ktable,方法是将它作为表(kstreambuilder.table())从kafka读取,或者使用.groupbykey()后跟reduce()或aggregate()。
然后你加入你的另一个流与ktable。
或者,您可以将两个流具体化为ktable并将它们连接起来。我没有详细了解您的用例,因此无法建议哪一个更好。
请参见:https://cwiki.apache.org/confluence/display/kafka/kafka+streams+join+semantics