我正在尝试使用Kafka Streams并编写了一个简单的第一个应用程序。
我创建了一个主题,在我的代码中我打电话:
final KStream<String, Upload> uploadStream = builder.stream(UPLOADS_TOPIC, Consumed.with(Serdes.String(), uploadSerde));
使用.avsc文件创建上传serdes,初始化为:
final SpecificAvroSerde<Upload> uploadSerde = new SpecificAvroSerde<>();
uploadSerde.configure(serdeConfig, false);
我使用以下方式输出内容:
uploadStream.foreach((k, v) -> System.out.println("uploadStream: Key: " + k + ", Value: " + v));
我的问题是输出似乎在键值前面有几个字符,我不确定这是否正常:
我有一个简单的驱动程序,它使用相同的avro架构。
这些奇怪的字符只是标准控制字符还是我的反序列化有问题?
答案 0 :(得分:1)
您的制作人在写入时使用的是与您的消费者(即KafkaAvroSerializer.class
)相关的不同密钥序列化程序(KafkaStreams
),以使其正常工作,需要使用相同的序列化器/反序列化器/ serde类。
因此,您要么将生产者更改为使用StringSerde
而不是StringSerializer
,要么更改Kafka Streams应用程序以使用KafkaAvroSerilalizer
或SpecificAvroSerde
来读取密钥。