故事是这样的。我有一个kafka经纪人和一个特定的对象(我通过我的主题发表了jsonify),它有一个我想用作密钥的ID。
目前我正在使用'partitionKeyExtractorClass'配置来设置提取ID的类并将其作为键返回。
看起来像这样:
def extractKey(Message<?> message) {
log.info('Extracting key from message')
String id = new JsonSlurper().parseText(new String(message.payload)).properties.id
log.info("Got = ${id}")
return id
}
我的实际问题是,当我浏览关于主题的消息时,持有我的消息的ConsumerRecord表示密钥为空...
这是一个错误吗?难道我做错了什么?关于这方面的文件不会比这更进一步。
答案 0 :(得分:1)
看,您正在将partition
与key
混合。
目前,KafkaMessageChannelBinder
并未提供确定key
对Message
的选项。
只有您可以强大使用的现有功能是KafkaHeaders.MESSAGE_KEY
:
Object messageKey = this.messageKeyExpression != null
? this.messageKeyExpression.getValue(this.evaluationContext, message)
: message.getHeaders().get(KafkaHeaders.MESSAGE_KEY);
因此,在output
消息之前,您应该计算密钥并将其放入该标头中。