我已经使用Kafka-avro-console-producer向“ test-avro”主题写了一些Avro数据。 然后,我使用Kafka-console-producer将一些纯文本数据写入同一主题“ test-avro”。 此后,主题中的所有数据都被破坏。谁能解释导致这种情况发生的原因?
答案 0 :(得分:1)
您根本无法再使用avro-console-consumer
(或具有Avro解串器的Consumer)来读取这些偏移量,因为它将假定主题中的所有数据都是Avro并使用Confluent的KafkaAvroDeserializer
。
普通的console-producer
将推送非Avg编码的UTF-8字符串,并使用StringSerializer
,该字符串与the wire format expected for the Avro deserializer不匹配
克服它们的唯一方法是知道哪些偏移量不好,然后等待它们在主题上过期,或者重置使用者组以在这些消息之后开始。或者,您始终可以使用ByteArrayDeserializer
,并添加一堆条件逻辑来解析消息以确保不会丢失数据。
tl; dr 生产者和消费者必须就该主题的数据格式达成共识。