使用kafka流进行数据丰富化,KStream-GlobalKtable Join

时间:2019-03-11 12:04:51

标签: apache-kafka apache-kafka-streams

我有一个场景,我通过从kafka主题中读取数据来创建Kafka KStream。 KStream记录的键为null,值为{{一个json对象}}

null: { "ID":"1", "name":"XDFER"}
null: { "ID":"1", "name":"TRAFD"}

真实姓名存储在GlobalKTable中为:

XDFER : "john"
TRAFD : "albert"

我想要执行数据丰富化,以便最终结果是:

null: { "ID":"1", "name":"john"}
null: { "ID":"1", "name":"albert"}

我开始阅读有关Kafka Stream应用程序的信息,在每个教程/示例中,数据丰富都是通过比较KStream和GlobalKTable的键来完成的。以我为例,我需要将KStream记录的值与GlobalKTable中的键进行比较。如何实现此目标的任何想法或示例。

1 个答案:

答案 0 :(得分:2)

具有null键或null值的流的输入记录将被忽略,并且不会触发联接。

因此,您需要重新设置流的密钥,以便可以将名称用作密钥。

stream.selectKey(v-> v.get("name"))

重新输入密钥后,便可以使用GlobalKTable加入流。

您可以在此处阅读详细的行为:

https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html#kstream-globalktable-join