在我目前的项目中,我们使用Kafka,Kafka Connect,Elasticsearch创建了一个数据管道。数据最终以“信号主题”为主题,不在形式上
KeyValue<id:String, obj:Signal>
现在我试图引入Kafka Streams,以便能够从Kafka到Elasticsearch对数据进行一些处理。
我的第一个目标是能够使用不同类型的辅助信息来增强数据。典型的情况是基于数据中已存在的一些信息将另一个字段附加到数据。例如,数据包含一个“rawevent”字段,基于此我想添加一个“事件描述”,然后输出到另一个主题。
实施此方法的“正确”方法是什么?
我在考虑maby将侧面数据放在一个单独的位置上 kafka中的主题
KeyValue<rawEvent:String, eventDesc:String>
并有加入这两个主题的流,但我不知道如何实现这一点 这可能吗?我遇到的所有例子似乎都要求数据源的密钥是相同的,因为我不确定它是否可能。 如果有人知道如何做到这一点就会很棒。
提前致谢。
答案 0 :(得分:2)
您有两种可能性:
rawEvent
中提取Signal
并设置为新密钥以对KTable<rawEvent:String, eventDesc:String>
进行联接。像KStream#selectKey(...)#join(KTable...)
rawEvent
)中提取非键连接属性,该属性用于执行GlobalKTable查找以计算连接。请注意,两个连接都提供不同的语义,因为KStream-KTable连接按时同步,而KStream-GlobalKTable连接未同步。查看此博客文章了解更多详情:https://www.confluent.io/blog/crossing-streams-joins-apache-kafka/