解决这个问题的方法???我无法阅读KAFKA-AVRO架构消息。我试图将消息从logstash发送到KAFKA到HDFS。
以下是技术堆栈:
Logstash配置文件如下所示:
data[, 29] = sapply(data[,29], nchar)
schema.avsc文件如下所示:
input {
stdin{}
}
filter {
mutate {
remove_field => ["@timestamp","@version"]
}
}
output {
kafka {
topic_id => 'logstash_logs14'
codec => avro {
schema_uri => "/opt/logstash/bin/schema.avsc"
}
}
}
执行以下命令:
在自己的终端中启动Zookeeper
./ bin / zookeeper-server-start ./etc/kafka/zookeeper.properties
2在自己的终端中启动Kafka
{
"type":"record",
"name":"myrecord",
"fields":[
{"name":"message","type":"string"},
{"name":"host","type":"string"}
]
}
3在自己的终端中启动模式注册表
./bin/kafka-server-start ./etc/kafka/server.properties
4从logstash目录运行以下命令
./bin/schema-registry-start ./etc/schema-registry/schema-registry.properties
5运行上述命令后,键入要发送给kafka的日志消息 例如:“Hello World”
6从Kafka消费主题
bin/logstash -f ./bin/logstash.conf
请让我知道如何解决这个问题
谢谢, 众议员
答案 0 :(得分:1)
你是如何写作/出版给卡夫卡的?您正在看到SerializationException,因为数据不是使用schema-registry(或KafkaAvroSerializer)编写的,但在使用schema-registry时,kafka-avro-console-consumer在内部使用schema-registry(或KafkaAvroDeserializer),它希望数据为以某种格式(特别是<magic byte><schemaId><data>
)。如果您使用kafka-avro-console-producer编写avro数据,那么您不应该获得此异常,或者您可以在生产者属性中设置KafkaAvroSerializer以获取密钥和&amp;值序列化器并设置schema-registry-url。
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
io.confluent.kafka.serializers.KafkaAvroSerializer.class);
props.put("schema.registry.url", "http://localhost:8081");
答案 1 :(得分:0)
回答也许为时已晚,但现在面临同样的问题。
Logstrash在此处使用默认的序列化器, “ org.apache.kafka.common.serialization.StringSerializer”
因此,如果您想从事件总线中读取Avro消息,则必须使用Logstash输出上的KafkaAvroSerializers对其进行序列化 “ io.confluent.kafka.serializers.KafkaAvroSerializer”
然后从使用者部分使用匹配的反序列化器。 问题是,logstash根本无法识别IO.CONFLUENT,因此您必须做一些棘手的事情才能将其添加为dep和jars