我创建了一个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的原因。
我不确定我缺少什么。我唯一的想法是,我为密钥转换器使用了错误的类,但是对于给定的错误,这是没有意义的。有人可以看到我在做什么错吗?
答案 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
,因为您仅在值记录上使用架构注册表。