首页 > 解决方案 > 通过 spring kafka 发送时,landoop/fast-data-dev 中的 kafka 消息数据类型错误

问题描述

我有一个使用 Spring-Kafka 的 Spring Boot 应用程序,并且我在 docker 中使用landoop 的 fast-data-dev作为我的 kafka 集群。我使用 kafka 模板、avro 和 confluent 的模式注册表为某些主题生成消息。一切似乎都工作正常,但是当我输入 fast-data-dev ui 时,我可以看到我的架构已注册,并且我的消息仍然可见,Data type: binary而不是“avro”,因此它们的值在 ui 中不可读。我尝试使用 kafka-avro-console-producer 将一些消息发送到不同的主题,这些消息没有这样的问题 - 它们在 avro 中可见并且在 ui 中可读。但是,当我使用 kafka-avro-console-producer 向我的应用程序发送消息的同一主题发送消息时,它以与我的应用程序发送的消息相同的方式可见(作为二进制文件)。

我在 Spring-Kafka 添加数据类型标头时遗漏了什么吗?或者也许有一个完全不同的原因?

这是我的 application.yml 的一部分:

spring.kafka:
  bootstrap-servers: localhost:9092
  producer:
    key-serializer: org.apache.kafka.common.serialization.StringSerializer
    value-serializer: io.confluent.kafka.serializers.KafkaAvroSerializer
    properties:
      schema.registry.url: http://localhost:8081

另外,当我使用本地安装的融合平台时,消息是可读的,所以问题可能出在 fast-data-dev 图像的某个地方?

标签: spring-bootapache-kafkaavrospring-kafka

解决方案


来自Landoop Kafka-Topic-ui第21行的代码

有一个函数采用参数中的“格式”。假设这getDataFromBeginning是从主题中检索所有消息的函数,如果“格式”(二进制,avro,...)更改......它将不起作用。

恕我直言,这就是导致您的问题的原因。


推荐阅读