[英]Kafka stream consumer for JSON object : How to map
[英]Kafka Consumer with JSON?
是否可以使用 Kafka 從 HTTP 請求中獲取 JSON 對象,將它們放入主題然后將它們發送到消費者(數據庫)?
順便說一句,這是我的 KafkaConfig class:
@EnableKafka
@Configuration
public class KafkaConfig {
@Bean
public KafkaTemplate<String, User> kafkaTemplate(){
return new KafkaTemplate<>(producerFactory());
}
@Bean
static public ProducerFactory<String,User> producerFactory() {
Map<String, Object> config = new HashMap<>();
config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return new DefaultKafkaProducerFactory<>(config);
}
@Bean
public ConsumerFactory<String,User> consumerFactory(){
Map<String, Object> config = new HashMap<>();
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
config.put(ConsumerConfig.GROUP_ID_CONFIG,"group_id");
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);
return new DefaultKafkaConsumerFactory<>(config);
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String,User> kafkaListenerContainerFactory(){
ConcurrentKafkaListenerContainerFactory<String,User> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
我假設您知道如何使用 spring 項目創建帖子 REST 點。 基本上在您從端點獲得 json 輸入后,您可以使用 kafkaTemplate 引用將 json object 發送到 kafka。 像這樣的東西作為偽代碼
@RestController
class ExampleController
@Autowired
private final KafkaTemplate kafkaTemplate;
@PostMapping("/anyPath")
public void post(final ObjectAsJson yourObject) {
kafkaTemplate.doSend(// here map your object to a Producer Record)
// depending on your use you can return a custom success response
}
然后,您可以使用 KafkaListener 注釋連接一個方法來使用並將其寫入數據庫。
@KafkaListener(topics = "topicName", groupId = "foo", containerFactory = "kafkaListenerContainerFactory")
public void listen(YourCustomObject message) {
// with kafkaListenerContainerFactory it should deserialise it to your desired object and here you can just write your database insertion here
}
另外我會看看Kafka Connect ,它有助於像這樣的集成,您希望實現 http 作為源和數據庫作為接收器和介於兩者之間的 kafka 主題。
希望它是有幫助的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.