从kafka connect API获取任务ID以在日志中打印

时间:2018-07-02 13:07:31

标签: apache-kafka apache-kafka-connect

我有一个kafka连接接收器代码,其下面的json作为curl命令传递给它来注册任务。

请让我知道是否有人对如何获取我的连接的任务ID有任何想法。例如在下面的示例中,我们定义的最大任务数为3,所以我需要知道 日志的3个任务的名称,即我需要知道日志的哪一行属于哪个任务。

在下面的示例中,我知道我有3个任务-基于kafka连接日志的TestCheck-1TestCheck-2TestCheck-3。我想知道如何获取任务名称,以便可以在我的kafka连接日志行中打印它们。

{
        "name": "TestCheck",
        "config": {
                "topics": "topic1",
                "connector.class": "ApplicationSinkTask Class package",
                "tasks.max": "3",
                "key.converter": "org.apache.kafka.connect.storage.StringConverter",
                "value.converter": "org.apache.kafka.connect.storage.StringConverter",
                "connector.url": "jdbc connection url",
                "driver.name": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
                "username": "myusername",
                "password": "mypassword",
                "table.name": "test_table",
                "database.name": "test",
        }
}

注册后,我将获得以下详细信息。

curl -X POST -H "Content-Type: application/json" --data @myjson.json http://service:8082/connectors

{"name":"TestCheck","config":{"topics":"topic1","connector.class":"ApplicationSinkTask Class package","tasks.max":"3","key.converter":"org.apache.kafka.connect.storage.StringConverter","value.converter":"org.apache.kafka.connect.storage.StringConverter","connector.url":"jdbc:sqlserver://datahubprod.database.windows.net:1433;","driver.name":"jdbc connection url","username":"myuser","password":"mypassword","table.name":"test_table","database.name":"test","name":"TestCheck"},"tasks":[{"connector":"TestCheck","task":0},{"connector":"TestCheck","task":1},{"connector":"TestCheck","task":2}],"type":null}

1 个答案:

答案 0 :(得分:0)

您可以使用Kafka Connect Rest API管理连接器。您可以找到一大堆命令here

上面链接中给出的示例显示,您可以使用命令

检索给定连接器的所有任务。
$ curl localhost:8083/connectors/local-file-sink/tasks
[
  {
    "id": {
      "connector": "local-file-sink",
      "task": 0
    },
    "config": {
      "task.class": "org.apache.kafka.connect.file.FileStreamSinkTask",
      "topics": "connect-test",
      "file": "test.sink.txt"
    }
  }
]

您可以使用自己选择的语言发送curl命令,并将json响应导入变量/字典中,以供进一步使用,例如打印到日志。这是一个使用python的非常简单的示例,该示例会将整个输出分配给一个变量。

import requests
import json

connectors = 'http://localhost:8083/connectors'
p = requests.get(connectors)
data = p.json()

如果将data变量解析为字典,则可以访问每个元素,即task id

我希望这会有所帮助!