具有不同数据格式的 Kafka 主题

Kafka topic with different format of data

我使用 Kafka-avro-console-producer 为主题“test-avro”写了一些 avro 数据。 然后我使用 Kafka-console-producer 将一些纯文本数据写入同一主题“test-avro”。 在此之后,主题中的所有数据都已损坏。谁能解释一下是什么导致了这样的事情发生?

您根本无法再使用 avro-console-consumer(或带有 Avro 反序列化器的消费者)来读取这些偏移量,因为它会假定主题中的所有数据都是 Avro 并使用 Confluent 的 KafkaAvroDeserializer

普通 console-producer 将推送非 Avro 编码的 UTF-8 字符串并使用 StringSerializer,这将不匹配 the wire format expected for the Avro deserializer

克服它们的唯一方法是知道哪些偏移量是坏的,并等待它们在主题上过期,或者重置消费者组以在这些消息之后开始。或者,您始终可以使用 ByteArrayDeserializer,并添加一堆条件逻辑来解析您的消息,以确保不会丢失数据。

tl;dr生产者和消费者必须就topic的数据格式达成一致。