Kafka Streams统计相同Key消息数:控制台显示异常表情而非数字
问题分析与解决方案
问题原因
你看到的随机表情符号本质是字节编码不匹配导致的乱码:
- Kafka Streams输出
output_topic时,使用了Serdes.Long(),它会把Long类型的计数以二进制字节形式写入Kafka(比如数字1对应的字节是0x01)。 - 而
kafka-console-consumer默认使用StringDeserializer,它会把这些二进制字节直接当成ASCII字符解析——0x01对应的ASCII控制字符就是笑脸☺,其他数字对应的字节也会被解析成各种奇怪符号/表情。
解决方案
启动控制台消费者时,指定正确的反序列化器,让它能正确解析Long类型的值:
kafka-console-consumer.sh \ --bootstrap-server <你的Kafka地址>:9092 \ --topic output_topic \ --from-beginning \ --key-deserializer org.apache.kafka.common.serialization.StringDeserializer \ --value-deserializer org.apache.kafka.common.serialization.LongDeserializer
额外优化建议
- 简化groupBy操作:你已经通过
selectKey把流的Key改成了author,后续groupBy可以直接用当前Key,不用重复从value中取author:// 优化前 // KTable<String ,Long> keyWithCount = stream.groupBy((key, value) -> value.getAuthor()).count(); // 优化后 KTable<String, Long> keyWithCount = stream.groupByKey().count(); - 验证序列化配置:确保自定义的
BookSerde实现正确,避免上游消息解析错误影响后续统计逻辑。
内容的提问来源于stack exchange,提问作者Wudanty
相关产品推荐
相关产品推荐

