【问题标题】:Should topic created via kafka-topics automatically have associated subjects created?通过 kafka-topics 创建的主题是否应该自动创建关联的主题?
【发布时间】:2019-12-17 00:27:39
【问题描述】:

我正在尝试模仿“融合负载”(不建议将其用于生产用途)来添加自动创建主题、主题等的连接器,从而允许创建 ksql 流和表。我正在使用 curl 与其余界面进行交互。

  1. 当使用kafka-topics创建主题时,是否也会为"topicName-value"等创建关联主题?
$ curl -X GET http://localhost:8082/topics | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   199  100   199    0     0  14930      0 --:--:-- --:--:-- --:--:-- 15307
[
  "Topic_OracleSource2"
]

curl -X GET http://localhost:8081/subjects | jq

[]

没有显示。但是,执行卷曲:

curl -X POST -H "Content-Type: application/vnd.kafka.avro.v2+json"       -H "Accept: application/vnd.kafka.v2+json"       --data '{"value_schema": "{\"type\": \"record\", \"name\": \"User\", \"fields\": [{\"name\": \"name\", \"type\": \"string\"}]}", "records": [{"value": {"name": "testUser"}}]}'       "http://localhost:8082/topics/avrotest"

创建主题:

curl -X GET http://localhost:8081/subjects | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    18  100    18    0     0   2020      0 --:--:-- --:--:-- --:--:--  2250
[
  "avrotest-value"
]

据我所知,不建议这样做,因为主题是动态创建的,而不是在受控环境中预先创建的。

  1. 出现这个问题的原因是,似乎需要主题 'topicName-value/key' 对来为 KSQL 中的主题创建流。

没有主题,我只能看到创建的基于 avro 的连接器的数据,但无法使用 ksql 流和表进一步执行转换。

【问题讨论】:

  • 如果以下答案之一解决了您的问题,请将其标记为已接受。

标签: apache-kafka avro confluent-schema-registry


【解决方案1】:

kafka-topics 只与 Zookeeper 和 Kafka 交互。它不知道架构注册表的存在。

创建 Avro 模式/主题的过程是通过生产者配置 Avro 序列化器。如果 Kafka Connect 源配置了 AvroConverter,它会在获取数据时自己注册一个模式,所以你不需要 curl,假设你对生成的模式感到满意

据我所知,没有办法阻止 KSQL 在注册表中自动注册架构。

似乎需要主题“主题名称-值/键”对来为 KSQL 中的主题创建流。

如果您想使用 Avro,可以。但是,对于 KSQL 支持的其他数据格式,没有“不需要”

无法使用 ksql 流和表进一步执行转换。

您需要更明确地说明原因。你有错误吗?

【讨论】:

  • 我最终做的是清除环境的所有元数据并使用 curl 重新创建连接器。 Curl 似乎只允许 json 格式,但我将 avro 作为属性文件的一部分嵌入,如下所示:
  • Kafka Connect 和模式注册 API 只接受 JSON,是的
  • 最终的想法是:加载连接器 (Oracle) > 创建主题 > 使用纯 AVRO 作为标准格式的 KSQL 操作。有人成功了吗? 1.加载一个连接器(通过融合加载也会创建主题。例如:融合加载Connector_OracleSource_TABLE1 -d source_oracle_TABLE1.properties)---------- curl -X POST -H "Content-Type: application/json " --data @source_oracle_TABLE1.properties localhost:8083/connectors ----------
  • properties (avro): { "name": "Connector_OracleSource_TABLE1", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "topic.prefix" : "Topic_OracleSource_TABLE1", // "key.converter": "io.confluent.connect.avro.AvroConverter", "key.converter.schema.registry.url": "localhost:8081", "value.converter": " io.confluent.connect.avro.AvroConverter", "value.converter.schema.registry.url": "localhost:8081", } } curl 与 json 一起使用,但主体属性文件作为 avro 似乎可以工作但不确定影响?!
  • 这次主题被创建:-------- curl -X GET localhost:8083/connectors | jq % Total % Received % Xferd 平均速度 时间 时间 当前 Dload 上传总花费 左速度 100 53 100 53 0 0 2960 0 --:--:-- --:--:-- --:--:- - 3117 [“Connector_OracleSource_TABLE1”]
【解决方案2】:

kafka-topics用于创建主题时,是否也会为“topicName-value”等创建关联主题?

不,主题不是自动创建的。 (kafka-topics 今天甚至不允许您传递 Avro 模式。)

可能值得提出功能请求?

【讨论】:

  • 对 Apache 或 Confluent 的功能请求会修补所述脚本吗?
  • 这将是对 Confluent 的功能请求,因为 Apache Kafka 的功能不包含模式注册表,因此 AK 不会接受补丁来改进自己的 kafka-topics.sh
  • 顺便说一句,你的回答很好。 :-)
  • 感谢迈克尔和 cricket_007!功能请求如何与 Confluent 一起用于潜在的商业功能? :)
  • @HTL 我想这需要针对接受模式注册表 URL 的 TopicCommand 包装类的 PR - github.com/confluentinc/kafka/blob/master/bin/kafka-topics.sh
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 2017-10-18
  • 2021-03-16
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2022-01-15
  • 2015-01-18
相关资源
最近更新 更多