我试图不使用@Kafkalistener来编写kafka使用者,下面是我用于配置侦听器的代码行:
@Configuration
@EnableKafka
public class KafkaConfig {
@Value("${kafka.bootstrap-servers}")
private String bootstrapServers;
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
// list of host:port pairs used for establishing the initial connections to the Kafka cluster
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
// allows a pool of processes to divide the work of consuming and processing records
props.put(ConsumerConfig.GROUP_ID_CONFIG, "org");
// automatically reset the offset to the earliest offset
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
return props;
}
@Bean
public ConsumerFactory<String, String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
@Bean
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
ContainerProperties containerProperties=new ContainerProperties("in.t");
ConcurrentKafkaListenerContainerFactory<String, String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
@Bean
public Consumer receiver() {
return new Consumer();
}
}
在这里,我该如何配置主题和侦听器方法,并且我的使用者类可以有多个方法。
还想知道将@kafkalistener与kafka流一起使用时是否遇到任何潜在问题。
PS:我不想使用@KafkaListener。
答案 0 :(得分:2)
@kafkalistener
不适用于Kafka Streams。它用于纯Consumer
。可以通过StreamsBuilderFactoryBean
和@Bean
的特定KStream
来管理Kafka流。
如果您不想使用@kafkalistener
,则需要指导手动创建KafkaListenerContainer
。 KafkaListenerContainerFactory
可以用于此目的,但仅由于Spring Kafka 2.2
而已,而且绝对不能使用Spring Boot。
因此,除非您手动创建ConcurrentMessageListenerContainer
,否则您别无选择。通过ContainerProperties
,您可以在此处注入目标messageListener
。对于自定义Consumer
POJO,您需要考虑将其包装到RecordMessagingMessageListenerAdapter
中。并且只需将最后一个注入ConcurrentMessageListenerContainer
中。
这就是@KafkaListener
底下的工作方式。