Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 集成kafka消费品春季批次_Spring Boot_Apache Kafka_Spring Batch_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Spring boot 集成kafka消费品春季批次

Spring boot 集成kafka消费品春季批次,spring-boot,apache-kafka,spring-batch,kafka-consumer-api,spring-kafka,Spring Boot,Apache Kafka,Spring Batch,Kafka Consumer Api,Spring Kafka,我有一个在spring boot中开发的Kafka消费者,我能够阅读主题中的信息。 我想将它与Spring批处理集成,因为我想创建一个批处理文件。 我不知道如何做到这一点。Spring Batch在中添加了对Kafka主题的读/写数据的支持,请参见和 您还可以查看Josh Long在Spring Batch中提供的关于Kafka支持。Spring Batch在、请参阅和中添加了对Kafka主题的读/写数据的支持 您还可以查看Josh Long编写的关于Spring批处理中的Kafka支持的文章。

我有一个在spring boot中开发的Kafka消费者,我能够阅读主题中的信息。 我想将它与Spring批处理集成,因为我想创建一个批处理文件。
我不知道如何做到这一点。

Spring Batch在中添加了对Kafka主题的读/写数据的支持,请参见和


您还可以查看Josh Long在Spring Batch中提供的关于Kafka支持。

Spring Batch在、请参阅和中添加了对Kafka主题的读/写数据的支持

您还可以查看Josh Long编写的关于Spring批处理中的Kafka支持的文章。

尝试如下:

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;
}

}
参考:

尝试如下操作:

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:

我如何用它以特定格式创建一个批处理文件,并为所有字段定义索引。此外,我们是否需要关心制作人是单独发送消息还是成批发送消息。@Sonia您需要哪种类型的文件,无法理解,如果您想成批生成消息,那么您也需要注意这一点。我如何用它创建一个特定格式的批处理文件,并为所有字段定义索引。另外,我们是否需要关心制作人是单独发送消息还是成批发送消息。@Sonia您需要哪种类型的文件,无法理解,如果您想成批生成消息,那么您也需要注意这一点。我可以使用KafkaItemReader来使用spring批处理应用程序中主题的avro消息吗?是,创建reader时,可以通过在consumerProperties中将key.deserializer属性设置为Kafkaavroderializer来实现。KafkaItemReader类将以GenericRecord形式返回记录?我需要将它们转换为SpecificRecord,或者如何转换?实际上,我想读取消息来自的架构字段,并且必须将所有字段映射到java对象,然后使用指定格式的传入数据创建一个批处理文件。@MahmoudBenHassine是否支持spring batch with spring cloud starter stream kafka。因为我接受了卡夫卡作为流。然后我需要将这些流传递给spring批处理。有没有可能?@MahmoudBenHassine我按照这种方式从azure事件中心读取卡夫卡流。我是否可以使用KafkaItemReader来使用spring批处理应用程序中主题的avro消息?是的,您可以在创建reader时将consumerProperties中的key.deserializer属性设置为Kafkaavroderializer。KafkaItemReader类将以GenericRecord的形式返回记录?我需要将它们转换为SpecificRecord,或者如何转换?实际上,我想读取消息来自的架构字段,并且必须将所有字段映射到java对象,然后使用指定格式的传入数据创建一个批处理文件。@MahmoudBenHassine是否支持spring batch with spring cloud starter stream kafka。因为我接受了卡夫卡作为流。然后我需要将这些流传递给spring批处理。有没有可能?@MahmoudBenHassine我按照这种方式从azure事件中心读取卡夫卡流。