无法从Debezium-postgres的kafka流中读取kafka流数据

时间:2018-10-11 06:26:13

标签: avro apache-kafka-streams apache-kafka-connect debezium

我使用以下命令启动kafka连接器:

./bin/connect-standalone etc/schema-registry/connect-avro-standalone.properties etc/kafka-connect-postgres/connect-postgres.properties 

connect-avro-standalone.properties中的序列化道具为:

key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081

internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter.schemas.enable=false

我创建了一个Java后端,它侦听该kafka流主题,并且能够通过每次添加/更新/删除操作从postgres获取数据。
但是数据以某种未知的编码格式传入,这就是为什么我无法正确读取数据的原因。 这是相关的代码段:

properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG,
Serdes.String().getClass().getName());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG,
Serdes.ByteArray().getClass().getName());

StreamsBuilder streamsBuilder = new StreamsBuilder();

final Serde<String> stringSerde = Serdes.String();
final Serde<byte[]> byteSerde = Serdes.ByteArray();

streamsBuilder.stream(Pattern.compile(getTopic()), Consumed.with(stringSerde, byteSerde))
.mapValues(data -> {
  System.out.println("->"+new String(data));
  return data;
});

我对需要更改的地方和内容感到困惑;在avro连接器prop或Java辅助代码中

1 个答案:

答案 0 :(得分:2)

您的Kafka Connect配置在这里意味着Kafka主题上的消息将被Avro序列化:

value.converter=io.confluent.connect.avro.AvroConverter

这意味着您需要在Streams应用中使用Avro进行反序列化。有关更多详细信息,请参见此处:https://docs.confluent.io/current/streams/developer-guide/datatypes.html#avro