Kafka Streams LongDeserializer接收数据长度非8报错问题排查
问题根源
你的代码存在常量定义错误,是引发该问题的核心原因:
// 错误的常量定义,两个不同用途的常量指向了同一个Topic private static final String OUTPUT_TOPIC_NAME = "favourite-colour-output"; private static final String INTERMEDIATE_TOPIC_NAME = "favourite-colour-output";
该错误直接导致逻辑错乱:
- 你提前创建了
user-keys-and-colours作为存储用户-颜色映射的中间Topic,但代码实际把用户颜色数据(Value为字符串类型的颜色值)写入了最终输出Topicfavourite-colour-output - 后续统计生成的颜色计数结果(Value为Long类型)也被写入同一个
favourite-colour-outputTopic - 消费者从开头消费时,先读到了提前写入的字符串类型Value,使用LongDeserializer反序列化时,字符串的字节长度不符合Long类型固定8字节的要求,直接抛出序列化异常。
解决方案
按以下步骤操作即可修复问题:
- 修改代码常量定义,把中间Topic指向你提前创建的
user-keys-and-colours:
// 修正后的常量定义 private static final String INTERMEDIATE_TOPIC_NAME = "user-keys-and-colours";
- 清理历史脏数据:
- 停止运行中的Kafka Streams程序、生产者、消费者
- 删除已被污染的
favourite-colour-outputTopic,再按原有参数重新创建该Topic - 可选:删除Kafka Streams对应
application.id的本地状态存储目录,避免残留状态影响运行
- 重新启动Kafka Streams程序、消费者、生产者,再次输入测试数据即可正常得到统计结果。
内容的提问来源于stack exchange,提问作者Arefe
相关产品推荐
相关产品推荐

