能否通过REST API与Kafka Connect推送数据至Kafka,无需自定义连接器自动创建主题及更新Avro Schema Registry
存在这样的实现方式,以下是几种无需自定义连接器的可行方案:
Confluent REST Proxy
这是Confluent官方提供的工具,原生支持通过REST API向Kafka写入数据,同时自动处理主题创建与Schema Registry更新:
- 自动主题创建:确保Kafka Broker开启
auto.create.topics.enable=true配置,当推送数据至不存在的主题时,REST Proxy会触发Kafka自动创建主题(遵循Broker的默认主题配置)。 - Avro Schema自动注册:发送请求时指定
Content-Type: application/vnd.kafka.avro.v2+json,并在请求体中携带value_schema字段(首次推送该Schema时),REST Proxy会自动将Schema注册到Schema Registry;后续推送同一Schema的数据时,只需引用已注册的Schema ID即可。 - 示例请求:
只需部署Confluent REST Proxy并配置好Kafka与Schema Registry的地址,无需编写任何自定义连接器。POST /topics/my-new-topic Content-Type: application/vnd.kafka.avro.v2+json { "records": [ { "value": {"id": 1, "name": "test"}, "value_schema": "{\"type\": \"record\", \"name\": \"TestRecord\", \"fields\": [{\"name\": \"id\", \"type\": \"int\"}, {\"name\": \"name\", \"type\": \"string\"}]}" } ] }
Apicurio Registry + Kafka HTTP Bridge
Apicurio Registry是开源的Schema Registry实现,搭配Strimzi提供的Kafka HTTP Bridge可实现类似功能:
- 自动主题创建:同样依赖Kafka Broker的
auto.create.topics.enable=true配置,HTTP Bridge推送数据至不存在的主题时会触发主题创建。 - Schema自动注册:发送Avro格式数据前,可将Schema上传至Apicurio Registry获取ID,后续请求携带该ID即可;部分版本的Bridge支持自动检测并注册新Schema,进一步简化操作。
- 无需自定义连接器,只需部署Apicurio Registry与Kafka HTTP Bridge并完成关联配置即可。
Spring Kafka + Spring Boot REST API
如果需要更灵活的自定义逻辑但不想编写连接器,可以用Spring Boot快速搭建REST API:
- 自动主题创建:通过
spring.kafka.admin.auto-create-topics=true配置,Spring Kafka会自动创建不存在的主题。 - Schema自动注册:使用Spring Kafka的
AvroSerializer,配置好Schema Registry地址后,当发送新的Avro对象时,Serializer会自动将对应的Schema注册到Registry,无需手动干预。 - 示例代码片段:
利用Spring生态的自动配置即可实现需求,无需自定义连接器。@RestController @RequestMapping("/data") public class DataController { @Autowired private KafkaTemplate<String, GenericRecord> kafkaTemplate; @PostMapping public ResponseEntity<Void> pushData(@RequestBody GenericRecord data, @RequestParam String topic) { kafkaTemplate.send(topic, data); return ResponseEntity.ok().build(); } }
内容的提问来源于stack exchange,提问作者Millenium Sun
相关产品推荐
相关产品推荐

