为什么我不能 运行 Kafka 连接器?

Why can I not run a Kafka connector?

背景

首先 - 一些背景知识 - 我正在尝试更多地了解 Kafka 和 Kafka connect。本着这种精神,我正在关注 Mickael Maison 和 Kate Stanley 的早期发行书 'Kafka Connect'。

运行 连接器

很早就(第 2 章 - 连接数据管道中的组件)他们给出了 'How do you run connectors' 的示例。请注意,作者没有使用 Confluent。这里在早期,建议我们创建一个名为sink-config.json的文件,然后创建一个名为topic-to-export[=43的主题=] 使用以下代码行:

bin/kafka-topics.sh --bootstrap-server localhost:9092 \
  --create --replication-factor 1 --partitions 1 --topic topic-to-export

然后指示我们“使用 Connect REST API 使用您创建的配置启动连接器”

$ curl -X PUT -H "Content-Type: application/json" \       http://localhost:8083/connectors/file-sink/config --data "@sink-config.json"

错误

但是,当我 运行 这个命令时,它会出现以下错误:

{"error_code":500,"message":"Cannot deserialize value of type `java.lang.String` from Object value (token `JsonToken.START_OBJECT`)\n at [Source: (org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream); line: 1, column: 36] (through reference chain: java.util.LinkedHashMap[\"config\"])"}

正在尝试修复错误

请记住,我仍在努力学习 Kafka 和 Kafka Connect,我做了一个非常简单的搜索,这使我在 Whosebug 上找到了一个 post,这似乎表明这应该是POST 不是 PUT。但是,将其更改为:

curl -d @sink-config.json -H "Content-Type: application/json" -X POST http://localhost:8083/connectors/file-sink/config

只是引发了另一个错误:

{"error_code":405,"message":"HTTP 405 Method Not Allowed"}

我真的不确定从这里到哪里去,因为这 'seems' 是您应该能够获得连接到 运行 的方式。例如,这个 intro 到 Baeldung 的连接器似乎也指定了这种做事方式。

有人知道发生了什么事吗?我不知道从哪里开始...

首先,感谢您阅读我们图书的抢先体验版。

你在这个例子中发现了一个错误!

要启动连接器,推荐的方法是使用 PUT /connectors/file-sink/config 端点,但是我们提供的示例 JSON 不正确。

JSON 文件应该类似于:

{
    "name": "file-sink",
    "connector.class": "org.apache.kafka.connect.file.FileStreamSinkConnector",
    "tasks.max": 1,
    "topics": "topic-to-export",
    "file": "/tmp/sink.out",
    "value.converter": "org.apache.kafka.connect.storage.StringConverter" 
}

出现错误是因为有另一个端点可用于启动连接器 POST /connectors,而我们提供的 JSON 是针对该端点的。

我们建议您使用 PUT /connectors/file-sink/config,因为同一端点也可用于重新配置连接器。此外,相同的 JSON 文件也可以与 PUT /connector-plugins/{connector-type}/config/validate 端点一起使用。

再次感谢您发现错误并报告它,我们将在接下来的几周内修复该示例。我们也会尽快回复您关于其他问题的邮件。