是否可以通过Kafka Stream DSL连接的join
部分传入或访问消息密钥?
我现在有这样的东西:
KStream<String, GenericRecord> completedEventsStream = inputStartKStream.
join(
inputEndKStream,
(leftValue, rightValue) -> customLambda((Record) leftValue, (Record) rightValue),
JoinWindows.of(windowDuration),
Joined.with(stringSerde, genericAvroSerde, genericAvroSerde)
);
但是,传递到leftValue
的{{1}}和rightValue
记录无法访问kafka消息密钥,因为这是一个单独的字符串。他们仅有的内容是消息本身,而不是密钥。
是否有办法从连接lambda内部访问密钥?我可以做的一件事就是简单地将消息密钥添加为消息本身的一部分,并在那里作为常规字段进行访问,但是我想知道框架是否提供了一种直接访问它的方法?
答案 0 :(得分:2)
在大多数情况下,记录的值中也提供键,这对您的应用而言不是吗?
看起来ValueJoiner
接口有一个improvement filed as part of KIP-149,但还没有像KIP中的其他方法那样完成:ValueTransformer
和ValueMapper
。
您可以在联接之前添加一个步骤来提取密钥,然后在使用ValueMapperWithKey
进行联接之前将其包括在消息的值中。