在 Java 生态中,Apache Kafka 通过 kafka-clients.jar
提供了原生客户端支持。开发者需要手动创建 KafkaConsumer
实例并订阅指定主题(Topic)来实现消息消费。典型实现如下:
1 2 3 4 5 6 7 8 9 10
| public void pollMessages() { Consumer<String, String> consumer = new KafkaConsumer<>(getConsumerConfig()); consumer.subscribe(Collections.singleton(topic), new RebalanceListener()); ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000)); consumer.commitSync(); }
|
Spring Kafka 在原生客户端基础上进行了深度封装,通过声明式注解显著简化了开发流程。例如,只需使用 @KafkaListener
注解即可实现消息监听:
1 2 3 4
| @KafkaListener(id = "orderService", topics = "order.topic") public void handleOrderEvent(ConsumerRecord<String, String> record) { }
|
这种简洁的语法背后,Spring Kafka 实际上构建了一套完整的消费者(Consumer)管理机制。那么问题来了:Spring Kafka 是如何创建这些消费者的呢?