Spring Boot Kafka Producer发送消息后Key值显示异常求助
以下是可能导致Kafka消息Key显示为随机数的几个原因及对应排查方向:
消息发送时Key未正确赋值
先检查发送消息的代码逻辑,确认你传入的Key确实是预期的特定值,而非随机生成的变量或未初始化的值。比如是否误写了类似new Random().nextInt()的代码作为Key,或是变量赋值错误导致Key并非预期值。Key序列化器与实际Key类型不匹配
你的配置中指定了IntegerSerializer作为Key序列化器,若代码中传入的Key并非Integer类型(比如Long、String),会导致序列化后的数据异常,在查看工具中显示为类似随机数的结果。确保Key的类型与配置的序列化器完全匹配,若Key是字符串类型,需将key-serializer改为org.apache.kafka.common.serialization.StringSerializer。查看工具的反序列化配置错误
很多Kafka查看工具(如kafka-console-consumer.sh)默认使用StringDeserializer反序列化Key。若你的Key是Integer类型,工具用字符串反序列化会把二进制数据解析为乱码,看起来像随机数。使用工具时需指定正确的Key反序列化器,比如命令行工具添加参数:--property key.deserializer=org.apache.kafka.common.serialization.IntegerDeserializerSpring Kafka模板调用错误
确认使用KafkaTemplate发送消息时,调用的是带Key参数的重载方法:kafkaTemplate.send(topic, key, value)。若误用了不带Key的方法(如send(topic, value)),Key会被设为null,部分工具可能将null显示为异常数值;或是参数顺序传错,将Value当成Key传入。
另外你提到用Avro发送消息值,但配置中value-serializer设为StringSerializer,这部分存在配置冲突,虽然你说Value正常,但建议统一为Avro对应的序列化器(如io.confluent.kafka.serializers.KafkaAvroSerializer),避免后续出现潜在问题。
内容的提问来源于stack exchange,提问作者oldMonk

