You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:03:21