整合kafka Consumer春季批次

时间:2020-01-24 07:01:23

标签: spring-boot apache-kafka spring-batch kafka-consumer-api spring-kafka

我有一个在春季启动中开发的Kafka Consumer,并且能够阅读该主题中的消息。 我想将其与Spring批处理集成,因为我想创建一个批处理文件。 我不确定该怎么做。

2 个答案:

答案 0 :(得分:3)

Spring Batch添加了对v4.2中的Kafka主题读写数据的支持,请参见KafkaItemReaderKafkaItemWriter

您也可以在Josh Long的Spring Batch中了解有关Spring Tips installment的Kafka支持。

答案 1 :(得分:0)

尝试如下操作:

private static final Logger LOG = LoggerFactory.getLogger(Listener.class);
@KafkaListener(id = "batch-listener", topics = "${app.topic.batch}")
public void receive(@Payload List<String> messages,
                    @Header(KafkaHeaders.RECEIVED_PARTITION_ID) List<Integer> partitions,
                    @Header(KafkaHeaders.OFFSET) List<Long> offsets) {

    LOG.info("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -");
    LOG.info("beginning to consume batch messages");

    for (int i = 0; i < messages.size(); i++) {

        LOG.info("received message='{}' with partition-offset='{}'",
                messages.get(i), partitions.get(i) + "-" + offsets.get(i));

    }
    LOG.info("all batch messages consumed");
}



 @EnableKafka
 @Configuration
 public class ListenerConfig {

@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;

@Bean
public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>();
    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);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, "batch");
    props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, "5");
    return props;
}

@Bean
public ConsumerFactory<String, String> consumerFactory() {
    return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());
    factory.setBatchListener(true);
    factory.getContainerProperties().setBatchErrorHandler(new BatchLoggingErrorHandler());
    return factory;
}

}

ref:https://memorynotfound.com/spring-kafka-batch-listener-example/