簡體   English   中英

帶有 Avro 記錄的 Kafka Streams TopologyTestDriver 的架構注冊問題

[英]Schema Registery Issue with Kafka Streams TopologyTestDriver with Avro record

我正在嘗試使用 TopologyTestDriver 測試 kafka 流。 我正在分享代碼片段和我面臨的錯誤。

public class ToplogyTest extends AvroSourceJsonTopologyTestSupport {
    private static final String MOCK_SCHEMA_REGISTRY_URL = "mock://test:8081";
    private TopologyTestDriver testDriver;
    private TestInputTopic<String, GenericRecord> inputTopic;
    private MockSchemaRegistryClient schemaRegistryClient;
}

  private final Properties props;

public ToplogyTest () {
    super();
     props = new Properties();
    props.put(StreamsConfig.APPLICATION_ID_CONFIG, "streamsTest");
    props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "dummy:1234");
    props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
    props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, GenericAvroSerde.class);
    props.put(KafkaAvroSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG, MOCK_SCHEMA_REGISTRY_URL); 
    schemaRegistryClient = new MockSchemaRegistryClient();
}

 @BeforeEach
   public void setup() throws Exception {
// Created the topology
 // Create test driver
        testDriver = new TopologyTestDriver(topology, props);
        // Create Serdes used for test record keys and values
        Serde<String> stringSerde = Serdes.String();
        Serde<GenericRecord> avroSerde = new GenericAvroSerde();
final Map<String,String> avroSerdeConfig = new HashMap<>();
        avroSerdeConfig.put(KafkaAvroSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG, MOCK_SCHEMA_REGISTRY_URL);
        avroSerde.configure(avroSerdeConfig, false);
        usersTopic = testDriver.createInputTopic(
                "input-topic",
                stringSerde.serializer(),
                avroSerde.serializer());
}
  @Test
  public void Test(){
 usersTopic.pipeInput("null",record);
}

錯誤 org.apache.kafka.common.errors.SerializationException: Error serializing Avro message Suppressed: java.lang.IllegalArgumentException: Please always: 在每次測試之前使用提供的方法在設置結束時初始化測試驅動程序; 使用提供的方法在每次測試后關閉測試驅動程序。 引起:java.net.MalformedURLException:未知協議:mock at java.net.URL.(URL.java:618) at java.net.URL.(URL.java:508) at java.net.URL.(URL .java:457) 在 io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java: 152)

我在這里理解的是我無法注冊模擬模式注冊表。 有沒有人遇到過類似的問題?

我還沒有嘗試過使用 GenericAvroSerde,但是使用 SpecificAvroSerde 它有一個構造函數接受 SchemaRegistryClient 的參數。

當您創建 GenericAvroSerde 時,傳入您的 mockSchemaRegistryClient 實例,以便它使用您的模擬,以強制它不使用它將自己創建的 SchemaRegistryClient(使用無參數構造函數)。

此外,刪除 default.value.serde=GenericAvroSerde 的屬性 - 如果您像在測試中的代碼中通常那樣在測試中配置它,則您再次配置 GenericAvroSerde 的實例而沒有模擬,並且在運行時它仍會嘗試連接到 schema.registry.url

我不知道這是否是 MockSchemaRegistryClient 的用途,但是當與 SpecificAvroSerde 一起使用時,這種方法對我有用

根據錯誤, mock://不是有效的 URI 方案。 對於您的測試,即使不使用它也需要是http://

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM