[英]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.