Kafka Connect,JdbcSinkConnector-获取“获取ID为1的Avro模式时出错,找不到主题。错误代码:40401”

时间:2018-12-11 20:04:40

标签: apache-kafka apache-nifi apache-kafka-connect confluent

我创建了一个NiFi流,该流最终使用Confluent Registry中的值模式将json记录发布为具有Avro编码值和字符串键的记录。这是NiFi中的configuration for the AvroRecordSetWriter

我现在正尝试使用Kafka Connect(connect-standalone)使用JdbcSinkConnector将消息移至PostgreSQL数据库,但是出现以下错误:Error retrieving Avro schema for id 1

我已经确认我在Confluent注册表中有一个ID为1的架构。以下是我为Connect任务配置的信息

工作人员配置:

bootstrap.servers=localhost:29092
key.converter.schemas.enable=false
key.converter=org.apache.kafka.connect.storage.StringConverter
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
offset.storage.file.filename=/tmp/connect.offsets
rest.host.name=localhost
rest.port=8083
plugin.path=share/java

连接器配置:

name=pg-sink
connector.class=io.confluent.connect.jdbc.JdbcSinkConnector
tasks.max=1
topics=rds
connection.url=jdbc:postgresql://localhost:5432/test
connection.user=postgres
connection.password=xxxxxxxx
insert.mode=upsert
table.name.format=test_data
auto.create=true

我在NiFi中创建了一个流,该流正确地使用了消息,并且还通过指定--property schema.registry.url=http://schema-registry:8081使用kafka-avro-console-consumer成功使用了消息(在输出中格式为JSON)。请注意,我在Docker容器中运行使用者,这就是为什么URL不是localhost的原因。

我不确定我缺少什么。我唯一的想法是,我为密钥转换器使用了错误的类,但是对于给定的错误,这是没有意义的。有人可以看到我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

我对Nifi不太了解,但是我看到架构的名称是“ rds”,并且在错误日志中说它在架构注册表中找不到主题。

Kafka使用require 'test_helper' class RelationshipTest < ActiveSupport::TestCase def setup @relationship = Relationship.new(follower_id: users(:michael).id, followed_id: users(:archer).id) end test "should be valid" do assert @relationship.valid? end test "should require a follower_id" do @relationship.follower_id = nil assert_not @relationship.valid? end test "should require a followed_id" do @relationship.followed_id = nil assert_not @relationship.valid? end end 序列化avro记录,并同时在架构注册表中注册关联的avro架构。 它使用KafkaAvroSerializer来反序列化avro记录并从架构注册表中检索关联的架构。

模式注册表存储模式分为称为“主题”的类别,为记录的主题命名的默认行为是:KafkaAvroDeserializer(用于值记录)和topic_name-value(用于键)。

在您的情况下,您没有在Kafka上注册架构,而是在Nifi上注册了架构,所以我的猜测是名称“ rds”出现在架构注册表中,或者是架构注册表中的使用者名称。

您如何验证模式已被核心存储?

通常情况下,正确的主题为topic_name-key,因为您仅在值记录上使用架构注册表。